blob: 1517d7d07ca050ef189f34f272d35bd57123d0f8 [file] [log] [blame] [view]
# Gerrit CI Docker Image
This is a Docker image based on the Jenkins Docker image that allows users
to build and test the Gerrit CI jobs automatically, based on the configuration
at https://gerrit.googlesource.com/gerrit-ci-scripts/
In turn, these CI scripts are based on
http://docs.openstack.org/infra/jenkins-job-builder/ -- which builds Jenkins
jobs based on YAML configurations.
In this particular image, the YAML configurations are updated and jobs
reloaded every 5 minutes via the Jenkins SCM trigger. These jobs are fetched
from the gerrit-ci-scripts repository and automatically reloaded.
It is also possible to run the gerrit-ci-scripts-manual job and provide the
legacy Change ID number and a particular revision to build: Jenkins will fetch
this particular change and load any job configurations changed in this revision.
Note that it will not inhibit the main gerrit-ci-scripts trigger from polling.
## Notes for users of boot2docker
If you're using boot2docker, the stock drive image and memory will not be enough.
I would recommend growing your boot2docker volume to at least 40GB, and perhaps
adding an extra 2-4GB swap space at the end of the volume. Additionally, you
may wish to increase the amount of memory allocated to your boot2docker VM to
at least 3GB (4GB+ preferred). Failing to do this may result in unusual
failures of the VM or build errors.
For more information on enlarging the boot2docker volume, please see:
https://docs.docker.com/articles/b2d_volume_resize/
## Building all the images with one command
make build
## Images
Images available are:
* gerritforge/gerrit-ci-slave: Base Jenkins slave with OS and prerequisites.
* gerritforge/gerrit-ci-slave-debian: Base Jenkins slave with OS and prerequisites.
* gerritforge/gerrit-ci-slave-bazel: Bazel build for gerrit 2.14+.
* gerritforge/gerrit-ci-slave-bazel-sbt: Setups scala for plugins that use scala.
* gerritforge/gerrit-ci-slave-mvn - Setups maven for plugins that use maven.
## Running the container
* docker run --privileged -it <image_name> bash
If your not familar with docker please follow https://docs.docker.com/get-started/
## Contributing slave to Gerrit Code Review verification
* Set up root server with running docker service.
* Generate ecdsa SSH key and send public key to CI maintainer:
----
$ ssh-keygen -t ecdsa -b 521
----
* Ask CI maintainer to generate for you unique slave id.
* Run `cat /proc/cpuinfo` and report CI maintainer the number of CPUs, so
that your slave would not get overloaded.
* Clone gerrit-ci-scripts repository:
----
$ git clone https://gerrit.googlesource.com/gerrit-ci-scripts
----
* Make sure `ppp` package is installed, e.g. on Ubuntu run:
----
$ apt-get install ppp
----
* Activate Docker's remote API. On Ubuntu, add this option to systemd script:
----
$ cat /lib/systemd/system/docker.service
[...]
ExecStart=/usr/bin/dockerd -H tcp://10.0.9.1:2375 -H fd://
----
Caution: Don't expose generic interface: `-H tcp://0.0.0.0:2375`,
otherwise, your Docker container could be hijacked.
* Reload systemd and restart docker service:
----
$ systemctl daemon-reload
$ systemctl restart docker.service
----
* Add this line to crontab job (replace <your_slave_id>):
----
*/5 * * * * /root/gerrit-ci-scripts/worker/tunnel.sh <your_slave_id>
----
* In case your server is behind a Firewall, open tcp/2375 port for
incoming requests.
* Check on https://gerrit-ci.gerritforge.com and running `docker ps`
that your slave is up and running and build jobs are scheduled. If all
went well and when jobs have arrived you should see something like:
----
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
d9ff4b6a8b1c gerritforge/jenkins-slave-bazel:debian "bash -x /bin/star..." 6 minutes ago Up 6 minutes 0.0.0.0:32792->22/tcp
----