onenashev/demo-jenkins-config-as-code
This demo shows how to setup Jenkins Config-as-Code with Docker, Pipeline, and Groovy Hook Scripts.
4.7K
This demo image shows how to establish full configuration-as-code in Jenkins with Docker, Pipeline, and
Groovy Hook Scripts.
It offer a GroovyBootstrap
logic which adds support of Groovy classes, debugging and correct error propagation from scripts.
This demo also brings up environment which can be used to develop Jenkins Pipeline libraries locally and to evaluate Jenkins features like Ownership-Based Security.
:exclamation: Warning! This image is not designed for production use. Use it at your own risk. Prototyping is in progress, compatibility of the scripts and Dockerfiles is NOT GUARANTEED.
Jenkins container starts with the following contents:
admin
- Admin with full accessmanager
- User with Jenkins/Manage
permissions
(JEP-223)readonly
- User with Jenkins/SystemRead
and read-only permissions
(JEP-224) -
announcementuser
- User with ability to run jobsJobs and Folders
Nodes:
admin
user, powered by Job Restrictions Pluginlinux
label are available from the Docker Cloud,
powered by Yet Another Docker Pluginmaven-repo
volumemvn
and jdk8
toolsExtra UI Features:
en_US
by Locale PluginTo start the demo instance, run the following command:
docker run --rm --name ci-jenkins-io-dev -v maven-repo:/root/.m2 -e DEV_HOST=${CURRENT_HOST} -p 8080:8080 -p 50000:50000 onenashev/demo-jenkins-config-as-code
The DEV_HOST
environment variable is used to connect agents without using Docker-in-Docker.
If you use Docker for Mac or Docker for Windows,
use additional socat
image for port forwarding
to ensure that you can connect to the Docker VM on these platforms.
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 2376:2375 bobrik/socat TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock
Developing Pipeline libraries
In the Development folder there is a PipelineLib folder, which allows local building and testing of the library. This folder can be mapped to a local repository in order to develop the library without committing changes:
docker run --rm --name ci-jenkins-io-dev -v maven-repo:/root/.m2 -v ${MY_PIPELINE_LIBRARY_DIR}:/var/jenkins_home/pipeline-library -v ${MY_OTHER_PIPELINE_LIBS_DIRS}:/var/jenkins_home/pipeline-libs -e DEV_HOST=${CURRENT_HOST} -p 8080:8080 -p 50000:50000 onenashev/demo-jenkins-config-as-code
Once started, you can just start editing the Pipeline library locally. On every job start the changes will be reflected in the directory without committing anything.
In order to debug the master, use the -e DEBUG=true -p 5005:5005
when starting the container.
Jenkins will be suspended on the startup in such case.
If you open parent POM as a Maven project in your IDE, you will be also able to debug initialization Groovy scripts.
Agents
Having a local agent build is a prerequisite for using the master
for high-speed builds with Maven repository caching.
For this purpose there is a custom Dockerfile in the /agent
folder.
cd agent && docker build -t onenashev/demo-jenkins-maven-builder .
Master
Build image:
docker build -t onenashev/demo-jenkins-config-as-code .
See GitHub releases.
docker pull onenashev/demo-jenkins-config-as-code