github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/Jenkinsfile (about) 1 #!groovy 2 pipeline { 3 agent none 4 5 options { 6 buildDiscarder(logRotator(daysToKeepStr: '30')) 7 timeout(time: 2, unit: 'HOURS') 8 timestamps() 9 } 10 parameters { 11 booleanParam(name: 'arm64', defaultValue: true, description: 'ARM (arm64) Build/Test') 12 booleanParam(name: 'dco', defaultValue: true, description: 'Run the DCO check') 13 } 14 environment { 15 DOCKER_BUILDKIT = '1' 16 DOCKER_EXPERIMENTAL = '1' 17 DOCKER_GRAPHDRIVER = 'overlay2' 18 CHECK_CONFIG_COMMIT = '33a3680e08d1007e72c3b3f1454f823d8e9948ee' 19 TESTDEBUG = '0' 20 TIMEOUT = '120m' 21 } 22 stages { 23 stage('pr-hack') { 24 when { changeRequest() } 25 steps { 26 script { 27 echo "Workaround for PR auto-cancel feature. Borrowed from https://issues.jenkins-ci.org/browse/JENKINS-43353" 28 def buildNumber = env.BUILD_NUMBER as int 29 if (buildNumber > 1) milestone(buildNumber - 1) 30 milestone(buildNumber) 31 } 32 } 33 } 34 stage('DCO-check') { 35 when { 36 beforeAgent true 37 expression { params.dco } 38 } 39 agent { label 'arm64 && ubuntu-2004' } 40 steps { 41 sh ''' 42 docker run --rm \ 43 -v "$WORKSPACE:/workspace" \ 44 -e VALIDATE_REPO=${GIT_URL} \ 45 -e VALIDATE_BRANCH=${CHANGE_TARGET} \ 46 alpine sh -c 'apk add --no-cache -q bash git openssh-client && git config --system --add safe.directory /workspace && cd /workspace && hack/validate/dco' 47 ''' 48 } 49 } 50 stage('Build') { 51 parallel { 52 stage('arm64') { 53 when { 54 beforeAgent true 55 expression { params.arm64 } 56 } 57 agent { label 'arm64 && ubuntu-2004' } 58 environment { 59 TEST_SKIP_INTEGRATION_CLI = '1' 60 } 61 62 stages { 63 stage("Print info") { 64 steps { 65 sh 'docker version' 66 sh 'docker info' 67 sh ''' 68 echo "check-config.sh version: ${CHECK_CONFIG_COMMIT}" 69 curl -fsSL -o ${WORKSPACE}/check-config.sh "https://raw.githubusercontent.com/moby/moby/${CHECK_CONFIG_COMMIT}/contrib/check-config.sh" \ 70 && bash ${WORKSPACE}/check-config.sh || true 71 ''' 72 } 73 } 74 stage("Build dev image") { 75 steps { 76 sh 'docker build --force-rm -t docker:${GIT_COMMIT} .' 77 } 78 } 79 stage("Unit tests") { 80 steps { 81 sh ''' 82 sudo modprobe ip6table_filter 83 ''' 84 sh ''' 85 docker run --rm -t --privileged \ 86 -v "$WORKSPACE/bundles:/go/src/github.com/Prakhar-Agarwal-byte/moby/bundles" \ 87 --name docker-pr$BUILD_NUMBER \ 88 -e DOCKER_EXPERIMENTAL \ 89 -e DOCKER_GITCOMMIT=${GIT_COMMIT} \ 90 -e DOCKER_GRAPHDRIVER \ 91 -e VALIDATE_REPO=${GIT_URL} \ 92 -e VALIDATE_BRANCH=${CHANGE_TARGET} \ 93 docker:${GIT_COMMIT} \ 94 hack/test/unit 95 ''' 96 } 97 post { 98 always { 99 junit testResults: 'bundles/junit-report*.xml', allowEmptyResults: true 100 } 101 } 102 } 103 stage("Integration tests") { 104 environment { TEST_SKIP_INTEGRATION_CLI = '1' } 105 steps { 106 sh ''' 107 docker run --rm -t --privileged \ 108 -v "$WORKSPACE/bundles:/go/src/github.com/Prakhar-Agarwal-byte/moby/bundles" \ 109 --name docker-pr$BUILD_NUMBER \ 110 -e DOCKER_EXPERIMENTAL \ 111 -e DOCKER_GITCOMMIT=${GIT_COMMIT} \ 112 -e DOCKER_GRAPHDRIVER \ 113 -e TESTDEBUG \ 114 -e TEST_INTEGRATION_USE_SNAPSHOTTER \ 115 -e TEST_SKIP_INTEGRATION_CLI \ 116 -e TIMEOUT \ 117 -e VALIDATE_REPO=${GIT_URL} \ 118 -e VALIDATE_BRANCH=${CHANGE_TARGET} \ 119 docker:${GIT_COMMIT} \ 120 hack/make.sh \ 121 dynbinary \ 122 test-integration 123 ''' 124 } 125 post { 126 always { 127 junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true 128 } 129 } 130 } 131 } 132 133 post { 134 always { 135 sh ''' 136 echo "Ensuring container killed." 137 docker rm -vf docker-pr$BUILD_NUMBER || true 138 ''' 139 140 sh ''' 141 echo "Chowning /workspace to jenkins user" 142 docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace 143 ''' 144 145 catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') { 146 sh ''' 147 bundleName=arm64-integration 148 echo "Creating ${bundleName}-bundles.tar.gz" 149 # exclude overlay2 directories 150 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 151 ''' 152 153 archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true 154 } 155 } 156 cleanup { 157 sh 'make clean' 158 deleteDir() 159 } 160 } 161 } 162 } 163 } 164 } 165 }