gopkg.in/docker/docker.v23@v23.0.11/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/docker/docker/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/docker/docker/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_SKIP_INTEGRATION_CLI \
   115                                    -e TIMEOUT \
   116                                    -e VALIDATE_REPO=${GIT_URL} \
   117                                    -e VALIDATE_BRANCH=${CHANGE_TARGET} \
   118                                    docker:${GIT_COMMIT} \
   119                                    hack/make.sh \
   120                                      dynbinary \
   121                                      test-integration
   122                                  '''
   123                              }
   124                              post {
   125                                  always {
   126                                      junit testResults: 'bundles/**/*-report.xml', allowEmptyResults: true
   127                                  }
   128                              }
   129                          }
   130                      }
   131  
   132                      post {
   133                          always {
   134                              sh '''
   135                              echo "Ensuring container killed."
   136                              docker rm -vf docker-pr$BUILD_NUMBER || true
   137                              '''
   138  
   139                              sh '''
   140                              echo "Chowning /workspace to jenkins user"
   141                              docker run --rm -v "$WORKSPACE:/workspace" busybox chown -R "$(id -u):$(id -g)" /workspace
   142                              '''
   143  
   144                              catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', message: 'Failed to create bundles.tar.gz') {
   145                                  sh '''
   146                                  bundleName=arm64-integration
   147                                  echo "Creating ${bundleName}-bundles.tar.gz"
   148                                  # exclude overlay2 directories
   149                                  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
   150                                  '''
   151  
   152                                  archiveArtifacts artifacts: '*-bundles.tar.gz', allowEmptyArchive: true
   153                              }
   154                          }
   155                          cleanup {
   156                              sh 'make clean'
   157                              deleteDir()
   158                          }
   159                      }
   160                  }
   161              }
   162          }
   163      }
   164  }