42f0a0db |
#!groovy |
4d7721cd |
pipeline { |
a95f16ca |
agent none |
0ecd6ab3 |
|
a95f16ca |
options {
buildDiscarder(logRotator(daysToKeepStr: '30')) |
bf70a597 |
timeout(time: 2, unit: 'HOURS') |
a95f16ca |
timestamps()
}
parameters { |
c18f793f |
booleanParam(name: 'unit_validate', defaultValue: true, description: 'amd64 (x86_64) unit tests and vendor check') |
cd094422 |
booleanParam(name: 'validate_force', defaultValue: false, description: 'force validation steps to be run, even if no changes were detected') |
c18f793f |
booleanParam(name: 'amd64', defaultValue: true, description: 'amd64 (x86_64) Build/Test') |
5bf33adb |
booleanParam(name: 'rootless', defaultValue: true, description: 'amd64 (x86_64) Build/Test (Rootless mode)') |
9d5361de |
booleanParam(name: 'arm64', defaultValue: true, description: 'ARM (arm64) Build/Test') |
c18f793f |
booleanParam(name: 's390x', defaultValue: true, description: 'IBM Z (s390x) Build/Test')
booleanParam(name: 'ppc64le', defaultValue: true, description: 'PowerPC (ppc64le) Build/Test') |
039eb05a |
booleanParam(name: 'windowsRS1', defaultValue: false, description: 'Windows 2016 (RS1) Build/Test') |
ca3e230b |
booleanParam(name: 'windowsRS5', defaultValue: true, description: 'Windows 2019 (RS5) Build/Test') |
d6a91ca7 |
booleanParam(name: 'dco', defaultValue: true, description: 'Run the DCO check') |
a95f16ca |
} |
a28f2a23 |
environment { |
a2ad56df |
DOCKER_BUILDKIT = '1' |
e856b46c |
DOCKER_EXPERIMENTAL = '1' |
781e79d1 |
DOCKER_GRAPHDRIVER = 'overlay2' |
a2ad56df |
APT_MIRROR = 'cdn-fastly.deb.debian.org'
CHECK_CONFIG_COMMIT = '78405559cfe5987174aa2cb6463b9b2c1b917255' |
d723643d |
TESTDEBUG = '0' |
bf70a597 |
TIMEOUT = '120m' |
a28f2a23 |
} |
a95f16ca |
stages { |
85bcc524 |
stage('pr-hack') {
when { changeRequest() }
steps {
script {
echo "Workaround for PR auto-cancel feature. Borrowed from https://issues.jenkins-ci.org/browse/JENKINS-43353"
def buildNumber = env.BUILD_NUMBER as int
if (buildNumber > 1) milestone(buildNumber - 1)
milestone(buildNumber)
}
}
} |
d6f7909c |
stage('DCO-check') {
when {
beforeAgent true |
d6a91ca7 |
expression { params.dco } |
d6f7909c |
} |
85bcc524 |
agent { label 'amd64 && ubuntu-1804 && overlay2' } |
d6f7909c |
steps {
sh '''
docker run --rm \
-v "$WORKSPACE:/workspace" \ |
7c5fd83c |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \
alpine sh -c 'apk add --no-cache -q bash git openssh-client && cd /workspace && hack/validate/dco' |
d6f7909c |
'''
}
} |
a95f16ca |
stage('Build') {
parallel { |
f51c1397 |
stage('unit-validate') { |
a95f16ca |
when {
beforeAgent true |
f51c1397 |
expression { params.unit_validate } |
a95f16ca |
}
agent { label 'amd64 && ubuntu-1804 && overlay2' } |
cd094422 |
environment {
// On master ("non-pull-request"), force running some validation checks (vendor, swagger),
// even if no files were changed. This allows catching problems caused by pull-requests
// that were merged out-of-sequence.
TEST_FORCE_VALIDATE = sh returnStdout: true, script: 'if [ "${BRANCH_NAME%%-*}" != "PR" ] || [ "${CHANGE_TARGET:-master}" != "master" ] || [ "${validate_force}" = "true" ]; then echo "1"; fi'
} |
4d7721cd |
|
79713d8d |
stages { |
38977965 |
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info' |
a2ad56df |
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
''' |
38977965 |
}
} |
79713d8d |
stage("Build dev image") {
steps { |
6523ced9 |
sh 'docker build --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} .' |
79713d8d |
}
} |
f411be20 |
stage("Validate") {
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
-v "$WORKSPACE/.git:/go/src/github.com/docker/docker/.git" \
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
f411be20 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
cd094422 |
-e TEST_FORCE_VALIDATE \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
f411be20 |
docker:${GIT_COMMIT} \
hack/validate/default
'''
}
} |
ad28fec1 |
stage("Docker-py") {
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
ad28fec1 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
ad28fec1 |
docker:${GIT_COMMIT} \
hack/make.sh \ |
4ddb40ee |
dynbinary-daemon \ |
ad28fec1 |
test-docker-py
'''
} |
5969bbee |
post {
always {
junit testResults: 'bundles/test-docker-py/junit-report.xml', allowEmptyResults: true |
8b6da9d8 |
sh '''
echo "Ensuring container killed."
docker rm -vf docker-pr$BUILD_NUMBER || true
'''
sh '''
echo 'Chowning /workspace to jenkins user'
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace
'''
|
a76ff632 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh '''
bundleName=docker-py
echo "Creating ${bundleName}-bundles.tar.gz"
tar -czf ${bundleName}-bundles.tar.gz bundles/test-docker-py/*.xml bundles/test-docker-py/*.log
'''
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
5969bbee |
}
} |
ad28fec1 |
} |
e554fb23 |
stage("Static") { |
251c8dca |
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \
docker:${GIT_COMMIT} \
hack/make.sh binary-daemon
'''
}
}
stage("Cross") {
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \
docker:${GIT_COMMIT} \
hack/make.sh cross
'''
}
}
// needs to be last stage that calls make.sh for the junit report to work |
f51c1397 |
stage("Unit tests") { |
79713d8d |
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
be0e6e9d |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \ |
781e79d1 |
-e DOCKER_GRAPHDRIVER \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
be0e6e9d |
docker:${GIT_COMMIT} \ |
79713d8d |
hack/test/unit
'''
} |
7f9328ad |
post {
always {
junit testResults: 'bundles/junit-report.xml', allowEmptyResults: true
}
} |
79713d8d |
} |
f51c1397 |
stage("Validate vendor") {
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/.git:/go/src/github.com/docker/docker/.git" \ |
f2e09aff |
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
f51c1397 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \ |
781e79d1 |
-e DOCKER_GRAPHDRIVER \ |
cd094422 |
-e TEST_FORCE_VALIDATE \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
f51c1397 |
docker:${GIT_COMMIT} \
hack/validate/vendor
'''
}
} |
a95f16ca |
} |
79713d8d |
|
a95f16ca |
post {
always {
sh '''
echo 'Ensuring container killed.'
docker rm -vf docker-pr$BUILD_NUMBER || true |
b04c769d |
'''
sh ''' |
a95f16ca |
echo 'Chowning /workspace to jenkins user'
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace |
79713d8d |
'''
|
a76ff632 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh '''
bundleName=unit
echo "Creating ${bundleName}-bundles.tar.gz"
tar -czvf ${bundleName}-bundles.tar.gz bundles/junit-report.xml bundles/go-test-report.json bundles/profile.out
''' |
a0bf935f |
|
a76ff632 |
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
a0bf935f |
}
cleanup {
sh 'make clean' |
a95f16ca |
deleteDir()
}
}
} |
c18f793f |
stage('amd64') { |
a95f16ca |
when {
beforeAgent true |
c18f793f |
expression { params.amd64 } |
a95f16ca |
}
agent { label 'amd64 && ubuntu-1804 && overlay2' } |
4d7721cd |
|
79713d8d |
stages { |
38977965 |
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info' |
a2ad56df |
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
''' |
38977965 |
}
} |
79713d8d |
stage("Build dev image") {
steps {
sh '''
# todo: include ip_vs in base image
sudo modprobe ip_vs |
d6a91ca7 |
|
be0e6e9d |
docker build --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} . |
79713d8d |
'''
}
}
stage("Run tests") {
steps { |
e554fb23 |
sh '''#!/bin/bash
# bash is needed so 'jobs -p' works properly
# it also accepts setting inline envvars for functions without explicitly exporting |
b280ea11 |
set -x |
d6a91ca7 |
|
e554fb23 |
run_tests() {
[ -n "$TESTDEBUG" ] && rm= || rm=--rm;
docker run $rm -t --privileged \ |
3262a69b |
-v "$WORKSPACE/bundles/${TEST_INTEGRATION_DEST}:/go/src/github.com/docker/docker/bundles" \
-v "$WORKSPACE/bundles/dynbinary-daemon:/go/src/github.com/docker/docker/bundles/dynbinary-daemon" \ |
e554fb23 |
-v "$WORKSPACE/.git:/go/src/github.com/docker/docker/.git" \
--name "$CONTAINER_NAME" \
-e KEEPBUNDLE=1 \
-e TESTDEBUG \
-e TESTFLAGS \
-e TEST_SKIP_INTEGRATION \
-e TEST_SKIP_INTEGRATION_CLI \
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
bf70a597 |
-e TIMEOUT \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
e554fb23 |
docker:${GIT_COMMIT} \
hack/make.sh \
"$1" \
test-integration
}
trap "exit" INT TERM
trap 'pids=$(jobs -p); echo "Remaining pids to kill: [$pids]"; [ -z "$pids" ] || kill $pids' EXIT
CONTAINER_NAME=docker-pr$BUILD_NUMBER
|
79713d8d |
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
-v "$WORKSPACE/.git:/go/src/github.com/docker/docker/.git" \ |
e554fb23 |
--name ${CONTAINER_NAME}-build \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
be0e6e9d |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \ |
781e79d1 |
-e DOCKER_GRAPHDRIVER \ |
be0e6e9d |
docker:${GIT_COMMIT} \ |
f411be20 |
hack/make.sh \ |
e554fb23 |
dynbinary-daemon
# flaky + integration
TEST_INTEGRATION_DEST=1 CONTAINER_NAME=${CONTAINER_NAME}-1 TEST_SKIP_INTEGRATION_CLI=1 run_tests test-integration-flaky &
# integration-cli first set |
f1c1cd43 |
TEST_INTEGRATION_DEST=2 CONTAINER_NAME=${CONTAINER_NAME}-2 TEST_SKIP_INTEGRATION=1 TESTFLAGS="-test.run Test(DockerSuite|DockerNetworkSuite|DockerHubPullSuite|DockerRegistrySuite|DockerSchema1RegistrySuite|DockerRegistryAuthTokenSuite|DockerRegistryAuthHtpasswdSuite)/" run_tests & |
e554fb23 |
# integration-cli second set |
f1c1cd43 |
TEST_INTEGRATION_DEST=3 CONTAINER_NAME=${CONTAINER_NAME}-3 TEST_SKIP_INTEGRATION=1 TESTFLAGS="-test.run Test(DockerSwarmSuite|DockerDaemonSuite|DockerExternalVolumeSuite)/" run_tests & |
e554fb23 |
c=0
for job in $(jobs -p); do
wait ${job} || c=$?
done
exit $c |
79713d8d |
'''
} |
f3be6b34 |
post {
always {
junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
}
} |
79713d8d |
} |
a95f16ca |
} |
79713d8d |
|
a95f16ca |
post {
always {
sh '''
echo "Ensuring container killed." |
f3d8b8ae |
cids=$(docker ps -aq -f name=docker-pr${BUILD_NUMBER}-*)
[ -n "$cids" ] && docker rm -vf $cids || true |
b04c769d |
'''
sh ''' |
a95f16ca |
echo "Chowning /workspace to jenkins user"
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace
''' |
79713d8d |
|
a76ff632 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh ''' |
c18f793f |
bundleName=amd64 |
a76ff632 |
echo "Creating ${bundleName}-bundles.tar.gz"
# exclude overlay2 directories |
f3be6b34 |
find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz |
a76ff632 |
''' |
a0bf935f |
|
a76ff632 |
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
a0bf935f |
}
cleanup {
sh 'make clean' |
a95f16ca |
deleteDir()
}
}
} |
5bf33adb |
stage('rootless') {
when {
beforeAgent true
expression { params.rootless }
}
agent { label 'amd64 && ubuntu-1804 && overlay2' }
stages {
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info'
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
'''
}
}
stage("Build dev image") {
steps {
sh '''
docker build --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} .
'''
}
}
stage("Integration tests") {
environment {
DOCKER_ROOTLESS = '1'
TEST_SKIP_INTEGRATION_CLI = '1'
}
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \
-e DOCKER_EXPERIMENTAL \
-e DOCKER_ROOTLESS \
-e TEST_SKIP_INTEGRATION_CLI \
-e TIMEOUT \
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \
docker:${GIT_COMMIT} \
hack/make.sh \
dynbinary \
test-integration
'''
}
post {
always {
junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
}
}
}
}
post {
always {
sh '''
echo "Ensuring container killed."
docker rm -vf docker-pr$BUILD_NUMBER || true
'''
sh '''
echo "Chowning /workspace to jenkins user"
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace
'''
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh '''
bundleName=amd64-rootless
echo "Creating ${bundleName}-bundles.tar.gz"
# exclude overlay2 directories
find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz
'''
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
}
}
cleanup {
sh 'make clean'
deleteDir()
}
}
}
|
c18f793f |
stage('s390x') { |
a95f16ca |
when {
beforeAgent true |
c18f793f |
expression { params.s390x } |
a95f16ca |
} |
c239bbbc |
agent { label 's390x-ubuntu-1804' } |
79713d8d |
stages { |
38977965 |
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info' |
a2ad56df |
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
''' |
38977965 |
}
} |
79713d8d |
stage("Build dev image") {
steps {
sh ''' |
c239bbbc |
docker build --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} . |
79713d8d |
'''
}
} |
1e8ede51 |
stage("Unit tests") {
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
1e8ede51 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
1e8ede51 |
docker:${GIT_COMMIT} \
hack/test/unit
'''
} |
e2f5b78e |
post {
always {
junit testResults: 'bundles/junit-report.xml', allowEmptyResults: true
}
} |
1e8ede51 |
}
stage("Integration tests") { |
4e2f39cf |
environment { TEST_SKIP_INTEGRATION_CLI = '1' } |
79713d8d |
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ |
f814e046 |
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
f814e046 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
d723643d |
-e TESTDEBUG \ |
4e2f39cf |
-e TEST_SKIP_INTEGRATION_CLI \ |
bf70a597 |
-e TIMEOUT \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
f814e046 |
docker:${GIT_COMMIT} \ |
1e8ede51 |
hack/make.sh \
dynbinary \
test-integration |
79713d8d |
'''
} |
f3be6b34 |
post {
always {
junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
}
} |
79713d8d |
} |
a95f16ca |
} |
79713d8d |
|
a95f16ca |
post {
always {
sh '''
echo "Ensuring container killed." |
f2e09aff |
docker rm -vf docker-pr$BUILD_NUMBER || true |
b04c769d |
'''
sh ''' |
a95f16ca |
echo "Chowning /workspace to jenkins user" |
9f0e10fe |
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace |
a95f16ca |
''' |
79713d8d |
|
a76ff632 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh '''
bundleName=s390x-integration
echo "Creating ${bundleName}-bundles.tar.gz"
# exclude overlay2 directories |
f3be6b34 |
find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz |
a76ff632 |
''' |
a0bf935f |
|
a76ff632 |
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
a0bf935f |
}
cleanup {
sh 'make clean' |
a95f16ca |
deleteDir()
}
}
} |
c18f793f |
stage('s390x integration-cli') { |
bdc1c1a0 |
when {
beforeAgent true |
e653943e |
not { changeRequest() } |
c18f793f |
expression { params.s390x } |
bdc1c1a0 |
} |
c239bbbc |
agent { label 's390x-ubuntu-1804' } |
bdc1c1a0 |
stages {
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info'
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
'''
}
}
stage("Build dev image") {
steps {
sh ''' |
c239bbbc |
docker build --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} . |
bdc1c1a0 |
'''
}
}
stage("Integration-cli tests") { |
4e2f39cf |
environment { TEST_SKIP_INTEGRATION = '1' } |
bdc1c1a0 |
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
4e2f39cf |
-e TEST_SKIP_INTEGRATION \ |
bf70a597 |
-e TIMEOUT \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
bdc1c1a0 |
docker:${GIT_COMMIT} \
hack/make.sh \
dynbinary \
test-integration
'''
} |
f3be6b34 |
post {
always {
junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
}
} |
bdc1c1a0 |
}
}
post {
always {
sh '''
echo "Ensuring container killed."
docker rm -vf docker-pr$BUILD_NUMBER || true
'''
sh '''
echo "Chowning /workspace to jenkins user"
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace
'''
|
a76ff632 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh '''
bundleName=s390x-integration-cli
echo "Creating ${bundleName}-bundles.tar.gz"
# exclude overlay2 directories |
f3be6b34 |
find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz |
a76ff632 |
''' |
bdc1c1a0 |
|
a76ff632 |
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
bdc1c1a0 |
}
cleanup {
sh 'make clean'
deleteDir()
}
}
} |
c18f793f |
stage('ppc64le') { |
a95f16ca |
when {
beforeAgent true |
c18f793f |
expression { params.ppc64le } |
a95f16ca |
}
agent { label 'ppc64le-ubuntu-1604' } |
c1102830 |
// ppc64le machines run on Docker 18.06, and buildkit has some
// bugs on that version. Build and use buildx instead.
environment {
USE_BUILDX = '1'
DOCKER_BUILDKIT = '0'
} |
79713d8d |
stages { |
38977965 |
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info' |
a2ad56df |
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
''' |
38977965 |
}
} |
79713d8d |
stage("Build dev image") {
steps { |
c04ea113 |
sh '''
make bundles/buildx
bundles/buildx build --load --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} .
''' |
79713d8d |
}
} |
1e8ede51 |
stage("Unit tests") {
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
1e8ede51 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
1e8ede51 |
docker:${GIT_COMMIT} \
hack/test/unit
'''
} |
e2f5b78e |
post {
always {
junit testResults: 'bundles/junit-report.xml', allowEmptyResults: true
}
} |
1e8ede51 |
}
stage("Integration tests") { |
3564b03f |
environment { TEST_SKIP_INTEGRATION_CLI = '1' } |
79713d8d |
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ |
f814e046 |
--name docker-pr$BUILD_NUMBER \ |
e856b46c |
-e DOCKER_EXPERIMENTAL \ |
f814e046 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
d723643d |
-e TESTDEBUG \ |
3564b03f |
-e TEST_SKIP_INTEGRATION_CLI \ |
bf70a597 |
-e TIMEOUT \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
f814e046 |
docker:${GIT_COMMIT} \ |
1e8ede51 |
hack/make.sh \
dynbinary \
test-integration |
79713d8d |
'''
} |
f3be6b34 |
post {
always {
junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
}
} |
79713d8d |
} |
a95f16ca |
} |
79713d8d |
|
a95f16ca |
post {
always {
sh '''
echo "Ensuring container killed." |
337d03a5 |
docker rm -vf docker-pr$BUILD_NUMBER || true |
b04c769d |
'''
sh ''' |
a95f16ca |
echo "Chowning /workspace to jenkins user" |
9f0e10fe |
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace |
a95f16ca |
''' |
79713d8d |
|
a76ff632 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh ''' |
c18f793f |
bundleName=ppc64le-integration |
a76ff632 |
echo "Creating ${bundleName}-bundles.tar.gz"
# exclude overlay2 directories |
f3be6b34 |
find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz |
a76ff632 |
''' |
a0bf935f |
|
a76ff632 |
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
a0bf935f |
}
cleanup {
sh 'make clean' |
a95f16ca |
deleteDir()
}
}
} |
c18f793f |
stage('ppc64le integration-cli') { |
c2f9d583 |
when {
beforeAgent true |
e653943e |
not { changeRequest() } |
c18f793f |
expression { params.ppc64le } |
c2f9d583 |
}
agent { label 'ppc64le-ubuntu-1604' } |
c1102830 |
// ppc64le machines run on Docker 18.06, and buildkit has some
// bugs on that version. Build and use buildx instead.
environment {
USE_BUILDX = '1'
DOCKER_BUILDKIT = '0'
} |
c2f9d583 |
stages {
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info'
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
'''
}
}
stage("Build dev image") {
steps { |
c04ea113 |
sh '''
make bundles/buildx
bundles/buildx build --load --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} .
''' |
c2f9d583 |
}
}
stage("Integration-cli tests") { |
3564b03f |
environment { TEST_SKIP_INTEGRATION = '1' } |
c2f9d583 |
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
3564b03f |
-e TEST_SKIP_INTEGRATION \ |
bf70a597 |
-e TIMEOUT \ |
7019b60d |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
c2f9d583 |
docker:${GIT_COMMIT} \
hack/make.sh \
dynbinary \
test-integration
'''
} |
f3be6b34 |
post {
always {
junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
}
} |
c2f9d583 |
}
}
post {
always {
sh '''
echo "Ensuring container killed."
docker rm -vf docker-pr$BUILD_NUMBER || true
'''
sh '''
echo "Chowning /workspace to jenkins user"
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace
'''
|
a76ff632 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh ''' |
c18f793f |
bundleName=ppc64le-integration-cli |
a76ff632 |
echo "Creating ${bundleName}-bundles.tar.gz"
# exclude overlay2 directories |
f3be6b34 |
find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz |
a76ff632 |
''' |
c2f9d583 |
|
a76ff632 |
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
c2f9d583 |
}
cleanup {
sh 'make clean'
deleteDir()
}
}
} |
9d5361de |
stage('arm64') { |
402c7b1b |
when {
beforeAgent true |
9d5361de |
expression { params.arm64 } |
402c7b1b |
} |
eda98ad0 |
agent { label 'arm64 && linux' } |
86e0c5a0 |
environment {
TEST_SKIP_INTEGRATION_CLI = '1'
}
|
58d57c76 |
stages {
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info'
sh '''
echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}"
curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \
&& bash ${WORKSPACE}/check-config.sh || true
'''
}
}
stage("Build dev image") {
steps { |
a0d670e5 |
sh 'docker build --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} .' |
58d57c76 |
}
}
stage("Unit tests") {
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \ |
a0d670e5 |
-e DOCKER_EXPERIMENTAL \ |
58d57c76 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
a0d670e5 |
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
58d57c76 |
docker:${GIT_COMMIT} \
hack/test/unit
'''
} |
a0d670e5 |
post {
always {
junit testResults: 'bundles/junit-report.xml', allowEmptyResults: true
}
} |
58d57c76 |
}
stage("Integration tests") { |
a0d670e5 |
environment { TEST_SKIP_INTEGRATION_CLI = '1' } |
58d57c76 |
steps {
sh '''
docker run --rm -t --privileged \
-v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
--name docker-pr$BUILD_NUMBER \ |
a0d670e5 |
-e DOCKER_EXPERIMENTAL \ |
58d57c76 |
-e DOCKER_GITCOMMIT=${GIT_COMMIT} \
-e DOCKER_GRAPHDRIVER \ |
a0d670e5 |
-e TESTDEBUG \ |
58d57c76 |
-e TEST_SKIP_INTEGRATION_CLI \ |
a0d670e5 |
-e TIMEOUT \
-e VALIDATE_REPO=${GIT_URL} \
-e VALIDATE_BRANCH=${CHANGE_TARGET} \ |
58d57c76 |
docker:${GIT_COMMIT} \
hack/make.sh \
dynbinary \
test-integration
'''
} |
a0d670e5 |
post {
always {
junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
}
} |
58d57c76 |
} |
402c7b1b |
} |
a0d670e5 |
|
402c7b1b |
post {
always {
sh '''
echo "Ensuring container killed." |
86e0c5a0 |
docker rm -vf docker-pr$BUILD_NUMBER || true
''' |
402c7b1b |
|
86e0c5a0 |
sh ''' |
402c7b1b |
echo "Chowning /workspace to jenkins user" |
86e0c5a0 |
docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace |
402c7b1b |
''' |
86e0c5a0 |
|
a0d670e5 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
sh '''
bundleName=arm64-integration
echo "Creating ${bundleName}-bundles.tar.gz"
# exclude overlay2 directories
find bundles -path '*/root/*overlay2' -prune -o -type f \\( -name '*-report.json' -o -name '*.log' -o -name '*.prof' -o -name '*-report.xml' \\) -print | xargs tar -czf ${bundleName}-bundles.tar.gz
''' |
86e0c5a0 |
|
a0d670e5 |
archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
} |
402c7b1b |
} |
58d57c76 |
cleanup {
sh 'make clean'
deleteDir()
} |
402c7b1b |
}
} |
c18f793f |
stage('win-RS1') { |
a95f16ca |
when {
beforeAgent true |
039eb05a |
// Skip this stage on PRs unless the windowsRS1 checkbox is selected
anyOf {
not { changeRequest() }
expression { params.windowsRS1 }
} |
a95f16ca |
} |
ca3e230b |
environment {
DOCKER_BUILDKIT = '0' |
1fbadd76 |
DOCKER_DUT_DEBUG = '1' |
ca3e230b |
SKIP_VALIDATION_TESTS = '1'
SOURCES_DRIVE = 'd'
SOURCES_SUBDIR = 'gopath'
TESTRUN_DRIVE = 'd' |
48662075 |
TESTRUN_SUBDIR = "CI" |
ca3e230b |
WINDOWS_BASE_IMAGE = 'mcr.microsoft.com/windows/servercore'
WINDOWS_BASE_IMAGE_TAG = 'ltsc2016'
} |
a95f16ca |
agent {
node { |
ca3e230b |
customWorkspace 'd:\\gopath\\src\\github.com\\docker\\docker'
label 'windows-2016' |
a95f16ca |
}
} |
79713d8d |
stages { |
38977965 |
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info'
}
} |
79713d8d |
stage("Run tests") {
steps {
powershell '''
$ErrorActionPreference = 'Stop' |
ca3e230b |
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 |
b323c6e9 |
Invoke-WebRequest https://github.com/moby/docker-ci-zap/blob/master/docker-ci-zap.exe?raw=true -OutFile C:/Windows/System32/docker-ci-zap.exe |
ca3e230b |
./hack/ci/windows.ps1 |
79713d8d |
exit $LastExitCode
'''
}
} |
a95f16ca |
} |
6ee61f54 |
post {
always { |
8d2e1ee5 |
junit testResults: 'bundles/junit-report-*.xml', allowEmptyResults: true |
6ee61f54 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
powershell ''' |
82b5ff80 |
cd $env:WORKSPACE |
6ee61f54 |
$bundleName="windowsRS1-integration"
Write-Host -ForegroundColor Green "Creating ${bundleName}-bundles.zip"
# archiveArtifacts does not support env-vars to , so save the artifacts in a fixed location |
82b5ff80 |
Compress-Archive -Path "bundles/CIDUT.out", "bundles/CIDUT.err", "bundles/junit-report-*.xml" -CompressionLevel Optimal -DestinationPath "${bundleName}-bundles.zip" |
6ee61f54 |
'''
archiveArtifacts artifacts: '*-bundles.zip', allowEmptyArchive: true
}
}
cleanup {
sh 'make clean'
deleteDir()
}
} |
a95f16ca |
} |
c18f793f |
stage('win-RS5') { |
a95f16ca |
when {
beforeAgent true
expression { params.windowsRS5 }
} |
ca3e230b |
environment {
DOCKER_BUILDKIT = '0' |
1fbadd76 |
DOCKER_DUT_DEBUG = '1' |
ca3e230b |
SKIP_VALIDATION_TESTS = '1'
SOURCES_DRIVE = 'd'
SOURCES_SUBDIR = 'gopath'
TESTRUN_DRIVE = 'd' |
48662075 |
TESTRUN_SUBDIR = "CI" |
ca3e230b |
WINDOWS_BASE_IMAGE = 'mcr.microsoft.com/windows/servercore' |
8a52139a |
WINDOWS_BASE_IMAGE_TAG = 'ltsc2019' |
ca3e230b |
} |
a95f16ca |
agent {
node { |
ca3e230b |
customWorkspace 'd:\\gopath\\src\\github.com\\docker\\docker'
label 'windows-2019' |
a95f16ca |
}
} |
79713d8d |
stages { |
38977965 |
stage("Print info") {
steps {
sh 'docker version'
sh 'docker info'
}
} |
79713d8d |
stage("Run tests") {
steps {
powershell '''
$ErrorActionPreference = 'Stop' |
b323c6e9 |
Invoke-WebRequest https://github.com/moby/docker-ci-zap/blob/master/docker-ci-zap.exe?raw=true -OutFile C:/Windows/System32/docker-ci-zap.exe |
ca3e230b |
./hack/ci/windows.ps1 |
79713d8d |
exit $LastExitCode
'''
}
} |
a95f16ca |
} |
6ee61f54 |
post {
always { |
8d2e1ee5 |
junit testResults: 'bundles/junit-report-*.xml', allowEmptyResults: true |
6ee61f54 |
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
powershell ''' |
82b5ff80 |
cd $env:WORKSPACE |
6ee61f54 |
$bundleName="windowsRS5-integration"
Write-Host -ForegroundColor Green "Creating ${bundleName}-bundles.zip"
# archiveArtifacts does not support env-vars to , so save the artifacts in a fixed location |
82b5ff80 |
Compress-Archive -Path "bundles/CIDUT.out", "bundles/CIDUT.err", "bundles/junit-report-*.xml" -CompressionLevel Optimal -DestinationPath "${bundleName}-bundles.zip" |
6ee61f54 |
'''
archiveArtifacts artifacts: '*-bundles.zip', allowEmptyArchive: true
}
}
cleanup {
sh 'make clean'
deleteDir()
}
} |
a95f16ca |
} |
4d7721cd |
}
}
} |
9d98458f |
} |