github.com/toplink-cn/moby@v0.0.0-20240305205811-460b4aebdf81/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_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  }