From d163528705c59f3878769f5591e965533568b392 Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Tue, 7 Jun 2016 01:47:07 +0200 Subject: [PATCH] docker image so one can test blue ocean (#214) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docker image so one can test blue ocean Signed-off-by: Nicolas De Loof * use install-plugins script Signed-off-by: Nicolas De Loof * Make demo more directly usable * Disable the upgrade wizard * Add Welcome message + link to the /blue URL * use « latest » Signed-off-by: Nicolas De Loof * make it more visible to user the credentials we have set for the demo Signed-off-by: Nicolas De Loof * distinguish blueocean vs blueocean-demo Signed-off-by: Nicolas De Loof * flag blueocean plugins for override Signed-off-by: Nicolas De Loof --- .dockerignore | 7 ++++++ Dockerfile | 32 ++++++++++++++++++++++++ docker-demo/Dockerfile | 9 +++++++ docker-demo/README | 4 +++ docker-demo/blueocean-demo.png | Bin 0 -> 38539 bytes docker-demo/enable_security.groovy | 33 +++++++++++++++++++++++++ docker-demo/set_welcome_message.groovy | 8 ++++++ 7 files changed, 93 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-demo/Dockerfile create mode 100644 docker-demo/README create mode 100644 docker-demo/blueocean-demo.png create mode 100644 docker-demo/enable_security.groovy create mode 100644 docker-demo/set_welcome_message.groovy diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..f367822f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +* +!blueocean-commons/target/blueocean-commons.hpi +!blueocean-dashboard/target/blueocean-dashboard.hpi +!blueocean-plugin/target/blueocean-plugin.hpi +!blueocean-rest/target/blueocean-rest.hpi +!blueocean-web/target/blueocean-web.hpi +!docker-demo/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..511d29d1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM jenkinsci/jenkins:latest + +COPY blueocean-commons/target/blueocean-commons.hpi /usr/share/jenkins/ref/plugins/ +COPY blueocean-dashboard/target/blueocean-dashboard.hpi /usr/share/jenkins/ref/plugins/ +COPY blueocean-plugin/target/blueocean-plugin.hpi /usr/share/jenkins/ref/plugins/ +COPY blueocean-rest/target/blueocean-rest.hpi /usr/share/jenkins/ref/plugins/ +COPY blueocean-web/target/blueocean-web.hpi /usr/share/jenkins/ref/plugins/ + +USER root + +RUN cd /usr/share/jenkins/ref/plugins/; \ + install-plugins.sh blueocean-commons \ + blueocean-dashboard \ + blueocean-plugin \ + blueocean-rest \ + blueocean-web \ + workflow-aggregator \ + docker-workflow \ + pipeline-utility-steps \ + pipeline-stage-view \ + git \ + antisamy-markup-formatter \ + matrix-auth # for security, you know + +# Force use of latest blueocean plugin, until this one is published and users can rely on update center for updates +RUN for f in /usr/share/jenkins/ref/plugins/blueocean-*.hpi; do mv "$f" "$f.override"; done + +# See JENKINS-34035 - disable upgrade wizard +RUN echo -n 2.0 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state && \ + echo -n 2.0 > /usr/share/jenkins/ref/jenkins.install.InstallUtil.lastExecVersion + +USER jenkins diff --git a/docker-demo/Dockerfile b/docker-demo/Dockerfile new file mode 100644 index 00000000..e8a6d275 --- /dev/null +++ b/docker-demo/Dockerfile @@ -0,0 +1,9 @@ +FROM jenkinsci/blueocean + +# Security must be enabled to enable HTML rendering of the system message. +# Sacrifice to the Demo Gods. +ENV ADMIN_USERNAME admin +ENV ADMIN_PASSWORD admin + +COPY blueocean-demo.png /usr/share/jenkins/ref/userContent/blueocean-demo.png +COPY *.groovy /usr/share/jenkins/ref/init.groovy.d/ diff --git a/docker-demo/README b/docker-demo/README new file mode 100644 index 00000000..c8bbb241 --- /dev/null +++ b/docker-demo/README @@ -0,0 +1,4 @@ +This directory contains material for building the demo Docker image + +Only the Dockerfile is not here, so that building the image is easier from the repository root. + diff --git a/docker-demo/blueocean-demo.png b/docker-demo/blueocean-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..751f20254e6e5869a7a5e3f75619f1d3a10acb2c GIT binary patch literal 38539 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 W4R$Jfe3Ah$?54h%UbT)>^#1@uzfF7q literal 0 HcmV?d00001 diff --git a/docker-demo/enable_security.groovy b/docker-demo/enable_security.groovy new file mode 100644 index 00000000..3a4ca4b9 --- /dev/null +++ b/docker-demo/enable_security.groovy @@ -0,0 +1,33 @@ +// Thanks https://gist.github.com/hayderimran7/50cb1244cc1e856873a4 +import jenkins.model.* +import hudson.security.* + +def instance = Jenkins.getInstance() + +def adminUserName = System.getenv("ADMIN_USERNAME") +def adminPassword = System.getenv("ADMIN_PASSWORD") + +assert adminUserName != null : "No ADMIN_USERNAME env var provided, but required" +assert adminPassword != null : "No ADMIN_PASSWORD env var provided, but required" + +def hudsonRealm = new HudsonPrivateSecurityRealm(false) +// FIXME : just during debugging/initial dev, remove the password part of that log +println "Creating the '$adminUserName' admin user with provided password (using env var 'ADMIN_PASSWORD')" + +if(adminPassword.equals(System.getenv("DEFAULT_ADMIN_PASSWORD"))) { + println("WARNING: You didn't change the default image password, there may be a security risk") + println("WARNING: Pass the value using 'docker run -e ADMIN_PASSWORD=theOneYouWant ...'") +} +hudsonRealm.createAccount("admin", System.getenv("ADMIN_PASSWORD")) +instance.setSecurityRealm(hudsonRealm) + +// enable html rendering of description (from antisamy-markup-formatter) +instance.setMarkupFormatter(new hudson.markup.RawHtmlMarkupFormatter(false)) + +def strategy = new GlobalMatrixAuthorizationStrategy() +strategy.add(Jenkins.ADMINISTER, "admin") + +strategy.add(Jenkins.READ, "anonymous") +instance.setAuthorizationStrategy(strategy) + +instance.save() diff --git a/docker-demo/set_welcome_message.groovy b/docker-demo/set_welcome_message.groovy new file mode 100644 index 00000000..b7ec7a41 --- /dev/null +++ b/docker-demo/set_welcome_message.groovy @@ -0,0 +1,8 @@ +jenkins.model.Jenkins.instance.setSystemMessage( +""" +

Welcome to Jenkins Blue Ocean Demo. Click on the image below:

+

+ +

log in with admin/admin

+""" +)