├── Dockerfile ├── README.md └── jenkins-slave.sh /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM java:8u66-jdk 2 | 3 | ENV JENKINS_REMOTING_VERSION 2.52 4 | ENV HOME /home/jenkins 5 | 6 | RUN useradd -c "Jenkins user" -d $HOME -m jenkins 7 | RUN curl --create-dirs -sSLo /usr/share/jenkins/remoting-$JENKINS_REMOTING_VERSION.jar http://repo.jenkins-ci.org/public/org/jenkins-ci/main/remoting/$JENKINS_REMOTING_VERSION/remoting-$JENKINS_REMOTING_VERSION.jar \ 8 | && chmod 755 /usr/share/jenkins 9 | 10 | COPY jenkins-slave.sh /usr/local/bin/jenkins-slave.sh 11 | 12 | USER jenkins 13 | 14 | VOLUME /home/jenkins 15 | 16 | ENTRYPOINT ["/usr/local/bin/jenkins-slave.sh"] 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Jenkins slave 2 | 3 | Moved to [`jenkinsci/jnlp-slave`](https://hub.docker.com/r/jenkinsci/jnlp-slave/) 4 | 5 | 6 | [`csanchez/jenkins-slave`](https://hub.docker.com/r/csanchez/jenkins-slave/) 7 | 8 | A [Jenkins](https://jenkins-ci.org) slave using JNLP. 9 | 10 | See [Jenkins Distributed builds](https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds) for more info. 11 | 12 | For a container with swarm plugin see 13 | [`csanchez/jenkins-swarm-slave`](https://registry.hub.docker.com/u/csanchez/jenkins-swarm-slave/) 14 | 15 | ## Running 16 | 17 | To run a Docker container 18 | 19 | docker run csanchez/jenkins-slave -url http://jenkins-server:port 20 | 21 | If the command line options are not set it will try to use environment variables, 22 | including Kubernetes set variables for services `jenkins` and `jenkins-slave`. 23 | 24 | * `JENKINS_URL`: url for the Jenkins server 25 | * `JENKINS_SERVICE_HOST` and `JENKINS_SERVICE_PORT`: will be used to compose the url if the previous is not present. 26 | * `JENKINS_TUNNEL`: (`HOST:PORT`) connect to this slave host and port instead of Jenkins server 27 | * `JENKINS_SLAVE_SERVICE_HOST` and `JENKINS_SLAVE_SERVICE_PORT`: will be used to compose the tunnel argument if the previous is not present. 28 | 29 | 30 | # Building 31 | 32 | docker build -t csanchez/jenkins-slave . 33 | -------------------------------------------------------------------------------- /jenkins-slave.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Usage jenkins-slave.sh [options] -url http://jenkins SECRET SLAVE_NAME 4 | 5 | # if `docker run` has 2 or more arguments the user is passing jenkins launcher arguments 6 | if [[ $# -gt 1 ]]; then 7 | 8 | # jenkins slave 9 | JAR=`ls -1 /usr/share/jenkins/remoting-*.jar | tail -n 1` 10 | 11 | PARAMS="" 12 | 13 | # if -url is not provided try env vars 14 | if [[ "$@" != *"-url "* ]]; then 15 | if [ ! -z "$JENKINS_URL" ]; then 16 | PARAMS="$PARAMS -url $JENKINS_URL" 17 | elif [ ! -z "$JENKINS_SERVICE_HOST" ] && [ ! -z "$JENKINS_SERVICE_PORT" ]; then 18 | PARAMS="$PARAMS -url http://$JENKINS_SERVICE_HOST:$JENKINS_SERVICE_PORT" 19 | fi 20 | fi 21 | 22 | # if -tunnel is not provided try env vars 23 | if [[ "$@" != *"-tunnel "* ]]; then 24 | if [ ! -z "$JENKINS_TUNNEL" ]; then 25 | PARAMS="$PARAMS -tunnel $JENKINS_TUNNEL" 26 | elif [ ! -z "$JENKINS_SLAVE_SERVICE_HOST" ] && [ ! -z "$JENKINS_SLAVE_SERVICE_PORT" ]; then 27 | PARAMS="$PARAMS -tunnel $JENKINS_SLAVE_SERVICE_HOST:$JENKINS_SLAVE_SERVICE_PORT" 28 | fi 29 | fi 30 | 31 | echo Running java $JAVA_OPTS -cp $JAR hudson.remoting.jnlp.Main -headless $PARAMS "$@" 32 | exec java $JAVA_OPTS -cp $JAR hudson.remoting.jnlp.Main -headless $PARAMS "$@" 33 | fi 34 | 35 | # As argument is not jenkins, assume user want to run his own process, for sample a `bash` shell to explore this image 36 | exec "$@" 37 | --------------------------------------------------------------------------------