123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 |
- #!groovy
- pipeline {
- agent none
- options {
- buildDiscarder(logRotator(daysToKeepStr: '30'))
- timeout(time: 2, unit: 'HOURS')
- timestamps()
- }
- parameters {
- booleanParam(name: 'arm64', defaultValue: true, description: 'ARM (arm64) Build/Test')
- booleanParam(name: 's390x', defaultValue: false, description: 'IBM Z (s390x) Build/Test')
- booleanParam(name: 'ppc64le', defaultValue: false, description: 'PowerPC (ppc64le) Build/Test')
- booleanParam(name: 'dco', defaultValue: true, description: 'Run the DCO check')
- }
- environment {
- DOCKER_BUILDKIT = '1'
- DOCKER_EXPERIMENTAL = '1'
- DOCKER_GRAPHDRIVER = 'overlay2'
- APT_MIRROR = 'cdn-fastly.deb.debian.org'
- CHECK_CONFIG_COMMIT = '33a3680e08d1007e72c3b3f1454f823d8e9948ee'
- TESTDEBUG = '0'
- TIMEOUT = '120m'
- }
- stages {
- 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)
- }
- }
- }
- stage('DCO-check') {
- when {
- beforeAgent true
- expression { params.dco }
- }
- agent { label 'arm64 && ubuntu-2004' }
- steps {
- sh '''
- docker run --rm \
- -v "$WORKSPACE:/workspace" \
- -e VALIDATE_REPO=${GIT_URL} \
- -e VALIDATE_BRANCH=${CHANGE_TARGET} \
- alpine sh -c 'apk add --no-cache -q bash git openssh-client && git config --system --add safe.directory /workspace && cd /workspace && hack/validate/dco'
- '''
- }
- }
- stage('Build') {
- parallel {
- stage('s390x') {
- when {
- beforeAgent true
- // Skip this stage on PRs unless the checkbox is selected
- anyOf {
- not { changeRequest() }
- expression { params.s390x }
- }
- }
- agent { label 's390x-ubuntu-2004' }
- 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("Unit tests") {
- steps {
- sh '''
- sudo modprobe ip6table_filter
- '''
- sh '''
- docker run --rm -t --privileged \
- -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
- --name docker-pr$BUILD_NUMBER \
- -e DOCKER_EXPERIMENTAL \
- -e DOCKER_GITCOMMIT=${GIT_COMMIT} \
- -e DOCKER_GRAPHDRIVER \
- -e VALIDATE_REPO=${GIT_URL} \
- -e VALIDATE_BRANCH=${CHANGE_TARGET} \
- docker:${GIT_COMMIT} \
- hack/test/unit
- '''
- }
- post {
- always {
- junit testResults: 'bundles/junit-report*.xml', allowEmptyResults: true
- }
- }
- }
- stage("Integration tests") {
- environment { 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_EXPERIMENTAL \
- -e DOCKER_GITCOMMIT=${GIT_COMMIT} \
- -e DOCKER_GRAPHDRIVER \
- -e TESTDEBUG \
- -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=s390x-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
- '''
- archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
- }
- }
- cleanup {
- sh 'make clean'
- deleteDir()
- }
- }
- }
- stage('s390x integration-cli') {
- when {
- beforeAgent true
- // Skip this stage on PRs unless the checkbox is selected
- anyOf {
- not { changeRequest() }
- expression { params.s390x }
- }
- }
- agent { label 's390x-ubuntu-2004' }
- 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-cli tests") {
- environment { TEST_SKIP_INTEGRATION = '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 TEST_SKIP_INTEGRATION \
- -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=s390x-integration-cli
- 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()
- }
- }
- }
- stage('ppc64le') {
- when {
- beforeAgent true
- // Skip this stage on PRs unless the checkbox is selected
- anyOf {
- not { changeRequest() }
- expression { params.ppc64le }
- }
- }
- agent { label 'ppc64le-ubuntu-1604' }
- // 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'
- }
- 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 '''
- make bundles/buildx
- bundles/buildx build --load --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} .
- '''
- }
- }
- stage("Unit tests") {
- steps {
- sh '''
- sudo modprobe ip6table_filter
- '''
- sh '''
- docker run --rm -t --privileged \
- -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
- --name docker-pr$BUILD_NUMBER \
- -e DOCKER_EXPERIMENTAL \
- -e DOCKER_GITCOMMIT=${GIT_COMMIT} \
- -e DOCKER_GRAPHDRIVER \
- -e VALIDATE_REPO=${GIT_URL} \
- -e VALIDATE_BRANCH=${CHANGE_TARGET} \
- docker:${GIT_COMMIT} \
- hack/test/unit
- '''
- }
- post {
- always {
- junit testResults: 'bundles/junit-report*.xml', allowEmptyResults: true
- }
- }
- }
- stage("Integration tests") {
- environment { 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_EXPERIMENTAL \
- -e DOCKER_GITCOMMIT=${GIT_COMMIT} \
- -e DOCKER_GRAPHDRIVER \
- -e TESTDEBUG \
- -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=ppc64le-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
- '''
- archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
- }
- }
- cleanup {
- sh 'make clean'
- deleteDir()
- }
- }
- }
- stage('ppc64le integration-cli') {
- when {
- beforeAgent true
- // Skip this stage on PRs unless the checkbox is selected
- anyOf {
- not { changeRequest() }
- expression { params.ppc64le }
- }
- }
- agent { label 'ppc64le-ubuntu-1604' }
- // 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'
- }
- 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 '''
- make bundles/buildx
- bundles/buildx build --load --force-rm --build-arg APT_MIRROR -t docker:${GIT_COMMIT} .
- '''
- }
- }
- stage("Integration-cli tests") {
- environment { TEST_SKIP_INTEGRATION = '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 TEST_SKIP_INTEGRATION \
- -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=ppc64le-integration-cli
- 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()
- }
- }
- }
- stage('arm64') {
- when {
- beforeAgent true
- expression { params.arm64 }
- }
- agent { label 'arm64 && ubuntu-2004' }
- environment {
- TEST_SKIP_INTEGRATION_CLI = '1'
- }
- 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("Unit tests") {
- steps {
- sh '''
- sudo modprobe ip6table_filter
- '''
- sh '''
- docker run --rm -t --privileged \
- -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \
- --name docker-pr$BUILD_NUMBER \
- -e DOCKER_EXPERIMENTAL \
- -e DOCKER_GITCOMMIT=${GIT_COMMIT} \
- -e DOCKER_GRAPHDRIVER \
- -e VALIDATE_REPO=${GIT_URL} \
- -e VALIDATE_BRANCH=${CHANGE_TARGET} \
- docker:${GIT_COMMIT} \
- hack/test/unit
- '''
- }
- post {
- always {
- junit testResults: 'bundles/junit-report*.xml', allowEmptyResults: true
- }
- }
- }
- stage("Integration tests") {
- environment { 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_EXPERIMENTAL \
- -e DOCKER_GITCOMMIT=${GIT_COMMIT} \
- -e DOCKER_GRAPHDRIVER \
- -e TESTDEBUG \
- -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=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
- '''
- archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
- }
- }
- cleanup {
- sh 'make clean'
- deleteDir()
- }
- }
- }
- }
- }
- }
- }
|