Installing and Usage¶
The simplest way to install rally-ci is pull docker image.
First you need to install docker. Installing docker in ubuntu may be done by following:
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo usermod -a -G docker `id -u -n` # add yourself to docker group
NOTE: re login is required to apply users groups changes and actually use docker.
Pull docker image:
$ docker pull rallyforge/rally-ci
Or you may want to build rally-ci image from source:
$ cd ~/sources/rally-ci # cd to rally-ci sources on your system
$ docker build -t myrally .
Create volume-directory:
$ mkdir ~/rally-ci-volume
This directory will be used to store configuration and logs.
Run in simulation mode¶
$ cd ~/rally-ci-volume
$ ln -s /etc/rally-ci/simulation-config.yaml config.yaml
$ docker run -p 10022:22 -p 10080:80 -v $HOME/rally-ci-volume:/home/rally rallyforge/rally-ci
Now you can point your browser to http://localhost:10080/ and see a real time status of the service.
Run in production mode¶
You should create a ssh key and upload it to gerrit (https://review.openstack.org/):
$ cd ~/rally-ci-volume
$ mkdir ~/.ssh
$ ssh-keygen -f .ssh/id_rsa # create ssh keypair
$ vi config.yaml # create configuration file
$ sudo chown -R 65510 .
$ sudo chmod -R g+w .
$ cat .ssh/id_rsa.pub # copy and paste this key to gerrit
And run container:
$ docker run -p 10022:22 -p 10080:80 -v $HOME/rally-ci-volume:/home/rally rallyforge/rally-ci
All logs may be found in ~/rally-ci-volume/. You may want to see the rally-ci logs in real time:
$ tail -f ~/rally-ci-volume/rally-ci.err.log
The rally-ci service will listen tcp ports:
- 10022 ssh service (for emergency situations)
- 10080 web service (jobs logs and realtime status of the service)
You may expose web and ssh ports to any numbers. Just use “-p 8080:80” to expose web to port 8080 instead of 10080.
Configuration file¶
Structure of configuration file¶
Configuration file is yaml object (dictionary). Each key of this object represents name of section. Value of this object represents configuraion of this section.
Nearly all objects contain “module” key. The value of this key is plugin to be used to do all work.
Stream section¶
Stream is plugin to be used for collecting events.
Available stream plugins¶
rallyci.streams.gerrit¶
Standard stream for receiving gerrit events.
Sample config:
stream:
module: rallyci.streams.gerrit
username: joe
hostname: review.openstack.org
port: 29418
rallyci.streams.fake¶
Used for testing. Will read events from file line by line.
Sample config:
stream:
module: rallyci.streams.fake
path: /path/to/json/file/with/events.json
Loggers section¶
Loggers are used to log scripts output.
Environments section¶
Each environment performs some actions and export environment variables.
Available environments¶
rallyci.environments.event¶
This environment is used to export gerrit event variables to script’s env.
Sample config:
module: rallyci.environments.event
export-event:
GERRIT_PROJECT: change.project
GERRIT_REF: patchSet.ref
rallyci.environments.dummy¶
Simple environment to export any static variables. Does not have any configuration at this level. All configuration is done in “jobs” section (see full config example).
Sample config:
dummy:
module: rallyci.environments.dummy
Nodepools section¶
Nodepools are used to manage worker nodes.
Available nodepools¶
rallyci.nodepools.fair¶
Return node with less running jobs.
Sample configuraion:
nodepools:
localdocker:
module: rallyci.nodepools.fair
tasks_per_node: 2
nodes:
- hostname: worker1.net
username: rally
port: 33
- hostname: worker1.net
username: admin
key: /home/rally/.ssh/superkey
The config above has two nodes in pool. First node has non standard ssh port.
Runners section¶
Runners are used to run scripts on VM’s or containers created on nodes from nodepools. Containers or VM’s are created by runner according to runner’s configuration.
Available runners¶
rallyci.runners.docker¶
Run jobs in docker containers. Build images from dockerfiles hardcoded in config:
runners:
localdocker:
nodepool: localdocker
module: rallyci.runners.docker
images:
ubuntu-dev: |
FROM ubuntu:14.04
MAINTAINER Sergey Skripnick <sskripnick@mirantis.com>
RUN apt-get update && apt-get install python2.7-dev
RUN useradd -u 65510 -m rally
USER rally
WORKDIR /home/rally
RUN mkdir openstack && cd openstack && \
git clone git://git.openstack.org/openstack/rally.git
rallyci.runners.fake¶
Used for testing. Does nothing but sleeping random delays. Always returns success.
rallyci.runners.lxc¶
Work in progress.
rallyci.runners.virsh¶
Work in progress.
Scripts section¶
Scripts may be used for running tests and building images.
Sample scripts section:
scripts:
git_checkout:
interpreter: /bin/bash -xe -s
data: |
cd $GERRIT_PROJECT && git checkout master && git pull
git fetch https://review.openstack.org/$GERRIT_PROJECT $GERRIT_REF
git checkout FETCH_HEAD && git rebase master
run_tox:
interpreter: /bin/bash -xe -s
data: |
tox -epy27
Jobs section¶
Jobs definitions. Key is the name of job, value is configuration.
Configuration consist of following sections:
- envs
- runner
Sample jobs section:
jobs:
py27:
envs:
- name: event
- name: dummy
export:
RCI_TOXENV: py27
runner:
name: localdocker
image: ubuntu-dev
scripts:
- git_checkout
- run_tox
Projects section¶
This sections descibes which jobs run for which projects:
projects:
"openstack/nova":
jobs:
- pep8
- py27
"openstack/designate"
jobs:
- py34
- rally
Full working sample may be found in source code tree in file etc/sample-config.yaml.
Example full configuration:
---
stream:
module: rallyci.streams.gerrit
username: CHANGEME
hostname: review.openstack.org
port: 29418
loggers:
file:
module: rallyci.loggers.logfile
path: /home/rally/ci-logs/
environments:
event:
module: rallyci.environments.event
export-event:
GERRIT_PROJECT: change.project
GERRIT_REF: patchSet.ref
dummy:
module: rallyci.environments.dummy
nodepools:
localdocker:
module: rallyci.nodepools.fair
tasks_per_node: 2
nodes:
- hostname: localhost
runners:
localdocker:
nodepool: localdocker
module: rallyci.runners.docker
images:
ubuntu-dev: |
FROM ubuntu:14.04
MAINTAINER Sergey Skripnick <sskripnick@mirantis.com>
RUN apt-get update
RUN apt-get -y install git python2.7 bash-completion python-dev libffi-dev \
libxml2-dev libxslt1-dev libssl-dev libpq-dev
RUN apt-get -y install python-pip
RUN pip install tox==1.6
RUN useradd -u 65510 -m rally
USER rally
WORKDIR /home/rally
RUN git config --global user.email "rally-ci@mirantis.com" && \
git config --global user.name "Mirantis Rally CI"
RUN mkdir openstack && cd openstack && \
git clone git://git.openstack.org/openstack/rally.git
scripts:
git_checkout:
interpreter: /bin/bash -xe -s
data: |
env
cd $GERRIT_PROJECT && git checkout master && git pull
git fetch https://review.openstack.org/$GERRIT_PROJECT $GERRIT_REF
git checkout FETCH_HEAD && git rebase master || true
git clean -fxd -e .tox -e *.egg-info
git diff --name-only master
tox:
interpreter: /bin/bash -xe -s
data:
cd $GERRIT_PROJECT && tox -e$RCI_TOXENV
jobs:
py27:
envs:
- name: event
- name: dummy
export:
RCI_TOXENV: py27
runner:
name: localdocker
image: ubuntu-dev
scripts:
- git_checkout
- tox
projects:
"openstack/rally":
jobs:
- py27
The configuration above will run tox -epy27 on each patch in openstack/rally.