Merge pull request #21 from jglick/demo

Updated structure of demo
This commit is contained in:
Sam Van Oort 2017-09-18 14:07:14 -04:00 committed by GitHub
commit 68716f2d76
9 changed files with 332 additions and 120 deletions

1
demo/.gitignore vendored
View File

@ -1 +1,2 @@
plugins
target

View File

@ -1,4 +1,4 @@
FROM jenkins:2.60.2
FROM jenkinsci/jenkins:2.73
USER root
@ -22,23 +22,10 @@ RUN apt-get update && \
WORKDIR /tmp/files
# Prepare local Maven repo. Note that $JENKINS_HOME is a volume so we cannot populate it now.
RUN mkdir repo
ADD repo/pom.xml repo/pom.xml
ADD repo/src repo/src
ADD repo/sometests repo/sometests
RUN chown -R jenkins.jenkins .
USER jenkins
RUN echo '<settings><mirrors><mirror><id>central</id><url>http://repo.jenkins-ci.org/simple/repo1-cache/</url><mirrorOf>central</mirrorOf></mirror></mirrors><localRepository>/usr/share/jenkins/ref/.m2/repository</localRepository></settings>' > settings.xml && \
/usr/local/maven/bin/mvn -s settings.xml -f repo install && /usr/local/maven/bin/mvn -s settings.xml -f repo/sometests -Dmaven.test.failure.ignore clean install
USER root
COPY plugins /usr/share/jenkins/ref/plugins
RUN chown -R jenkins.jenkins /usr/share/jenkins/ref/plugins
USER jenkins
# Now copy the complete repo including Pipeline script (not only the files needed to warm up the Maven cache).
RUN rm -rf repo
ADD repo repo
ADD repo-branches repo-branches
ADD lib lib

View File

@ -0,0 +1,30 @@
<?xml version='1.0' encoding='UTF-8'?>
<org.jenkinsci.plugins.configfiles.maven.DefaultMavenSettingsProvider>
<configs>
<entry>
<string>jenkins-mirror</string>
<org.jenkinsci.plugins.configfiles.maven.MavenSettingsConfig>
<id>jenkins-mirror</id>
<name>Jenkins Mirror</name>
<comment></comment>
<content><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>central</id>
<url>http://repo.jenkins-ci.org/simple/repo1-cache/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<localRepository>/m2repo</localRepository>
</settings>
]]></content>
<providerId>org.jenkinsci.plugins.configfiles.maven.MavenSettingsConfig</providerId>
<serverCredentialMappings/>
<isReplaceAll>true</isReplaceAll>
</org.jenkinsci.plugins.configfiles.maven.MavenSettingsConfig>
</entry>
</configs>
</org.jenkinsci.plugins.configfiles.maven.DefaultMavenSettingsProvider>

View File

@ -1,24 +1,22 @@
TAG=$(shell date -I -u)
IMAGE=jenkinsci/workflow-demo
DOCKER_RUN=docker run --rm -p 127.0.0.1:2222:2222 -p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 -p 127.0.0.1:9418:9418 -ti
DOCKER_RUN=docker run --rm -p 127.0.0.1:2222:2222 -p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 -p 127.0.0.1:9418:9418 -ti -v m2repo:/m2repo
copy-plugins:
set -e; \
rm -rf plugins; \
mkdir plugins; \
for gav in `cat plugins.txt`; do \
g=`echo $$gav | cut -f1 -d: | perl -pe 's{[.]}{/}g'`; \
a=`echo $$gav | cut -f2 -d:`; \
v=`echo $$gav | cut -f3 -d:`; \
hpi=$$HOME/.m2/repository/$$g/$$a/$$v/$$a-$$v.hpi; \
if [ \! -f $$hpi ]; then \
mvn -U org.apache.maven.plugins:maven-dependency-plugin:2.5.1:get -Dartifact=$$gav:hpi -Dtransitive=false ||\
(locate $$a-$$v.hpi | fgrep .m2/repository/; false); \
fi; \
cp -v $$hpi plugins/$$a.jpi; \
done
if [ \! -f target/test-classes/test-dependencies/index -o \
pom.xml -nt target/test-classes/test-dependencies/index ]; then \
mvn clean validate hpi:resolve-test-dependencies; fi
# TODO would be more efficient to move Dockerfile and all it references into a subdirectory, since docker-build lacks an --excludes
rm -rf plugins
mkdir plugins
cp -v target/test-classes/test-dependencies/*.hpi plugins
build: copy-plugins
# http://stackoverflow.com/q/23544282/12916 unclear how best to ensure that the jenkins user can write to this volume
volume:
docker volume create --name=m2repo
sudo chmod a+rw $$(docker volume inspect -f '{{.Mountpoint}}' m2repo)
build: copy-plugins volume
docker build -t $(IMAGE):$(TAG) .
run: build

View File

@ -6,7 +6,9 @@ It highlights key parts of the Pipeline plugin:
Run it like:
docker run --rm -p 2222:2222 -p 8080:8080 -p 8081:8081 -p 9418:9418 -ti jenkinsci/workflow-demo
docker volume create --name=m2repo
sudo chmod a+rw $$(docker volume inspect -f '{{.Mountpoint}}' m2repo)
docker run --rm -p 127.0.0.1:2222:2222 -p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 -p 127.0.0.1:9418:9418 -ti -v m2repo:/m2repo jenkinsci/workflow-demo
Jenkins runs on port 8080, and Jetty runs on port 8081. The Jenkins CLI is accessible via SSH on port 2222.

View File

@ -1,5 +1,7 @@
def call(args) {
ansiColor('xterm') {
sh "${tool 'Maven 3.x'}/bin/mvn ${args}"
configFileProvider([configFile(fileId: 'jenkins-mirror', variable: 'SETTINGS')]) {
ansiColor('xterm') {
sh "${tool 'Maven 3.x'}/bin/mvn -s \$SETTINGS ${args}"
}
}
}

View File

@ -1,84 +0,0 @@
org.jenkins-ci.ui:ace-editor:1.1
org.jenkins-ci.plugins:ansicolor:0.5.1
org.jenkins-ci.plugins:authentication-tokens:1.3
io.jenkins.blueocean:blueocean:1.2.0-beta-5
org.jenkins-ci.plugins:blueocean-autofavorite:1.0.0
io.jenkins.blueocean:blueocean-bitbucket-pipeline:1.2.0-beta-5
io.jenkins.blueocean:blueocean-commons:1.2.0-beta-5
io.jenkins.blueocean:blueocean-config:1.2.0-beta-5
io.jenkins.blueocean:blueocean-dashboard:1.2.0-beta-5
org.jenkins-ci.plugins:blueocean-display-url:2.1.0
io.jenkins.blueocean:blueocean-events:1.2.0-beta-5
io.jenkins.blueocean:blueocean-git-pipeline:1.2.0-beta-5
io.jenkins.blueocean:blueocean-github-pipeline:1.2.0-beta-5
io.jenkins.blueocean:blueocean-i18n:1.2.0-beta-5
io.jenkins.blueocean:blueocean-jwt:1.2.0-beta-5
io.jenkins.blueocean:blueocean-personalization:1.2.0-beta-5
io.jenkins.blueocean:blueocean-pipeline-api-impl:1.2.0-beta-5
io.jenkins.blueocean:blueocean-pipeline-editor:0.2.0
io.jenkins.blueocean:blueocean-pipeline-scm-api:1.2.0-beta-5
io.jenkins.blueocean:blueocean-rest:1.2.0-beta-5
io.jenkins.blueocean:blueocean-rest-impl:1.2.0-beta-5
io.jenkins.blueocean:blueocean-web:1.2.0-beta-5
org.jenkins-ci.plugins:branch-api:2.0.11
org.jenkins-ci.plugins:bouncycastle-api:2.16.2
org.jenkins-ci.plugins:cloudbees-bitbucket-branch-source:2.2.3
org.jenkins-ci.plugins:cloudbees-folder:6.1.2
org.jenkins-ci.plugins:credentials:2.1.14
org.jenkins-ci.plugins:credentials-binding:1.13
org.jenkins-ci.plugins:display-url-api:2.0
org.jenkins-ci.plugins:docker-commons:1.8
org.jenkins-ci.plugins:docker-workflow:1.12
org.jenkins-ci.plugins:durable-task:1.14
org.jvnet.hudson.plugins:favorite:2.3.0
org.jenkins-ci.plugins:git:3.5.1
org.jenkins-ci.plugins:git-client:2.5.0
org.jenkins-ci.plugins:git-server:1.7
com.coravy.hudson.plugins.github:github:1.28.0
org.jenkins-ci.plugins:github-api:1.86
org.jenkins-ci.plugins:github-branch-source:2.2.3
org.jenkins-ci.ui:handlebars:1.1.1
org.jenkins-ci.plugins:htmlpublisher:1.14
org.jenkins-ci.plugins.icon-shim:icon-shim:2.0.3
org.jenkins-ci.plugins:jackson2-api:2.7.3
org.jenkins-ci.plugins:jira:2.4.2
org.jenkins-ci.ui:jquery-detached:1.2.1
org.jenkins-ci.plugins:junit:1.21
org.6wind.jenkins:lockable-resources:2.0
org.jenkins-ci.plugins:mailer:1.20
org.jenkins-ci.plugins:matrix-project:1.11
org.jenkins-ci.plugins:mercurial:2.0
org.jenkins-ci.plugins:metrics:3.1.2.10
org.jenkins-ci.plugins:mock-slave:1.10
org.jenkins-ci.ui:momentjs:1.1.1
org.jenkins-ci.plugins:pipeline-build-step:2.5.1
org.jenkins-ci.plugins:pipeline-graph-analysis:1.5
org.jenkins-ci.plugins:pipeline-input-step:2.8
org.jenkins-ci.plugins:pipeline-milestone-step:1.3.1
org.jenkinsci.plugins:pipeline-model-api:1.1.9
org.jenkinsci.plugins:pipeline-model-declarative-agent:1.1.1
org.jenkinsci.plugins:pipeline-model-definition:1.1.9
org.jenkinsci.plugins:pipeline-model-extensions:1.1.9
org.jenkins-ci.plugins.pipeline-stage-view:pipeline-rest-api:2.8
org.jenkins-ci.plugins:pipeline-stage-step:2.2
org.jenkinsci.plugins:pipeline-stage-tags-metadata:1.1.9
org.jenkins-ci.plugins.pipeline-stage-view:pipeline-stage-view:2.8
org.jenkins-ci.plugins:plain-credentials:1.4
org.jenkins-ci.plugins:pubsub-light:1.12
org.jenkins-ci.plugins:scm-api:2.2.0
org.jenkins-ci.plugins:script-security:1.31
org.jenkins-ci.plugins:sse-gateway:1.15
org.jenkins-ci.plugins:ssh-credentials:1.13
org.jenkins-ci.plugins:structs:1.10
org.jenkins-ci.plugins:token-macro:2.1
org.jenkins-ci.plugins:variant:1.1
org.jenkins-ci.plugins.workflow:workflow-api:2.20
org.jenkins-ci.plugins.workflow:workflow-basic-steps:2.6
org.jenkins-ci.plugins.workflow:workflow-cps:2.39
org.jenkins-ci.plugins.workflow:workflow-cps-global-lib:2.8
org.jenkins-ci.plugins.workflow:workflow-durable-task-step:2.13
org.jenkins-ci.plugins.workflow:workflow-job:2.12.2
org.jenkins-ci.plugins.workflow:workflow-multibranch:2.16
org.jenkins-ci.plugins.workflow:workflow-scm-step:2.6
org.jenkins-ci.plugins.workflow:workflow-step-api:2.12
org.jenkins-ci.plugins.workflow:workflow-support:2.14

276
demo/pom.xml Normal file
View File

@ -0,0 +1,276 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plugin</artifactId>
<version>2.33</version>
<relativePath />
</parent>
<artifactId>workflow-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>hpi</packaging>
<properties>
<jenkins.version>2.73</jenkins.version>
</properties>
<name>Userspace SCM Demo</name>
<repositories>
<repository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>https://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- cf. https://stackoverflow.com/q/45761521/12916 -->
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-job</artifactId>
<version>2.14.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-cps</artifactId>
<version>2.39</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-cps-global-lib</artifactId>
<version>2.8</version>
<scope>test</scope>
<exclusions>
<exclusion> <!-- TODO https://github.com/jenkinsci/git-client-plugin/pull/264 -->
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-multibranch</artifactId>
<version>2.16</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-basic-steps</artifactId>
<version>2.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-durable-task-step</artifactId>
<version>2.15</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-scm-step</artifactId>
<version>2.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>config-file-provider</artifactId>
<version>2.16.3</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>git</artifactId>
<version>3.5.1</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.jenkins-ci</groupId>
<artifactId>annotation-indexer</artifactId>
</exclusion>
<exclusion>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>junit</artifactId>
<version>1.21</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>pipeline-stage-step</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>pipeline-input-step</artifactId>
<version>2.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jenkins.blueocean</groupId>
<artifactId>blueocean</artifactId>
<version>1.2.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>ansicolor</artifactId>
<version>0.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>mock-slave</artifactId>
<version>1.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>pipeline-milestone-step</artifactId>
<version>1.3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.pipeline-stage-view</groupId>
<artifactId>pipeline-stage-view</artifactId>
<version>2.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.6wind.jenkins</groupId>
<artifactId>lockable-resources</artifactId>
<version>2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-aggregator</artifactId>
<version>2.5</version>
<scope>test</scope>
</dependency>
<!-- upper bound deps: -->
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-api</artifactId>
<version>2.20</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-step-api</artifactId>
<version>2.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>structs</artifactId>
<version>1.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>cloudbees-folder</artifactId>
<version>6.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>credentials</artifactId>
<version>2.1.14</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>scm-api</artifactId>
<version>2.2.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>script-security</artifactId>
<version>1.33</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>mailer</artifactId>
<version>1.20</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>branch-api</artifactId>
<version>2.0.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>plain-credentials</artifactId>
<version>1.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>display-url-api</artifactId>
<version>2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>git-client</artifactId>
<version>2.5.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>ssh-credentials</artifactId>
<version>1.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkinsci.plugins</groupId>
<artifactId>pipeline-model-definition</artifactId>
<version>1.1.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.ui</groupId>
<artifactId>handlebars</artifactId>
<version>1.1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -6,13 +6,13 @@ servers = new Servers(this)
stage('Dev') {
node {
checkout scm
mvn '-o clean package'
mvn 'clean package'
dir('target') {stash name: 'war', includes: 'x.war'}
}
}
stage('QA') {
parallel([20, 30].collectEntries {duration -> ["tests-$duration", {runTests(duration)}]})
parallel([20, 30].collectEntries {["tests-$it", {runTests(it)}]})
echo "Test results: ${testResult(currentBuild)}"
}
@ -48,7 +48,7 @@ def runTests(duration) {
node {
checkout scm
servers.withDeployment {id ->
mvn "-o -f sometests test -Durl=${jettyUrl}${id}/ -Dduration=${duration}"
mvn "-f sometests test -Durl=${jettyUrl}${id}/ -Dduration=${duration}"
}
junit '**/target/surefire-reports/TEST-*.xml'
}