diff --git a/firefox-jenkins-slave/Dockerfile b/firefox-jenkins-slave/Dockerfile new file mode 100644 index 0000000..23acc85 --- /dev/null +++ b/firefox-jenkins-slave/Dockerfile @@ -0,0 +1,8 @@ +FROM quintenk/jenkins-slave + +MAINTAINER Quinten Krijger "https://github.com/Krijger + +RUN apt-get -y install firefox xvfb +ADD xvfb.sv.conf /etc/supervisor/conf.d/ +CMD supervisord -c /etc/supervisor.conf + diff --git a/firefox-jenkins-slave/README.md b/firefox-jenkins-slave/README.md new file mode 100644 index 0000000..76b2aa6 --- /dev/null +++ b/firefox-jenkins-slave/README.md @@ -0,0 +1,27 @@ +Complete image to run Jenkins as a slave with headless Firefox +============================================================== + +Installed are: +- Supervisord (inherited) +- Oracle Java 7 Development Kit (inherited) +- Firefox +- Xvfb headless display driver + +Run with access to Docker on the host +------------------------------------- + + docker run + -v /run/docker.sock:/run/docker.sock + -v /usr/bin/docker:/usr/bin/docker + [-v ${absolute path to the jenkins directory - helpful for restarts}:/var/jenkins] + -e JENKINS_PORT_8080_TCP_ADDR=${host for master jenkins} + [-e JENKINS_PORT_8080_TCP_PORT=${port for master jenkins, defaults to 8080}] + -e SLAVE_NAME=${slave name, you name the slave when creating the node on the master jenkins} + [-e JENKINS_SECRET=${secret for jenkins - if needed you can find this in the information page for the slave node (on master)}] + -d quintenk/firefox-jenkins-slave + +or skip the two -v options if you don't need Docker from the host + + + + diff --git a/firefox-jenkins-slave/build.sh b/firefox-jenkins-slave/build.sh new file mode 100755 index 0000000..35bf40c --- /dev/null +++ b/firefox-jenkins-slave/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker build -t quintenk/firefox-jenkins-slave . \ No newline at end of file diff --git a/firefox-jenkins-slave/xvfb.sv.conf b/firefox-jenkins-slave/xvfb.sv.conf new file mode 100644 index 0000000..bbb8ccc --- /dev/null +++ b/firefox-jenkins-slave/xvfb.sv.conf @@ -0,0 +1,2 @@ +[program:xvfb] +command=/bin/bash -c "Xvfb :10 -ac" \ No newline at end of file diff --git a/jenkins-slave/Dockerfile b/jenkins-slave/Dockerfile new file mode 100644 index 0000000..b28a7d8 --- /dev/null +++ b/jenkins-slave/Dockerfile @@ -0,0 +1,8 @@ +FROM quintenk/jdk-oracle:7 + +MAINTAINER Quinten Krijger "https://github.com/Krijger + +ADD runslave.sh /usr/local/bin/runslave +RUN chmod +x /usr/local/bin/runslave +ADD jenkins-slave.sv.conf /etc/supervisor/conf.d/ +CMD supervisord -c /etc/supervisor.conf diff --git a/jenkins-slave/README.md b/jenkins-slave/README.md new file mode 100644 index 0000000..b1a21ed --- /dev/null +++ b/jenkins-slave/README.md @@ -0,0 +1,23 @@ +Complete image to run Jenkins as a slave +======================================== + +Installed are: +- Supervisord (inherited) +- Oracle Java 7 Development Kit (inherited) +- Firefox +- Xvfb headless display driver + +Run with access to Docker on the host +------------------------------------- + + docker run + -v /run/docker.sock:/run/docker.sock + -v /usr/bin/docker:/usr/bin/docker + [-v ${absolute path to the jenkins directory - helpful for restarts}:/var/jenkins] + -e JENKINS_PORT_8080_TCP_ADDR=${host for master jenkins} + [-e JENKINS_PORT_8080_TCP_PORT=${port for master jenkins, defaults to 8080}] + -e SLAVE_NAME=${slave name, you name the slave when creating the node on the master jenkins} + [-e JENKINS_SECRET=${secret for jenkins - if needed you can find this in the information page for the slave node (on master)}] + -d quintenk/jenkins-slave + +or skip the two -v options if you don't need Docker from the host \ No newline at end of file diff --git a/jenkins-slave/build.sh b/jenkins-slave/build.sh new file mode 100755 index 0000000..398b7a1 --- /dev/null +++ b/jenkins-slave/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker build -t quintenk/jenkins-slave . \ No newline at end of file diff --git a/jenkins-slave/jenkins-slave.sv.conf b/jenkins-slave/jenkins-slave.sv.conf new file mode 100644 index 0000000..ec786df --- /dev/null +++ b/jenkins-slave/jenkins-slave.sv.conf @@ -0,0 +1,2 @@ +[program:jenkins-slave] +command=/bin/bash -c "runslave" diff --git a/jenkins-slave/runslave.sh b/jenkins-slave/runslave.sh new file mode 100644 index 0000000..35891bd --- /dev/null +++ b/jenkins-slave/runslave.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -x + +JENKINS_AUTHORITY=${JENKINS_PORT_8080_TCP_ADDR}:${JENKINS_PORT_8080_TCP_PORT:-8080} +SLAVE_JAR_URL="http://${JENKINS_AUTHORITY}/jnlpJars/slave.jar" +JNLP_URL="http://${JENKINS_AUTHORITY}/computer/${SLAVE_NAME}/slave-agent.jnlp" + +VAR_LIB_JENKINS="/var/lib/jenkins" +SLAVE_JAR="${VAR_LIB_JENKINS}/slave.jar" + +if [ ! -f ${SLAVE_JAR} ] ; then + mkdir -p ${VAR_LIB_JENKINS} + wget --retry-connrefused -t inf ${SLAVE_JAR_URL} -O ${SLAVE_JAR} +fi + +if [[ $JENKINS_SECRET ]] ; then + java -jar ${SLAVE_JAR} -jnlpUrl ${JNLP_URL} -secret ${JENKINS_SECRET} +else + java -jar ${SLAVE_JAR} -jnlpUrl ${JNLP_URL} +fi