github.com/adacta-ru/mattermost-server@v5.11.1+incompatible/build/Jenkinsfile.pr (about)

     1  #!/usr/bin/env groovy
     2  
     3  @Library('shared-pipelines') _
     4  import org.mattermost.Utils
     5  import java.util.*;
     6  def utils = new org.mattermost.Utils()
     7  def rnd = UUID.randomUUID().toString()
     8  
     9  pipeline {
    10      agent {
    11          label 'default-mm-builder'
    12      }
    13  
    14      options {
    15          buildDiscarder(logRotator(numToKeepStr: '3'))
    16          timeout(time: 1, unit: 'HOURS')
    17      }
    18  
    19      environment {
    20          COMPOSE_PROJECT_NAME="${rnd}-${env.BUILD_NUMBER}"
    21      }
    22  
    23      stages {
    24          stage('Setup') {
    25              steps {
    26                  script {
    27                      utils.stopOldBuilds()
    28                  }
    29                  cleanWs notFailBuild: true
    30                  sh """
    31                      mkdir -p src/github.com/mattermost/mattermost-server
    32                      mkdir -p src/github.com/mattermost/mattermost-webapp
    33                      mkdir -p src/github.com/mattermost/enterprise
    34                  """
    35                  dir('src/github.com/mattermost/mattermost-server') {
    36                      checkout scm
    37                  }
    38                  dir('src/github.com/mattermost/mattermost-webapp') {
    39                      checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '310159d3-f7c5-4f5d-bfa1-151e3ef2db57', url: 'https://github.com/mattermost/mattermost-webapp.git']]]
    40                  }
    41                  dir('src/github.com/mattermost/enterprise') {
    42                      checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '310159d3-f7c5-4f5d-bfa1-151e3ef2db57', url: 'https://github.com/mattermost/enterprise.git']]]
    43                  }
    44                  dir('src/github.com/mattermost/enterprise') {
    45                      ansiColor('xterm') {
    46                          sh """
    47                              #!/bin/bash -ex
    48                              git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout $env.CHANGE_TARGET || git checkout release-5.10 || git checkout master || echo 1
    49                              export EE_GIT_COMMIT=\$(git rev-parse HEAD)
    50  
    51                              echo EE Commit: \${EE_GIT_COMMIT}
    52                          """
    53                      }
    54                  }
    55                  dir('src/github.com/mattermost/mattermost-webapp') {
    56                      withDockerContainer(args: '', image: 'mattermost/mattermost-build-webapp:oct-2-2018') {
    57                          ansiColor('xterm') {
    58                              sh """
    59                                  #!/bin/bash -ex
    60                                  git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout $env.CHANGE_TARGET || git checkout release-5.10 || git checkout master
    61                                  rm -rf ./dist
    62                                  export WEBAPP_GIT_COMMIT=\$(git rev-parse HEAD)
    63  
    64                                  echo Webapp Commit: \${WEBAPP_GIT_COMMIT}
    65  
    66                                  curl -f -o ./dist.tar.gz https://releases.mattermost.com/mattermost-webapp/commit/\${WEBAPP_GIT_COMMIT}/mattermost-webapp.tar.gz && mkdir ./dist && tar -xvf ./dist.tar.gz -C ./dist --strip-components=1 || make node_modules test build
    67                              """
    68                          }
    69                      }
    70                  }
    71              }
    72          }
    73  
    74          stage('Build') {
    75              environment {
    76                  GOPATH = "/go"
    77              }
    78  
    79              steps {
    80                  withDockerContainer(args: '-u root --privileged -v ${WORKSPACE}/src:/go/src/', image: 'mattermost/mattermost-build-server:feb-28-2019') {
    81                      ansiColor('xterm') {
    82                          sh """
    83                              cd /go/src/github.com/mattermost/mattermost-server
    84                              mv config/default.json config/config.json || echo ""
    85                              make check-style BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}'
    86                              make build BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}'
    87                              make package BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}'
    88                          """
    89                      }
    90                  }
    91              }
    92          }
    93  
    94          stage('Test') {
    95              environment {
    96                  GOPATH = "/go"
    97                  TEST_DATABASE_MYSQL_DSN = "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s"
    98                  TEST_DATABASE_POSTGRESQL_DSN = "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10"
    99                  TEST_DATABASE_MYSQL_ROOT_PASSWD = "mostest"
   100                  CI_INBUCKET_HOST = "inbucket"
   101                  CI_MINIO_HOST = "minio"
   102                  CI_INBUCKET_PORT = "10080"
   103                  CI_MINIO_PORT = "9000"
   104                  CI_INBUCKET_SMTP_PORT = "10025"
   105                  CI_LDAP_HOST = "openldap"
   106                  IS_CI = true
   107                  MM_SQLSETTINGS_DATASOURCE = "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8"
   108                  MM_EMAILSETTINGS_SMTPSERVER = "inbucket"
   109                  MM_EMAILSETTINGS_SMTPPORT = "10025"
   110                  MM_ELASTICSEARCHSETTINGS_CONNECTIONURL = "http://elasticsearch:9200"
   111              }
   112  
   113              steps {
   114                  dir('src/github.com/mattermost/mattermost-server/build') {
   115                      ansiColor('xterm') {
   116                          sh """
   117                              docker-compose --no-ansi run --rm start_dependencies
   118                              docker-compose --no-ansi ps
   119                              docker-compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest -f /add-users.ldif';
   120                              docker-compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest -f /add-groups.ldif';
   121                          """
   122                      }
   123                  }
   124  
   125                  withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:feb-28-2019') {
   126                      ansiColor('xterm') {
   127                          sh """
   128                              cd /go/src/github.com/mattermost/mattermost-server
   129  
   130                              mkdir -p client/plugins
   131                              cat config/config.json
   132  
   133                              make test-server BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' TESTFLAGS= TESTFLAGSEE=
   134  
   135                          """
   136                      }
   137                      withCredentials([string(credentialsId: 'CODECOV_TOKEN', variable: 'CODECOV')]) {
   138                          sh '''
   139                              cd /go/src/github.com/mattermost/mattermost-server
   140                              curl -s https://codecov.io/bash | bash -s - -t $CODECOV || echo 'Codecov failed to upload'
   141                          '''
   142                      }
   143                  }
   144              }
   145          }
   146  
   147          stage('Push to S3') {
   148              stages {
   149                  stage('Pull request') {
   150                      when {
   151                          allOf {
   152                              expression { env.CHANGE_ID != null }
   153                              expression { env.CHANGE_TARGET != null }
   154                          }
   155                      }
   156                      steps {
   157                          dir('src/github.com/mattermost/mattermost-server/dist') {
   158                              step([$class: 'S3BucketPublisher', dontWaitForConcurrentBuildCompletion: false, entries: [[
   159                                  bucket: "releases.mattermost.com/mattermost-platform-pr/${CHANGE_ID}",
   160                                  excludedFile: '',
   161                                  flatten: true,
   162                                  gzipFiles: false,
   163                                  keepForever: false,
   164                                  managedArtifacts: false,
   165                                  noUploadOnFailure: true,
   166                                  selectedRegion: 'us-east-1',
   167                                  showDirectlyInBrowser: false,
   168                                  sourceFile: '*.tar.gz',
   169                                  storageClass: 'STANDARD',
   170                                  uploadFromSlave: false,
   171                                  useServerSideEncryption: false,
   172                                  userMetadata: [[key: 'Cache-Control', value: 'no-cache']]
   173                              ], [
   174                                  bucket: "releases.mattermost.com/mattermost-platform-pr/${CHANGE_BRANCH}",
   175                                  excludedFile: '',
   176                                  flatten: true,
   177                                  gzipFiles: false,
   178                                  keepForever: false,
   179                                  managedArtifacts: false,
   180                                  noUploadOnFailure: true,
   181                                  selectedRegion: 'us-east-1',
   182                                  showDirectlyInBrowser: false,
   183                                  sourceFile: '*.tar.gz',
   184                                  storageClass: 'STANDARD',
   185                                  uploadFromSlave: false,
   186                                  useServerSideEncryption: false,
   187                                  userMetadata: [[key: 'Cache-Control', value: 'no-cache']]
   188                              ]], profileName: 'Releases', userMetadAta: []])
   189                          }
   190                      }
   191                  }
   192                  stage('Branch') {
   193                      when {
   194                          expression { env.CHANGE_ID == null }
   195                      }
   196                      steps {
   197                          dir('src/github.com/mattermost/mattermost-server/dist') {
   198                              step([$class: 'S3BucketPublisher', dontWaitForConcurrentBuildCompletion: false, entries: [[
   199                                  bucket: "releases.mattermost.com/mattermost-platform-pr/${BRANCH_NAME}",
   200                                  excludedFile: '',
   201                                  flatten: true,
   202                                  gzipFiles: false,
   203                                  keepForever: false,
   204                                  managedArtifacts: false,
   205                                  noUploadOnFailure: true,
   206                                  selectedRegion: 'us-east-1',
   207                                  showDirectlyInBrowser: false,
   208                                  sourceFile: '*.tar.gz',
   209                                  storageClass: 'STANDARD',
   210                                  uploadFromSlave: false,
   211                                  useServerSideEncryption: false,
   212                                  userMetadata: [[key: 'Cache-Control', value: 'no-cache']]
   213                              ]], profileName: 'Releases', userMetadAta: []])
   214                          }
   215                      }
   216                  }
   217              }
   218          }
   219  
   220          stage('Trigger docker image') {
   221              when {
   222                  expression { env.CHANGE_ID != null }
   223              }
   224              steps {
   225                  build job: '../../mk/mattermost-enterprise-edition-release', parameters: [string(name: 'RELEASE', value: "${CHANGE_ID}"), booleanParam(name: 'FROM_PR', value: true)], propagate: false, wait: false
   226              }
   227          }
   228      }
   229  
   230      post {
   231          always {
   232              dir('src/github.com/mattermost/mattermost-server') {
   233                  junit allowEmptyResults: true, healthScaleFactor: 0.0, testResults: 'report*.xml'
   234                  archiveArtifacts 'report*.xml'
   235              }
   236              dir('src/github.com/mattermost/mattermost-server/build') {
   237                  ansiColor('xterm') {
   238                      sh """
   239                          docker-compose --no-ansi down -v
   240                      """
   241                  }
   242              }
   243          }
   244          cleanup {
   245              cleanWs notFailBuild: true
   246          }
   247      }
   248  }