├── sample
├── .gitignore
└── pom.xml
├── jenkins
├── plugins.csv
├── init
│ └── master-executors.groovy
├── plugins.awk
├── Dockerfile
└── jenkins-init.sh
├── maven-git
└── Dockerfile
├── jenkins.json
├── node
└── Dockerfile
└── README.md
/sample/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | *.iml
--------------------------------------------------------------------------------
/jenkins/plugins.csv:
--------------------------------------------------------------------------------
1 | mesos,latest
2 | scm-api,0.2
3 | git-client,1.11.0
4 | git,2.2.7
--------------------------------------------------------------------------------
/maven-git/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM maven:3
2 |
3 | RUN apt-get update && apt-get -y install git
--------------------------------------------------------------------------------
/jenkins/init/master-executors.groovy:
--------------------------------------------------------------------------------
1 | import hudson.model.*;
2 | import jenkins.model.*;
3 |
4 | println "--> disabling master executors"
5 |
6 | Jenkins.instance.setNumExecutors(0)
--------------------------------------------------------------------------------
/jenkins/plugins.awk:
--------------------------------------------------------------------------------
1 | BEGIN { FS="," }
2 | {
3 | print "curl -sSL --create-dirs -o /usr/share/jenkins/plugins/" $1 ".hpi https://updates.jenkins-ci.org/" ($2 == "latest" ? "latest/" : "download/plugins/" $1 "/" $2 "/") $1 ".hpi"
4 | }
--------------------------------------------------------------------------------
/jenkins.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "jenkins",
3 | "container": {
4 | "type": "DOCKER",
5 | "docker": {
6 | "image": "jlrigau/jenkins",
7 | "network": "HOST"
8 | },
9 | "volumes": [
10 | {
11 | "containerPath": "/var/jenkins_home",
12 | "hostPath": "/var/data/jenkins",
13 | "mode": "RW"
14 | }
15 | ]
16 | },
17 | "cpus": 0.2,
18 | "mem": 128.0,
19 | "instances": 1
20 | }
--------------------------------------------------------------------------------
/sample/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 | 4.0.0
8 |
9 | sample
10 | sample
11 | 1.0-SNAPSHOT
12 |
13 |
--------------------------------------------------------------------------------
/jenkins/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM jenkins:weekly
2 |
3 | ADD init/*.groovy /usr/share/jenkins/init.groovy.d/
4 |
5 | USER root
6 |
7 | RUN apt-get update && apt-get -y install libsvn1
8 |
9 | ADD http://downloads.mesosphere.io/master/debian/7/mesos_0.21.1-1.0.debian77_amd64.deb /tmp/mesos.deb
10 |
11 | RUN dpkg -i /tmp/mesos.deb && rm /tmp/mesos.deb
12 |
13 | RUN mkdir -p /usr/share/jenkins/plugins && \
14 | chown -R jenkins /usr/share/jenkins/plugins /usr/share/jenkins/init.groovy.d
15 |
16 | ADD plugins.awk plugins.csv /usr/share/jenkins/
17 |
18 | RUN awk -f /usr/share/jenkins/plugins.awk /usr/share/jenkins/plugins.csv | sh
19 |
20 | ADD jenkins-init.sh /usr/local/bin/jenkins-init.sh
21 |
22 | VOLUME ["/var/jenkins_home"]
23 |
24 | ENTRYPOINT ["/usr/local/bin/jenkins-init.sh"]
--------------------------------------------------------------------------------
/jenkins/jenkins-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # if `docker run` first argument start with `--` the user is passing jenkins launcher arguments
4 | if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then
5 | echo "Copying init scripts"
6 | mkdir -p $JENKINS_HOME/init.groovy.d
7 | find /usr/share/jenkins/init.groovy.d/ -type f -exec cp {} $JENKINS_HOME/init.groovy.d/ \;
8 |
9 | echo "Copying plugins"
10 | mkdir -p $JENKINS_HOME/plugins
11 | find /usr/share/jenkins/plugins/ -type f -exec cp {} $JENKINS_HOME/plugins/ \;
12 |
13 | chown -R jenkins:jenkins $JENKINS_HOME
14 | if [[ -z "$@" ]]; then
15 | exec su jenkins -c "/usr/local/bin/jenkins.sh"
16 | else
17 | PARAMS="$@"
18 | exec su jenkins -c "/usr/local/bin/jenkins.sh \"$PARAMS\""
19 | fi
20 | fi
21 |
22 | # As argument is not jenkins, assume user want to run his own process, for sample a `bash` shell to explore this image
23 | exec "$@"
--------------------------------------------------------------------------------
/node/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM jlrigau/maven-git
2 |
3 | # verify gpg and sha256: http://nodejs.org/dist/v0.10.30/SHASUMS256.txt.asc
4 | # gpg: aka "Timothy J Fontaine (Work) "
5 | # gpg: aka "Julien Gilli "
6 | RUN gpg --keyserver pool.sks-keyservers.net --recv-keys 7937DFD2AB06298B2293C3187D33FF9D0246406D 114F43EE0176B71C7BC219DD50A3051F888C628D
7 |
8 | ENV NODE_VERSION 0.12.5
9 | ENV NPM_VERSION 2.11.3
10 |
11 | RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" \
12 | && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
13 | && gpg --verify SHASUMS256.txt.asc \
14 | && grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - \
15 | && tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 \
16 | && rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc \
17 | && npm install -g npm@"$NPM_VERSION" \
18 | && npm cache clear
19 |
20 | # use https instead of git protocol to avoid Connection refused
21 | RUN git config --global url."https://".insteadOf git://
22 |
23 | CMD [ "node" ]
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ci-mesos
2 |
3 | ## Jenkins Docker image
4 |
5 | Open jenkins Dockerfile
6 |
7 | * Check FROM jenkins:weekly
8 | * Show Mesos native library setup
9 | * Check Jenkins configuration
10 | * Check master num executors=0
11 | * Plugin management with .csv file
12 | * Check mesos plugin presence
13 |
14 | ## Show Marathon definition file
15 |
16 | ```shell
17 | $curl -X POST -H "Content-Type: application/json" http://MARATHON_PUBLIC_HOST:8080/v2/apps -d@jenkins.json
18 | ```
19 |
20 | * Show application in Marathon interface
21 | * Show Jenkins logs on Mesos slave
22 |
23 | ```shell
24 | $docker ps
25 | $docker logs -f $(docker ps -lq)
26 | ```
27 |
28 | ## Go to Jenkins through URL
29 |
30 | ## Configure Mesos Cluster on Jenkins
31 |
32 | * Mesos native library path=/usr/lib/libmesos.so
33 | * Mesos Master [hostname:port]=MESOS_HOST:5050
34 | * Checkpointing=Yes
35 |
36 | ## Show the new Framework on Mesos interface
37 |
38 | ## Create a Slave Info for Java
39 |
40 | * Label String=java
41 | * Idle Termination Minutes=30
42 | * check Use Docker Containerizer
43 | * Docker Image=java:7
44 |
45 | ## Create a new project with Java on Jenkins
46 |
47 | * Project type=Freestyle project
48 | * Project name=Projet Java
49 | * Restrict where this project can be run=java
50 | * Add build step
51 | * Execute shell
52 | * Command=java -version
53 | * Save Project and run it
54 |
55 | ## Schedule a build
56 |
57 | * Check Build Queue
58 | * Check Build Executor Status
59 | * Check Console Output
60 |
61 | ## Check Jenkins node
62 |
63 | * Check node on Jenkins
64 | * Check active tasks on Mesos Jenkins Scheduler framework
65 | * Check container on Mesos slave
66 |
67 | ```shell
68 | $docker ps
69 | ```
70 |
71 | ## Configure Maven
72 |
73 | * On Configure System add a new Maven installation
74 | * Name=maven
75 | * Check Install automatically
76 | * Install from Apache with version 3.2.2
77 |
78 | ## Create a Slave Info for Maven
79 |
80 | * Label String=maven
81 | * Idle Termination Minutes=30
82 | * check Use Docker Containerizer
83 | * Docker Image=jlrigau/maven-git
84 |
85 | ## Create a new Maven project on Jenkins
86 |
87 | * Project type=Maven project
88 | * Project name=Projet Maven
89 | * Restrict where this project can be run=maven
90 | * Configure Source Code Management
91 | * Check Git
92 | * Repository URL=https://github.com/jlrigau/ci-mesos.git
93 | * Configure Build
94 | * Root POM=sample/pom.xml
95 | * Goals and options=clean package
96 | * Save Project and run it
97 |
98 | ## Connect to slave container
99 |
100 | ```shell
101 | $docker exec -it CONTAINER_ID /bin/bash
102 | ```
103 |
104 | * Look at /jenkins/workspace/Projet Maven
105 |
--------------------------------------------------------------------------------