This document describes the architecture and administration of the Bazel CI (Continuous Integration) machines.
Bazel's CI uses Jenkins.
The Jenkins controller runs in a Docker container on a virtual machine (VM).
The Jenkins controller distributes the work to various nodes:
The Docker containers run on the Jenkins controller's VM.
//gce/jenkins.ymlfiles (Google Container Engine pod configurations)
You can administer the VMs using the
You can apply the script's changes to:
//gce/vm.sh script commands:
delete: create a machine (unless it already exists) or delete it
delete a machine, then
create it again
stop: start or stop the specified machine(s).
update_metadata: update the metadata for the VM
The metadata is what we pass to the
--metadata flags when we run
gcloud instances create commands. The metadata includes the startup scripts and the pod configuration for the Docker containers.
//gce/vm.sh script runs
gcloud and assumes your default GCE project is the Bazel CI project.
You can install
gcloud from https://cloud.google.com/sdk/
To set the default
gcloud project to “bazel-public”, run:
gcloud config set project bazel-public gcloud auth login
The physical machines need to be on a network allowed for port 50000. See the list of IP ranges provided to the
The physical manually need to have a service installed that talks to the Jenkins controller. The only kind of physical nodes we use are Mac nodes and we need to set them up manually (for licensing reasons).
To set up a Mac executor node: