├── .gitattributes ├── Dockerfile ├── README.md └── jenkins-slave.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jdk 2 | 3 | MAINTAINER Carlos Sanchez 4 | 5 | ENV JENKINS_SWARM_VERSION 3.15 6 | ENV HOME /home/jenkins-slave 7 | 8 | # install netstat to allow connection health check with 9 | # netstat -tan | grep ESTABLISHED 10 | RUN apt-get update && apt-get install -y net-tools && rm -rf /var/lib/apt/lists/* 11 | 12 | RUN useradd -c "Jenkins Slave user" -d $HOME -m jenkins-slave 13 | RUN curl --create-dirs -sSLo /usr/share/jenkins/swarm-client-$JENKINS_SWARM_VERSION.jar https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/swarm-client/$JENKINS_SWARM_VERSION/swarm-client-$JENKINS_SWARM_VERSION.jar \ 14 | && chmod 755 /usr/share/jenkins 15 | 16 | COPY jenkins-slave.sh /usr/local/bin/jenkins-slave.sh 17 | 18 | USER jenkins-slave 19 | VOLUME /home/jenkins-slave 20 | 21 | ENTRYPOINT ["/usr/local/bin/jenkins-slave.sh"] 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Jenkins swarm slave 2 | 3 | [`csanchez/jenkins-swarm-slave`](https://registry.hub.docker.com/u/csanchez/jenkins-swarm-slave/) 4 | 5 | A [Jenkins swarm](https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin) slave. 6 | 7 | For a container with ssh enabled see 8 | [`csanchez/jenkins-slave`](https://registry.hub.docker.com/u/csanchez/jenkins-slave/) 9 | 10 | ## Running 11 | 12 | To run a Docker container passing [any parameters](https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin#SwarmPlugin-AvailableOptions) to the slave 13 | 14 | docker run csanchez/jenkins-swarm-slave -master http://jenkins:8080 -username jenkins -password jenkins -executors 1 15 | 16 | Linking to the Jenkins master container there is no need to use `--master` 17 | 18 | docker run -d --name jenkins -p 8080:8080 csanchez/jenkins-swarm 19 | docker run -d --link jenkins:jenkins csanchez/jenkins-swarm-slave -username jenkins -password jenkins -executors 1 20 | 21 | 22 | # Building 23 | 24 | docker build -t csanchez/jenkins-swarm-slave . 25 | -------------------------------------------------------------------------------- /jenkins-slave.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # if `docker run` first argument start with `-` the user is passing jenkins swarm launcher arguments 4 | if [[ $# -lt 1 ]] || [[ "$1" == "-"* ]]; then 5 | 6 | # jenkins swarm slave 7 | JAR=`ls -1 /usr/share/jenkins/swarm-client-*.jar | tail -n 1` 8 | 9 | # Do not overwrite the PARAMS variable if the user chose to provide it when launching the service 10 | if [ -z "$PARAMS" ]; then 11 | 12 | # if -master is not provided and using --link jenkins:jenkins 13 | if [[ "$@" != *"-master "* ]] && [ ! -z "$JENKINS_PORT_8080_TCP_ADDR" ]; then 14 | PARAMS="-master http://$JENKINS_PORT_8080_TCP_ADDR:$JENKINS_PORT_8080_TCP_PORT" 15 | else 16 | # Check for parameters in environment variables 17 | if [ ! -z "$AUTO_DISCOVERY_ADDRESS" ]; then 18 | PARAMS="$PARAMS -autoDiscoveryAddress $AUTO_DISCOVERY_ADDRESS" 19 | fi 20 | if [ ! -z "$CANDIDATE_TAG"]; then 21 | PARAMS="$PARAMS -candidateTag $CANDIDATE_TAG" 22 | fi 23 | if [ "${DELETE_EXISTING_CLIENTS}x" = "truex" ]; then 24 | PARAMS="$PARAMS -deleteExistingClients" 25 | fi 26 | if [ "${DISABLE_CLIENTS_UNIQUE_ID}x" = "truex" ]; then 27 | PARAMS="$PARAMS -disableClientsUniqueId" 28 | fi 29 | if [ "${DISABLE_SSL_VERIFICATION}x" = "truex" ]; then 30 | PARAMS="$PARAMS -disableSslVerification" 31 | fi 32 | if [ ! -z "$EXECUTORS" ]; then 33 | PARAMS="$PARAMS -executors $EXECUTORS" 34 | fi 35 | if [ ! -z "$FSROOT" ]; then 36 | PARAMS="$PARAMS -fsroot $FSROOT" 37 | fi 38 | if [ ! -z "$LABELS" ]; then 39 | PARAMS="$PARAMS -labels \"$LABELS\"" 40 | fi 41 | if [ ! -z "$LABELS_FILE" ]; then 42 | PARAMS="$PARAMS -labelsFile $LABELS_FILE" 43 | fi 44 | if [ ! -z "$MASTER" ]; then 45 | PARAMS="$PARAMS -master $MASTER" 46 | fi 47 | if [ ! -z "$MAX_RETRY_INTERVAL" ]; then 48 | PARAMS="$PARAMS -maxRetryInterval $MAX_RETRY_INTERVAL" 49 | fi 50 | if [ ! -z "$MODE" ]; then 51 | PARAMS="$PARAMS -mode $MODE" 52 | fi 53 | if [ ! -z "$NAME" ]; then 54 | PARAMS="$PARAMS -name $NAME" 55 | fi 56 | if [ "${NO_RETRY_AFTER_CONNECTED}x" = "truex" ]; then 57 | PARAMS="$PARAMS -noRetryAfterConnected" 58 | fi 59 | if [ ! -z "$PASSWORD" ]; then 60 | PARAMS="$PARAMS -passwordEnvVariable PASSWORD" 61 | fi 62 | if [ ! -z "$PASSWORD_FILE" ]; then 63 | PARAMS="$PARAMS -passwordFile $PASSWORD_FILE" 64 | fi 65 | if [ ! -z "$RETRY" ]; then 66 | PARAMS="$PARAMS -retry $RETRY" 67 | fi 68 | if [ ! -z "$RETRY_BACKOFF_STRATEGY" ]; then 69 | PARAMS="$PARAMS -retryBackOffStrategy $RETRY_BACKOFF_STRATEGY" 70 | fi 71 | if [ ! -z "$RETRY_INTERVAL" ]; then 72 | PARAMS="$PARAMS -retryInterval $NAME" 73 | fi 74 | if [ "${SHOW_HOSTNAME}x" = "truex" ]; then 75 | PARAMS="$PARAMS -showHostName" 76 | fi 77 | if [ ! -z "$SSL_FINGERPRINTS" ]; then 78 | PARAMS="$PARAMS -sslFingerprints $SSL_FINGERPRINTS" 79 | fi 80 | if [ ! -z "$TOOLS" ]; then 81 | # Tools should be declared as "-e TOOLS='-t toolName=toolLocation -t tool2Name=tool2Location'" 82 | PARAMS="$PARAMS $TOOLS" 83 | fi 84 | if [ ! -z "$TUNNEL" ]; then 85 | PARAMS="$PARAMS -tunnel $TUNNEL" 86 | fi 87 | if [ ! -z "$USERNAME" ]; then 88 | PARAMS="$PARAMS -username $USERNAME" 89 | fi 90 | fi 91 | fi 92 | echo Running java $JAVA_OPTS -jar $JAR -fsroot $HOME $PARAMS "$@" 93 | exec java $JAVA_OPTS -jar $JAR -fsroot $HOME $PARAMS "$@" 94 | fi 95 | 96 | # As argument is not jenkins, assume user want to run his own process, for sample a `bash` shell to explore this image 97 | exec "$@" 98 | --------------------------------------------------------------------------------