1def withGithubStatus(String context, Closure cl) { 2 def setGithubStatus = { String state -> 3 try { 4 def backref = "${BUILD_URL}flowGraphTable/" 5 def reposSourceURL = scm.repositories[0].getURIs()[0].toString() 6 step( 7 $class: 'GitHubCommitStatusSetter', 8 contextSource: [$class: "ManuallyEnteredCommitContextSource", context: context], 9 errorHandlers: [[$class: 'ShallowAnyErrorHandler']], 10 reposSource: [$class: 'ManuallyEnteredRepositorySource', url: reposSourceURL], 11 statusBackrefSource: [$class: 'ManuallyEnteredBackrefSource', backref: backref], 12 statusResultSource: [$class: 'ConditionalStatusResultSource', results: [[$class: 'AnyBuildResult', state: state]]], 13 ) 14 } catch (err) { 15 echo "Exception from GitHubCommitStatusSetter for $context: $err" 16 } 17 } 18 19 setGithubStatus 'PENDING' 20 21 try { 22 cl() 23 } catch (err) { 24 // AbortException signals a "normal" build failure. 25 if (!(err instanceof hudson.AbortException)) { 26 echo "Exception in withGithubStatus for $context: $err" 27 } 28 setGithubStatus 'FAILURE' 29 throw err 30 } 31 setGithubStatus 'SUCCESS' 32} 33 34 35pipeline { 36 agent none 37 options { 38 buildDiscarder(logRotator(daysToKeepStr: '30')) 39 timeout(time: 3, unit: 'HOURS') 40 } 41 parameters { 42 booleanParam(name: 'janky', defaultValue: true, description: 'x86 Build/Test') 43 booleanParam(name: 'experimental', defaultValue: true, description: 'x86 Experimental Build/Test ') 44 booleanParam(name: 'z', defaultValue: true, description: 'IBM Z (s390x) Build/Test') 45 booleanParam(name: 'powerpc', defaultValue: true, description: 'PowerPC (ppc64le) Build/Test') 46 booleanParam(name: 'vendor', defaultValue: true, description: 'Vendor') 47 booleanParam(name: 'windowsRS1', defaultValue: true, description: 'Windows 2016 (RS1) Build/Test') 48 booleanParam(name: 'windowsRS5', defaultValue: true, description: 'Windows 2019 (RS5) Build/Test') 49 } 50 stages { 51 stage('Build') { 52 parallel { 53 stage('janky') { 54 when { 55 beforeAgent true 56 expression { params.janky } 57 } 58 agent { 59 node { 60 label 'ubuntu-1604-overlay2-stable' 61 } 62 } 63 steps { 64 withCredentials([string(credentialsId: '52af932f-f13f-429e-8467-e7ff8b965cdb', variable: 'CODECOV_TOKEN')]) { 65 withGithubStatus('janky') { 66 sh ''' 67 # todo: include ip_vs in base image 68 sudo modprobe ip_vs 69 70 GITCOMMIT=$(git rev-parse --short HEAD) 71 docker build --rm --force-rm --build-arg APT_MIRROR=cdn-fastly.deb.debian.org -t docker:$GITCOMMIT . 72 73 docker run --rm -t --privileged \ 74 -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ 75 -v "$WORKSPACE/.git:/go/src/github.com/docker/docker/.git" \ 76 --name docker-pr$BUILD_NUMBER \ 77 -e DOCKER_GITCOMMIT=${GITCOMMIT} \ 78 -e DOCKER_GRAPHDRIVER=vfs \ 79 -e DOCKER_EXECDRIVER=native \ 80 -e CODECOV_TOKEN \ 81 -e GIT_SHA1=${GIT_COMMIT} \ 82 docker:$GITCOMMIT \ 83 hack/ci/janky 84 ''' 85 sh ''' 86 GITCOMMIT=$(git rev-parse --short HEAD) 87 echo "Building e2e image" 88 docker build --build-arg DOCKER_GITCOMMIT=$GITCOMMIT -t moby-e2e-test -f Dockerfile.e2e . 89 ''' 90 } 91 } 92 } 93 post { 94 always { 95 sh ''' 96 echo "Ensuring container killed." 97 docker rm -vf docker-pr$BUILD_NUMBER || true 98 99 echo "Chowning /workspace to jenkins user" 100 docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace 101 ''' 102 sh ''' 103 echo "Creating bundles.tar.gz" 104 (find bundles -name '*.log' -o -name '*.prof' -o -name integration.test | xargs tar -czf bundles.tar.gz) || true 105 ''' 106 archiveArtifacts artifacts: 'bundles.tar.gz' 107 } 108 } 109 } 110 stage('experimental') { 111 when { 112 beforeAgent true 113 expression { params.experimental } 114 } 115 agent { 116 node { 117 label 'ubuntu-1604-aufs-stable' 118 } 119 } 120 steps { 121 withGithubStatus('experimental') { 122 sh ''' 123 GITCOMMIT=$(git rev-parse --short HEAD) 124 docker build --rm --force-rm --build-arg APT_MIRROR=cdn-fastly.deb.debian.org -t docker:${GITCOMMIT}-exp . 125 126 docker run --rm -t --privileged \ 127 -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ 128 -e DOCKER_EXPERIMENTAL=y \ 129 --name docker-pr-exp$BUILD_NUMBER \ 130 -e DOCKER_GITCOMMIT=${GITCOMMIT} \ 131 -e DOCKER_GRAPHDRIVER=vfs \ 132 -e DOCKER_EXECDRIVER=native \ 133 docker:${GITCOMMIT}-exp \ 134 hack/ci/experimental 135 ''' 136 } 137 } 138 post { 139 always { 140 sh ''' 141 echo "Ensuring container killed." 142 docker rm -vf docker-pr-exp$BUILD_NUMBER || true 143 144 echo "Chowning /workspace to jenkins user" 145 docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace 146 ''' 147 sh ''' 148 echo "Creating bundles.tar.gz" 149 (find bundles -name '*.log' -o -name '*.prof' -o -name integration.test | xargs tar -czf bundles.tar.gz) || true 150 ''' 151 archiveArtifacts artifacts: 'bundles.tar.gz' 152 } 153 } 154 } 155 stage('z') { 156 when { 157 beforeAgent true 158 expression { params.z } 159 } 160 agent { 161 node { 162 label 's390x-ubuntu-1604' 163 } 164 } 165 steps { 166 withGithubStatus('z') { 167 sh ''' 168 GITCOMMIT=$(git rev-parse --short HEAD) 169 170 test -f Dockerfile.s390x && \ 171 docker build --rm --force-rm --build-arg APT_MIRROR=cdn-fastly.deb.debian.org -t docker-s390x:$GITCOMMIT -f Dockerfile.s390x . || \ 172 docker build --rm --force-rm --build-arg APT_MIRROR=cdn-fastly.deb.debian.org -t docker-s390x:$GITCOMMIT -f Dockerfile . 173 174 docker run --rm -t --privileged \ 175 -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ 176 --name docker-pr-s390x$BUILD_NUMBER \ 177 -e DOCKER_GRAPHDRIVER=vfs \ 178 -e DOCKER_EXECDRIVER=native \ 179 -e TIMEOUT="300m" \ 180 -e DOCKER_GITCOMMIT=${GITCOMMIT} \ 181 docker-s390x:$GITCOMMIT \ 182 hack/ci/z 183 ''' 184 } 185 } 186 post { 187 always { 188 sh ''' 189 echo "Ensuring container killed." 190 docker rm -vf docker-pr-s390x$BUILD_NUMBER || true 191 192 echo "Chowning /workspace to jenkins user" 193 docker run --rm -v "$WORKSPACE:/workspace" s390x/busybox chown -R "$(id -u):$(id -g)" /workspace 194 ''' 195 sh ''' 196 echo "Creating bundles.tar.gz" 197 find bundles -name '*.log' | xargs tar -czf bundles.tar.gz 198 ''' 199 archiveArtifacts artifacts: 'bundles.tar.gz' 200 } 201 } 202 } 203 stage('powerpc') { 204 when { 205 beforeAgent true 206 expression { params.powerpc } 207 } 208 agent { 209 node { 210 label 'ppc64le-ubuntu-1604' 211 } 212 } 213 steps { 214 withGithubStatus('powerpc') { 215 sh ''' 216 GITCOMMIT=$(git rev-parse --short HEAD) 217 218 test -f Dockerfile.ppc64le && \ 219 docker build --rm --force-rm --build-arg APT_MIRROR=cdn-fastly.deb.debian.org -t docker-powerpc:$GITCOMMIT -f Dockerfile.ppc64le . || \ 220 docker build --rm --force-rm --build-arg APT_MIRROR=cdn-fastly.deb.debian.org -t docker-powerpc:$GITCOMMIT -f Dockerfile . 221 222 docker run --rm -t --privileged \ 223 -v "$WORKSPACE/bundles:/go/src/github.com/docker/docker/bundles" \ 224 --name docker-pr-power$BUILD_NUMBER \ 225 -e DOCKER_GRAPHDRIVER=vfs \ 226 -e DOCKER_EXECDRIVER=native \ 227 -e DOCKER_GITCOMMIT=${GITCOMMIT} \ 228 -e TIMEOUT="180m" \ 229 docker-powerpc:$GITCOMMIT \ 230 hack/ci/powerpc 231 ''' 232 } 233 } 234 post { 235 always { 236 sh ''' 237 echo "Ensuring container killed." 238 docker rm -vf docker-pr-power$BUILD_NUMBER || true 239 240 echo "Chowning /workspace to jenkins user" 241 docker run --rm -v "$WORKSPACE:/workspace" ppc64le/busybox chown -R "$(id -u):$(id -g)" /workspace 242 ''' 243 sh ''' 244 echo "Creating bundles.tar.gz" 245 find bundles -name '*.log' | xargs tar -czf bundles.tar.gz 246 ''' 247 archiveArtifacts artifacts: 'bundles.tar.gz' 248 } 249 } 250 } 251 stage('vendor') { 252 when { 253 beforeAgent true 254 expression { params.vendor } 255 } 256 agent { 257 node { 258 label 'ubuntu-1604-aufs-stable' 259 } 260 } 261 steps { 262 withGithubStatus('vendor') { 263 sh ''' 264 GITCOMMIT=$(git rev-parse --short HEAD) 265 266 docker build --rm --force-rm --build-arg APT_MIRROR=cdn-fastly.deb.debian.org -t dockerven:$GITCOMMIT . 267 268 docker run --rm -t --privileged \ 269 --name dockerven-pr$BUILD_NUMBER \ 270 -e DOCKER_GRAPHDRIVER=vfs \ 271 -e DOCKER_EXECDRIVER=native \ 272 -v "$WORKSPACE/.git:/go/src/github.com/docker/docker/.git" \ 273 -e DOCKER_GITCOMMIT=${GITCOMMIT} \ 274 -e TIMEOUT=120m dockerven:$GITCOMMIT \ 275 hack/validate/vendor 276 ''' 277 } 278 } 279 } 280 stage('windowsRS1') { 281 when { 282 beforeAgent true 283 expression { params.windowsRS1 } 284 } 285 agent { 286 node { 287 label 'windows-rs1' 288 customWorkspace 'c:\\gopath\\src\\github.com\\docker\\docker' 289 } 290 } 291 steps { 292 withGithubStatus('windowsRS1') { 293 powershell ''' 294 $ErrorActionPreference = 'Stop' 295 .\\hack\\ci\\windows.ps1 296 exit $LastExitCode 297 ''' 298 } 299 } 300 } 301 stage('windowsRS5-process') { 302 when { 303 beforeAgent true 304 expression { params.windowsRS5 } 305 } 306 agent { 307 node { 308 label 'windows-rs5' 309 customWorkspace 'c:\\gopath\\src\\github.com\\docker\\docker' 310 } 311 } 312 steps { 313 withGithubStatus('windowsRS5-process') { 314 powershell ''' 315 $ErrorActionPreference = 'Stop' 316 .\\hack\\ci\\windows.ps1 317 exit $LastExitCode 318 ''' 319 } 320 } 321 } 322 } 323 } 324 } 325}