Skip to content

Commit f2c00fd

Browse files
committed
Add bootstrap wrapper script for Docker
This allows users to pass "cli" or "run" as Docker CMD to easily switch modes without having to set environment variables. Also provides the DEBUG environment variable that used to be provided by the launcher script (which is no longer used as of this). Also removes the FORCE_JENKINS_CLI environment variables as it's no longer necessary. as per #207 (comment)
1 parent 6aeca51 commit f2c00fd

File tree

5 files changed

+93
-32
lines changed

5 files changed

+93
-32
lines changed

DOCKER.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,11 @@ Optionally, if you need special Jenkins configuration, you can mount JCasC YAML
5959
for available options and the [JCasC demo](demo/casc/README.md) for an example.
6060

6161
To get an interactive Jenkins CLI shell in the container, pass
62-
`-i -e FORCE_JENKINS_CLI=true` to `docker run` as extra parameters.
62+
`-i` to `docker run` and append `cli` after the image name like this:
63+
64+
```bash
65+
docker run -i --rm jenkinsfile-runner:my-production-jenkins cli
66+
```
6367

6468
## Debug
6569
In case you want to debug Jenkinsfile Runner, you need to use the "Vanilla" Docker image built following the steps mentioned in the section above.

Dockerfile

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Define maven version for other stages
22
FROM maven:3.5.4 as maven
33

4+
ARG JENKINS_REF=/usr/share/jenkins/ref
5+
ARG JENKINS_HOME=/app/jenkins
6+
47
FROM maven as jenkinsfilerunner-mvncache
58
ADD pom.xml /src/pom.xml
69
ADD app/pom.xml /src/app/pom.xml
@@ -20,25 +23,25 @@ ENV MAVEN_OPTS=-Dmaven.repo.local=/mavenrepo
2023
COPY --from=jenkinsfilerunner-mvncache /mavenrepo /mavenrepo
2124
ADD . /jenkinsfile-runner
2225
RUN cd /jenkinsfile-runner && mvn package
23-
RUN mkdir /app && unzip /jenkinsfile-runner/vanilla-package/target/war/jenkins.war -d /app/jenkins && \
24-
rm -rf /app/jenkins/scripts /app/jenkins/jsbundles /app/jenkins/css /app/jenkins/images /app/jenkins/help /app/jenkins/WEB-INF/detached-plugins /app/jenkins/winstone.jar /app/jenkins/WEB-INF/jenkins-cli.jar /app/jenkins/WEB-INF/lib/jna-4.5.2.jar
26+
RUN mkdir /app && \
27+
unzip /jenkinsfile-runner/vanilla-package/target/war/jenkins.war -d ${JENKINS_HOME} && \
28+
rm -rf ${JENKINS_HOME}/scripts ${JENKINS_HOME}/jsbundles ${JENKINS_HOME}/css ${JENKINS_HOME}/images ${JENKINS_HOME}/help ${JENKINS_HOME}/WEB-INF/detached-plugins ${JENKINS_HOME}/winstone.jar ${JENKINS_HOME}/WEB-INF/jenkins-cli.jar ${JENKINS_HOME}/WEB-INF/lib/jna-4.5.2.jar
2529

2630
FROM openjdk:8-jdk
27-
ENV JENKINS_UC https://updates.jenkins.io
28-
ENV CASC_JENKINS_CONFIG /usr/share/jenkins/ref/casc
31+
32+
ENV JENKINS_REF ${JENKINS_REF}
33+
ENV JENKINS_HOME ${JENKINS_HOME}
34+
2935
USER root
30-
RUN mkdir -p /app /usr/share/jenkins/ref/plugins /usr/share/jenkins/ref/casc
31-
RUN echo "jenkins: {}" >/usr/share/jenkins/ref/casc/jenkins.yaml
32-
COPY --from=jenkinsfilerunner-build /app/jenkins /app/jenkins
36+
RUN mkdir -p /app ${JENKINS_REF}/plugins ${JENKINS_REF}/casc
37+
COPY jfr-docker.sh /usr/local/bin
38+
COPY --from=jenkinsfilerunner-build ${JENKINS_HOME} ${JENKINS_HOME}
3339
COPY --from=jenkinsfilerunner-build /jenkinsfile-runner/app/target/appassembler /app
34-
COPY --from=jenkinsfilerunner-build /jenkinsfile-runner/vanilla-package/target/plugins /usr/share/jenkins/ref/plugins
35-
COPY jenkinsfile-runner-launcher /app/bin
40+
COPY --from=jenkinsfilerunner-build /jenkinsfile-runner/vanilla-package/target/plugins ${JENKINS_REF}/plugins
3641

3742
VOLUME /build
38-
VOLUME /usr/share/jenkins/ref/casc
43+
VOLUME ${JENKINS_REF}/casc
44+
45+
ENTRYPOINT ["/usr/local/bin/jfr-docker.sh"]
3946

40-
ENTRYPOINT ["/app/bin/jenkinsfile-runner-launcher", \
41-
"-w", "/app/jenkins",\
42-
"-p", "/usr/share/jenkins/ref/plugins",\
43-
"-f", "/workspace", \
44-
"--runWorkspace", "/build"]
47+
CMD ["run"]

Dockerfile-dev

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@
22
# To avoid downloading everything from the internet and using developer's cache
33

44
FROM openjdk:8-jdk
5-
ENV JENKINS_UC https://updates.jenkins.io
6-
ENV CASC_JENKINS_CONFIG /usr/share/jenkins/ref/casc
5+
6+
ARG JENKINS_REF=/usr/share/jenkins/ref
7+
ARG JENKINS_HOME=/app/jenkins
8+
9+
ENV JENKINS_REF ${JENKINS_REF}
10+
ENV JENKINS_HOME ${JENKINS_HOME}
11+
712
USER root
8-
RUN mkdir -p /app /usr/share/jenkins/ref/plugins /usr/share/jenkins/ref/casc
9-
RUN echo "jenkins: {}" >/usr/share/jenkins/ref/casc/jenkins.yaml
13+
RUN mkdir -p /app ${JENKINS_REF}/plugins ${JENKINS_REF}/casc
1014

15+
COPY jfr-docker.sh /usr/local/bin
1116
COPY app/target/appassembler /app
1217
COPY vanilla-package/target/war/jenkins.war /usr/share/jenkins/jenkins.war
13-
RUN unzip /usr/share/jenkins/jenkins.war -d /app/jenkins && \
14-
rm -rf /app/jenkins/scripts /app/jenkins/jsbundles /app/jenkins/css /app/jenkins/images /app/jenkins/help /app/jenkins/WEB-INF/detached-plugins /app/jenkins/winstone.jar /app/jenkins/WEB-INF/jenkins-cli.jar /app/jenkins/WEB-INF/lib/jna-4.5.2.jar
15-
COPY vanilla-package/target/plugins /usr/share/jenkins/ref/plugins
18+
RUN unzip /usr/share/jenkins/jenkins.war -d ${JENKINS_HOME} && \
19+
rm -rf ${JENKINS_HOME}/scripts ${JENKINS_HOME}/jsbundles ${JENKINS_HOME}/css ${JENKINS_HOME}/images ${JENKINS_HOME}/help ${JENKINS_HOME}/WEB-INF/detached-plugins ${JENKINS_HOME}/winstone.jar ${JENKINS_HOME}/WEB-INF/jenkins-cli.jar ${JENKINS_HOME}/WEB-INF/lib/jna-4.5.2.jar
20+
COPY vanilla-package/target/plugins ${JENKINS_REF}/plugins
21+
22+
VOLUME ${JENKINS_REF}/casc
1623

17-
VOLUME /usr/share/jenkins/ref/casc
24+
ENTRYPOINT ["/usr/local/bin/jfr-docker.sh"]
1825

19-
ENTRYPOINT ["/app/bin/jenkinsfile-runner", \
20-
"-w", "/app/jenkins",\
21-
"-p", "/usr/share/jenkins/ref/plugins",\
22-
"-f", "/workspace"]
26+
CMD ["run"]

bootstrap/src/main/java/io/jenkins/jenkinsfile/runner/bootstrap/Bootstrap.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,6 @@ private void postConstruct(CmdLineParser parser) throws IOException {
143143
System.exit(0);
144144
}
145145

146-
if (System.getenv("FORCE_JENKINS_CLI") != null) {
147-
this.cliOnly = true;
148-
}
149-
150146
if (this.version != null && !isVersionSupported()) {
151147
System.err.printf("Jenkins version [%s] not suported by this jenkinsfile-runner version (requires %s). \n",
152148
this.version,

jfr-docker.sh

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env bash
2+
3+
if [[ -z "${JENKINS_HOME}" ]] || [[ -z "${JENKINS_REF}" ]]; then
4+
echo "$0: Environment variables JENKINS_HOME and JENKINS_REF need to be set!" >&2
5+
exit 1
6+
elif [[ ! -d "${JENKINS_HOME}" ]]; then
7+
echo "$0: JENKINS_HOME at ${JENKINS_HOME} does not exist." >&2
8+
exit 1
9+
elif [[ ! -d "${JENKINS_REF}" ]]; then
10+
echo "$0: JENKINS_REF at ${JENKINS_REF} does not exist." >&2
11+
exit 1
12+
fi
13+
14+
export JENKINS_WORKSPACE="${JENKINS_WORKSPACE:-/workspace}"
15+
export JENKINS_BUILD_DIR="${JENKINS_BUILD_DIR:-/build}"
16+
export CASC_JENKINS_CONFIG="${CASC_JENKINS_CONFIG:-${JENKINS_REF}/casc}"
17+
export JENKINS_PLUGIN_DIR="${JENKINS_PLUGIN_DIR:-${JENKINS_REF}/plugins}"
18+
19+
export JENKINS_UC="${JENKINS_UC:-https://updates.jenkins.io}"
20+
21+
LAUNCHER_PARAMS=("-w" "${JENKINS_HOME}" "-p" "${JENKINS_REF}/plugins")
22+
23+
if [[ -n "${DEBUG}" ]]; then
24+
export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 ${JAVA_OPTS:-}"
25+
echo "$0: Make sure to expose the port by providing -p 5005:5005 to docker run"
26+
fi
27+
28+
if [[ "$#" -gt 0 ]]; then
29+
case "$1" in
30+
run)
31+
LAUNCHER_PARAMS+=("-f" "${JENKINS_WORKSPACE}" "--runWorkspace" "${JENKINS_BUILD_DIR}")
32+
;;
33+
cli)
34+
LAUNCHER_PARAMS+=("--cli")
35+
;;
36+
*)
37+
echo "$0: Unknown action $1. Try $0 [run|cli]"
38+
echo " run: Launch a Jenkinsfile build."
39+
echo " cli: Attach an interactive Jenkins shell."
40+
exit 1
41+
;;
42+
esac
43+
44+
if [[ "$#" -gt 1 ]]; then
45+
LAUNCHER_PARAMS+=("${@:1}")
46+
fi
47+
fi
48+
49+
if [[ -x "/app/bin/jenkinsfile-runner" ]]; then
50+
/app/bin/jenkinsfile-runner "${LAUNCHER_PARAMS[@]}"
51+
else
52+
echo "$0: /app/bin/jenkinsfile-runner needs to be an executable file." >&2
53+
exit 1
54+
fi

0 commit comments

Comments
 (0)