Name: cjp-demo-environment
Owner: CloudBees
Description: Docker Compose Demo Environment for CloudBees Jenkins Platform
Forked from: schottsfired/cjp-demo-environment
Created: 2016-10-31 15:47:58.0
Updated: 2016-10-31 15:47:59.0
Pushed: 2016-10-28 13:51:21.0
Size: 64
Language: Nginx
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
A great way to run CloudBees Jenkins on your laptop, with support for “Docker stuff”!
Feel free to clone/fork/extend this repo to meet your specific needs, and shoot me a PR if I missed anything!
My goal for this repo is to help people learn about CloudBees Jenkins and Docker while journeying through the README below.
DISCLAIMER: Not officially suppported by CloudBees. A very cool, pre-configured Docker trial is available here on the CloudBees website.
NOTE: All services are intended to run on the same host in this example.
Go get Docker for Mac Beta.
NOTE: Docker on Docker support has not been tested on other platforms.
Increase CPU/Memory limits in Docker preferences to as much as you can spare (e.g. CPU: 4, Memory: 6GB).
Open terminal and type:
sudo vi /etc/hosts
then add (or append) this entry:
127.0.0.1 cjp.local
Create a file called .env
in the project directory (alongside docker-compose.yml
) and copy everything into it from the provided .env.sample
. Update the MAVEN_CACHE
so that it's specific to your environment. If you don't have a Maven cache, or want to use additional/other caches, then update the ssh-slave:
volumes:
in docker-compose.yml
accordingly. For now this is the only change needed in .env
.
Simply,
docker-compose up
..from the project directory, and wait a little while :)
Important directories like JENKINS_HOME(s), Nginx logs, etc. are volume mapped (persisted) to the working project directory. Treat JENKINS_HOME directories with care, and consider backups.
Go to http://cjp.local/cjoc
Activate
Click Manage Jenkins > Configure System and set the Jenkins URL to http://cjp.local/cjoc (or just save if it's already correct)
Add a Client Master item named e.g. cje-prod
with URL http://cjp.local/cje-prod.
Add a Client Master item named e.g. cje-test
with URL http://cjp.local/cje-test.
exec
into the CJOC container and generate a key pair:
docker exec -it cjoc bash
ssh-keygen
Stick with the defaults and choose a password (or leave blank).
Copy your public key to a text editor:
cd /var/jenkins_home/.ssh
cat id_rsa.pub
In CJOC, click “Credentials”, “System”, “Global credentials (unrestricted)“, “Add Credentials”, select SSH Username with private key
. Enter jenkins
as the username and select From the Jenkins master ~/.ssh
for the Private key option.
In .env
, replace SSH_SLAVE_COMMAND
with the public key that was just generated, save, and restart the container:
docker-compose restart ssh-slave
Create a Shared Slave item in CJOC (named e.g. shared-ssh-agent
), using the credentials above, host: ssh-slave
, and a Remote FS root of /home/jenkins
. Give it some labels, like shared
, ssh
, docker
, docker-cloud
.
Add a Shared Cloud item in CJOC (named e.g. shared-cloud
). Remote FS root is /home/jenkins
. Give it some labels, like shared
, jnlp
, java-build-tools
, docker
, docker-cloud
and click Save. You should now be taken to a screen that displays the slave command to run.
In .env
, replace JNLP_SLAVE_COMMAND
with the -secret
you see in the Jenkins UI, then save.
Start the JNLP agent (and watch it add itself to the shared-cloud):
docker-compose restart jnlp-slave
Note: The JNLP agent bombs on initial startup because the CJOC shared-cloud is not available and ready to accept clients - remember: JNLP agents connect to the master, not the other way around. Add it to the shared-cloud pool (via restart
) after CJOC is up and running.
Automate all the things!
docker-service
)Is supported by the following services:
cje-test
ssh-slave
jnlp-slave
docker-service
(tcp://docker-service:2375)When executing a docker
command from within these containers, the Docker client installed inside the container communicates with the Docker server outside the container. This magic is provided by Docker socket volume mapping; see -v /var/run/docker.sock:/var/run/docker.sock
in docker-compose.yml
. For more information, read this famous blog post.
Use ? + C
to stop the environment, or better, use:
docker-compose down
Clean your environment often (free disk space, fix “strange” issues) with:
./docker-clean.sh
Open an interactive terminal on a container (service) with:
docker exec -it <containerName/serviceName> bash
Or run a command within a container immediately, e.g. to ping another container (thank you Docker 1.12 :)
docker exec -it <containerName/serviceName> ping cjp.proxy