diff --git a/base-buster/Dockerfile b/base-buster/Dockerfile index a4844d0..dc42837 100644 --- a/base-buster/Dockerfile +++ b/base-buster/Dockerfile @@ -1,172 +1,130 @@ # syntax=docker/dockerfile:experimental + FROM openjdk:11-jdk-slim-buster LABEL maintainer="SoftwareHeritage" USER root RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache # Pin elasticsearch version RUN echo 'Explanation: profile: elasticsearch\nPackage: elasticsearch elasticsearch-oss\nPin: version 7.10.0\nPin-Priority: -1' > /etc/apt/preferences.d/elasticsearch.pref RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt --mount=type=cache,id=apt-lists,target=/var/lib/apt \ export DEBIAN_FRONTEND=noninteractive && \ apt-get --allow-releaseinfo-change update && \ apt-get -y dist-upgrade && \ apt-get install -y apt-transport-https curl ca-certificates gpg apt dpkg && \ echo deb [signed-by=/usr/share/keyrings/postgres-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main > /etc/apt/sources.list.d/postgres.list && \ curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor > /usr/share/keyrings/postgres-archive-keyring.gpg && \ echo deb [signed-by=/usr/share/keyrings/nodejs-archive-keyring.gpg] https://deb.nodesource.com/node_14.x buster main > /etc/apt/sources.list.d/nodejs.list && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor > /usr/share/keyrings/nodejs-archive-keyring.gpg && \ echo deb [signed-by=/usr/share/keyrings/yarnpkg-archive-keyring.gpg] https://dl.yarnpkg.com/debian/ stable main > /etc/apt/sources.list.d/yarnpkg.list && \ curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor > /usr/share/keyrings/yarnpkg-archive-keyring.gpg && \ echo deb [signed-by=/usr/share/keyrings/elasticsearch-archive-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main > /etc/apt/sources.list.d/elastic-7.x.list && \ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor > /usr/share/keyrings/elasticsearch-archive-keyring.gpg && \ echo deb [signed-by=/usr/share/keyrings/cassandra.gpg] http://www.apache.org/dist/cassandra/debian 40x main > /etc/apt/sources.list.d/cassandra.list && \ curl -fsSL https://downloads.apache.org/cassandra/KEYS | gpg --dearmor > /usr/share/keyrings/cassandra.gpg && \ apt-get update && \ apt-get upgrade -y && \ apt-get install -y \ arcanist \ build-essential \ cassandra \ + curl \ cvs \ elasticsearch \ + fontconfig \ fuse3 \ git-lfs \ googletest \ jq \ libcmph-dev \ libfuse3-dev \ libsvn-dev \ libsystemd-dev \ lzip \ maven \ mercurial \ nodejs \ pkg-config \ postgresql-11 \ postgresql-client-11 \ postgresql-server-dev-11 \ pv \ python3-dev \ python3-pip \ python3-venv \ rabbitmq-server \ redis-server \ subversion \ tini \ valgrind \ yarn \ zstd && \ apt-get install -y --no-install-recommends \ opam # install emscripten required for generating tree-sitter WASM module in swh-search RUN cd /opt && git clone https://github.com/emscripten-core/emsdk.git && cd emsdk \ && ./emsdk install latest && ./emsdk activate latest ENV PATH="${PATH}:/opt/emsdk/upstream/emscripten" RUN pip3 install tree-sitter ## vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ## -# inlined from https://raw.githubusercontent.com/jenkinsci/docker-slave/dde4b4483ef4fa06f436fe92247d1001af74a6dd/Dockerfile-jdk11 +# inlined from https://raw.githubusercontent.com/jenkinsci/docker-agent/4.13.3-2/11/bullseye/Dockerfile # # The MIT License # -# Copyright (c) 2015-2019, CloudBees, Inc. and other Jenkins contributors +# Copyright (c) 2015-2020, CloudBees, Inc. and other Jenkins contributors # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -#(overridden)## FROM openjdk:11-jdk -#(overridden)## MAINTAINER Oleg Nenashev - -ARG VERSION=3.35 +ARG VERSION=4.13 ARG user=jenkins ARG group=jenkins ARG uid=115 ARG gid=120 ARG docker_gid=999 RUN groupadd -g ${gid} ${group} RUN groupadd -g ${docker_gid} docker RUN useradd -c "Jenkins user" -d /home/${user} -u ${uid} -g ${gid} -m ${user} RUN gpasswd -a jenkins docker -#(overridden)## LABEL Description="This is a base image, which provides the Jenkins agent executable (slave.jar)" Vendor="Jenkins project" Version="${VERSION}" ARG AGENT_WORKDIR=/home/${user}/agent -#(buster image)## RUN echo 'deb http://deb.debian.org/debian stretch-backports main' > /etc/apt/sources.list.d/stretch-backports.list -#(moved later)## RUN apt-get update && apt-get install git-lfs RUN curl --create-dirs -fsSLo /usr/share/jenkins/agent.jar https://repo.jenkins-ci.org/public/org/jenkins-ci/main/remoting/${VERSION}/remoting-${VERSION}.jar \ && chmod 755 /usr/share/jenkins \ && chmod 644 /usr/share/jenkins/agent.jar \ && ln -sf /usr/share/jenkins/agent.jar /usr/share/jenkins/slave.jar +ENV LANG C.UTF-8 + +ENV PATH "${PATH}:/home/${user}/.local/bin" + USER ${user} ENV AGENT_WORKDIR=${AGENT_WORKDIR} RUN mkdir /home/${user}/.jenkins && mkdir -p ${AGENT_WORKDIR} -ENV PATH="${PATH}:/home/${user}/.local/bin" - VOLUME /home/${user}/.jenkins VOLUME ${AGENT_WORKDIR} WORKDIR /home/${user} - -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ## - -## vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ## -# inlined from https://raw.githubusercontent.com/jenkinsci/docker-jnlp-slave/ed8005a724792120e6ae284701bb41f60dae244b/Dockerfile-jdk11 -# -# The MIT License -# -# Copyright (c) 2015-2017, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -#(overridden)## FROM jenkins/slave:3.35-3-jdk11 -#(overridden)## MAINTAINER Oleg Nenashev -#(overridden)## LABEL Description="This is a base image, which allows connecting Jenkins agents via JNLP protocols" Vendor="Jenkins project" Version="3.35-2" - -#(already present)## ARG user=jenkins - -USER root -COPY jenkins-agent /usr/local/bin/jenkins-agent -RUN chmod +x /usr/local/bin/jenkins-agent &&\ - ln -s /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-slave -USER ${user} - -ENTRYPOINT ["/usr/bin/tini", "--", "jenkins-slave"] diff --git a/base-buster/jenkins-agent b/base-buster/jenkins-agent deleted file mode 100644 index 9b2d31a..0000000 --- a/base-buster/jenkins-agent +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env sh - -# The MIT License -# -# Copyright (c) 2015-2019, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# Usage jenkins-agent.sh [options] -url http://jenkins [SECRET] [AGENT_NAME] -# Optional environment variables : -# * JENKINS_TUNNEL : HOST:PORT for a tunnel to route TCP traffic to jenkins host, when jenkins can't be directly accessed over network -# * JENKINS_URL : alternate jenkins URL -# * JENKINS_SECRET : agent secret, if not set as an argument -# * JENKINS_AGENT_NAME : agent name, if not set as an argument -# * JENKINS_AGENT_WORKDIR : agent work directory, if not set by optional parameter -workDir -# * JENKINS_DIRECT_CONNECTION: Connect directly to this TCP agent port, skipping the HTTP(S) connection parameter download. -# Value: ":" -# * JENKINS_INSTANCE_IDENTITY: The base64 encoded InstanceIdentity byte array of the Jenkins master. When this is set, -# the agent skips connecting to an HTTP(S) port for connection info. -# * JENKINS_PROTOCOLS: Specify the remoting protocols to attempt when instanceIdentity is provided. - -if [ $# -eq 1 ]; then - - # if `docker run` only has one arguments, we assume user is running alternate command like `bash` to inspect the image - exec "$@" - -else - - # if -tunnel is not provided, try env vars - case "$@" in - *"-tunnel "*) ;; - *) - if [ ! -z "$JENKINS_TUNNEL" ]; then - TUNNEL="-tunnel $JENKINS_TUNNEL" - fi ;; - esac - - # if -workDir is not provided, try env vars - if [ ! -z "$JENKINS_AGENT_WORKDIR" ]; then - case "$@" in - *"-workDir"*) echo "Warning: Work directory is defined twice in command-line arguments and the environment variable" ;; - *) - WORKDIR="-workDir $JENKINS_AGENT_WORKDIR" ;; - esac - fi - - if [ -n "$JENKINS_URL" ]; then - URL="-url $JENKINS_URL" - fi - - if [ -n "$JENKINS_NAME" ]; then - JENKINS_AGENT_NAME="$JENKINS_NAME" - fi - - if [ -z "$JNLP_PROTOCOL_OPTS" ]; then - echo "Warning: JnlpProtocol3 is disabled by default, use JNLP_PROTOCOL_OPTS to alter the behavior" - JNLP_PROTOCOL_OPTS="-Dorg.jenkinsci.remoting.engine.JnlpProtocol3.disabled=true" - fi - - if [ -n "$JENKINS_PROTOCOLS" ]; then - PROTOCOLS="-protocols $JENKINS_PROTOCOLS" - fi - - if [ -n "$JENKINS_DIRECT_CONNECTION" ]; then - DIRECT="-direct $JENKINS_DIRECT_CONNECTION" - fi - - if [ -n "$JENKINS_INSTANCE_IDENTITY" ]; then - INSTANCE_IDENTITY="-instanceIdentity $JENKINS_INSTANCE_IDENTITY" - fi - - # if java home is defined, use it - JAVA_BIN="java" - if [ "$JAVA_HOME" ]; then - JAVA_BIN="$JAVA_HOME/bin/java" - fi - - # if both required options are defined, do not pass the parameters - OPT_JENKINS_SECRET="" - if [ -n "$JENKINS_SECRET" ]; then - case "$@" in - *"${JENKINS_SECRET}"*) echo "Warning: SECRET is defined twice in command-line arguments and the environment variable" ;; - *) - OPT_JENKINS_SECRET="${JENKINS_SECRET}" ;; - esac - fi - - OPT_JENKINS_AGENT_NAME="" - if [ -n "$JENKINS_AGENT_NAME" ]; then - case "$@" in - *"${JENKINS_AGENT_NAME}"*) echo "Warning: AGENT_NAME is defined twice in command-line arguments and the environment variable" ;; - *) - OPT_JENKINS_AGENT_NAME="${JENKINS_AGENT_NAME}" ;; - esac - fi - - #TODO: Handle the case when the command-line and Environment variable contain different values. - #It is fine it blows up for now since it should lead to an error anyway. - - exec $JAVA_BIN $JAVA_OPTS $JNLP_PROTOCOL_OPTS -cp /usr/share/jenkins/agent.jar hudson.remoting.jnlp.Main -headless $TUNNEL $URL $WORKDIR $DIRECT $PROTOCOLS $INSTANCE_IDENTITY $OPT_JENKINS_SECRET $OPT_JENKINS_AGENT_NAME "$@" -fi diff --git a/debian-unstable/Dockerfile b/debian-unstable/Dockerfile index 471e433..f772ffc 100644 --- a/debian-unstable/Dockerfile +++ b/debian-unstable/Dockerfile @@ -1,130 +1,88 @@ # syntax=docker/dockerfile:experimental FROM debian:unstable LABEL maintainer="SoftwareHeritage" USER root +ARG docker_gid=999 +RUN groupadd -g ${docker_gid} docker + RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache RUN --mount=type=cache,id=apt-cache,target=/var/cache/apt --mount=type=cache,id=apt-lists,target=/var/lib/apt \ export DEBIAN_FRONTEND=noninteractive && \ apt-get --allow-releaseinfo-change update && \ apt-get -y dist-upgrade && \ apt-get install -y apt-transport-https curl ca-certificates gpg apt dpkg && \ apt-get install -y \ default-jre \ devscripts \ dh-python \ dpkg-dev \ git \ git-buildpackage \ moreutils \ procps \ python3-dev \ tini RUN git clone --depth 1 https://forge.softwareheritage.org/source/swh-environment.git /tmp/swh-environment && \ cp /tmp/swh-environment/bin/debpkg-* /usr/local/bin && \ rm -rf /tmp/swh-environment + ## vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ## -# inlined from https://raw.githubusercontent.com/jenkinsci/docker-slave/dde4b4483ef4fa06f436fe92247d1001af74a6dd/Dockerfile-jdk11 +# inlined from https://raw.githubusercontent.com/jenkinsci/docker-agent/4.13.3-2/11/bullseye/Dockerfile # # The MIT License # -# Copyright (c) 2015-2019, CloudBees, Inc. and other Jenkins contributors +# Copyright (c) 2015-2020, CloudBees, Inc. and other Jenkins contributors # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -#(overridden)## FROM openjdk:11-jdk -#(overridden)## MAINTAINER Oleg Nenashev - -ARG VERSION=3.35 +ARG VERSION=4.13 ARG user=jenkins ARG group=jenkins ARG uid=115 ARG gid=120 ARG docker_gid=999 RUN groupadd -g ${gid} ${group} -RUN groupadd -g ${docker_gid} docker RUN useradd -c "Jenkins user" -d /home/${user} -u ${uid} -g ${gid} -m ${user} RUN gpasswd -a jenkins docker -#(overridden)## LABEL Description="This is a base image, which provides the Jenkins agent executable (slave.jar)" Vendor="Jenkins project" Version="${VERSION}" ARG AGENT_WORKDIR=/home/${user}/agent -#(buster image)## RUN echo 'deb http://deb.debian.org/debian stretch-backports main' > /etc/apt/sources.list.d/stretch-backports.list -#(moved later)## RUN apt-get update && apt-get install git-lfs RUN curl --create-dirs -fsSLo /usr/share/jenkins/agent.jar https://repo.jenkins-ci.org/public/org/jenkins-ci/main/remoting/${VERSION}/remoting-${VERSION}.jar \ && chmod 755 /usr/share/jenkins \ && chmod 644 /usr/share/jenkins/agent.jar \ && ln -sf /usr/share/jenkins/agent.jar /usr/share/jenkins/slave.jar +ENV LANG C.UTF-8 + +ENV PATH "${PATH}:/home/${user}/.local/bin" + USER ${user} ENV AGENT_WORKDIR=${AGENT_WORKDIR} RUN mkdir /home/${user}/.jenkins && mkdir -p ${AGENT_WORKDIR} -ENV PATH="${PATH}:/home/${user}/.local/bin" - VOLUME /home/${user}/.jenkins VOLUME ${AGENT_WORKDIR} WORKDIR /home/${user} - -## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ## - -## vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ## -# inlined from https://raw.githubusercontent.com/jenkinsci/docker-jnlp-slave/ed8005a724792120e6ae284701bb41f60dae244b/Dockerfile-jdk11 -# -# The MIT License -# -# Copyright (c) 2015-2017, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -#(overridden)## FROM jenkins/slave:3.35-3-jdk11 -#(overridden)## MAINTAINER Oleg Nenashev -#(overridden)## LABEL Description="This is a base image, which allows connecting Jenkins agents via JNLP protocols" Vendor="Jenkins project" Version="3.35-2" - -#(already present)## ARG user=jenkins - -USER root -COPY jenkins-agent /usr/local/bin/jenkins-agent -RUN chmod +x /usr/local/bin/jenkins-agent &&\ - ln -s /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-slave -USER ${user} - -ENTRYPOINT ["/usr/bin/tini", "--", "jenkins-slave"] diff --git a/debian-unstable/jenkins-agent b/debian-unstable/jenkins-agent deleted file mode 100644 index 9b2d31a..0000000 --- a/debian-unstable/jenkins-agent +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env sh - -# The MIT License -# -# Copyright (c) 2015-2019, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# Usage jenkins-agent.sh [options] -url http://jenkins [SECRET] [AGENT_NAME] -# Optional environment variables : -# * JENKINS_TUNNEL : HOST:PORT for a tunnel to route TCP traffic to jenkins host, when jenkins can't be directly accessed over network -# * JENKINS_URL : alternate jenkins URL -# * JENKINS_SECRET : agent secret, if not set as an argument -# * JENKINS_AGENT_NAME : agent name, if not set as an argument -# * JENKINS_AGENT_WORKDIR : agent work directory, if not set by optional parameter -workDir -# * JENKINS_DIRECT_CONNECTION: Connect directly to this TCP agent port, skipping the HTTP(S) connection parameter download. -# Value: ":" -# * JENKINS_INSTANCE_IDENTITY: The base64 encoded InstanceIdentity byte array of the Jenkins master. When this is set, -# the agent skips connecting to an HTTP(S) port for connection info. -# * JENKINS_PROTOCOLS: Specify the remoting protocols to attempt when instanceIdentity is provided. - -if [ $# -eq 1 ]; then - - # if `docker run` only has one arguments, we assume user is running alternate command like `bash` to inspect the image - exec "$@" - -else - - # if -tunnel is not provided, try env vars - case "$@" in - *"-tunnel "*) ;; - *) - if [ ! -z "$JENKINS_TUNNEL" ]; then - TUNNEL="-tunnel $JENKINS_TUNNEL" - fi ;; - esac - - # if -workDir is not provided, try env vars - if [ ! -z "$JENKINS_AGENT_WORKDIR" ]; then - case "$@" in - *"-workDir"*) echo "Warning: Work directory is defined twice in command-line arguments and the environment variable" ;; - *) - WORKDIR="-workDir $JENKINS_AGENT_WORKDIR" ;; - esac - fi - - if [ -n "$JENKINS_URL" ]; then - URL="-url $JENKINS_URL" - fi - - if [ -n "$JENKINS_NAME" ]; then - JENKINS_AGENT_NAME="$JENKINS_NAME" - fi - - if [ -z "$JNLP_PROTOCOL_OPTS" ]; then - echo "Warning: JnlpProtocol3 is disabled by default, use JNLP_PROTOCOL_OPTS to alter the behavior" - JNLP_PROTOCOL_OPTS="-Dorg.jenkinsci.remoting.engine.JnlpProtocol3.disabled=true" - fi - - if [ -n "$JENKINS_PROTOCOLS" ]; then - PROTOCOLS="-protocols $JENKINS_PROTOCOLS" - fi - - if [ -n "$JENKINS_DIRECT_CONNECTION" ]; then - DIRECT="-direct $JENKINS_DIRECT_CONNECTION" - fi - - if [ -n "$JENKINS_INSTANCE_IDENTITY" ]; then - INSTANCE_IDENTITY="-instanceIdentity $JENKINS_INSTANCE_IDENTITY" - fi - - # if java home is defined, use it - JAVA_BIN="java" - if [ "$JAVA_HOME" ]; then - JAVA_BIN="$JAVA_HOME/bin/java" - fi - - # if both required options are defined, do not pass the parameters - OPT_JENKINS_SECRET="" - if [ -n "$JENKINS_SECRET" ]; then - case "$@" in - *"${JENKINS_SECRET}"*) echo "Warning: SECRET is defined twice in command-line arguments and the environment variable" ;; - *) - OPT_JENKINS_SECRET="${JENKINS_SECRET}" ;; - esac - fi - - OPT_JENKINS_AGENT_NAME="" - if [ -n "$JENKINS_AGENT_NAME" ]; then - case "$@" in - *"${JENKINS_AGENT_NAME}"*) echo "Warning: AGENT_NAME is defined twice in command-line arguments and the environment variable" ;; - *) - OPT_JENKINS_AGENT_NAME="${JENKINS_AGENT_NAME}" ;; - esac - fi - - #TODO: Handle the case when the command-line and Environment variable contain different values. - #It is fine it blows up for now since it should lead to an error anyway. - - exec $JAVA_BIN $JAVA_OPTS $JNLP_PROTOCOL_OPTS -cp /usr/share/jenkins/agent.jar hudson.remoting.jnlp.Main -headless $TUNNEL $URL $WORKDIR $DIRECT $PROTOCOLS $INSTANCE_IDENTITY $OPT_JENKINS_SECRET $OPT_JENKINS_AGENT_NAME "$@" -fi