diff --git a/build/Jenkinsfile.pr b/build/Jenkinsfile.pr index 2fc80b6789..c380471cd4 100644 --- a/build/Jenkinsfile.pr +++ b/build/Jenkinsfile.pr @@ -7,413 +7,413 @@ def utils = new org.mattermost.Utils() def rnd = UUID.randomUUID().toString() pipeline { - agent { - label 'default-mm-builder' - } + agent { + label 'default-mm-builder' + } - options { - buildDiscarder(logRotator(numToKeepStr: '3')) - timeout(time: 1, unit: 'HOURS') - } + options { + buildDiscarder(logRotator(numToKeepStr: '3')) + timeout(time: 1, unit: 'HOURS') + } - environment { - COMPOSE_PROJECT_NAME="${rnd}-${env.BUILD_NUMBER}" - } + environment { + COMPOSE_PROJECT_NAME="${rnd}-${env.BUILD_NUMBER}" + } - stages { - stage('Setup') { - steps { - script { - utils.stopOldBuilds() - } - cleanWs notFailBuild: true - sh """ - mkdir -p src/github.com/mattermost/mattermost-server - mkdir -p src/github.com/mattermost/mattermost-webapp - mkdir -p src/github.com/mattermost/enterprise - """ - dir('src/github.com/mattermost/mattermost-server') { - checkout scm - } - dir('src/github.com/mattermost/mattermost-webapp') { - 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']]] - } - dir('src/github.com/mattermost/enterprise') { - 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']]] - } - dir('src/github.com/mattermost/enterprise') { - ansiColor('xterm') { - sh """ - #!/bin/bash -ex - git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout $env.CHANGE_TARGET || git checkout master || echo 1 - export EE_GIT_COMMIT=\$(git rev-parse HEAD) + stages { + stage('Setup') { + steps { + script { + utils.stopOldBuilds() + } + cleanWs notFailBuild: true + sh """ + mkdir -p src/github.com/mattermost/mattermost-server + mkdir -p src/github.com/mattermost/mattermost-webapp + mkdir -p src/github.com/mattermost/enterprise + """ + dir('src/github.com/mattermost/mattermost-server') { + checkout scm + } + dir('src/github.com/mattermost/mattermost-webapp') { + 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']]] + } + dir('src/github.com/mattermost/enterprise') { + 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']]] + } + dir('src/github.com/mattermost/enterprise') { + ansiColor('xterm') { + sh """ + #!/bin/bash -ex + git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout $env.CHANGE_TARGET || git checkout master || echo 1 + export EE_GIT_COMMIT=\$(git rev-parse HEAD) - echo EE Commit: \${EE_GIT_COMMIT} - """ - } - } - dir('src/github.com/mattermost/mattermost-webapp') { - withDockerContainer(args: '', image: 'mattermost/mattermost-build-webapp:oct-2-2018') { - ansiColor('xterm') { - sh """ - #!/bin/bash -ex - git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout $env.CHANGE_TARGET || git checkout master - rm -rf ./dist - export WEBAPP_GIT_COMMIT=\$(git rev-parse HEAD) + echo EE Commit: \${EE_GIT_COMMIT} + """ + } + } + dir('src/github.com/mattermost/mattermost-webapp') { + withDockerContainer(args: '', image: 'mattermost/mattermost-build-webapp:oct-2-2018') { + ansiColor('xterm') { + sh """ + #!/bin/bash -ex + git checkout $env.BRANCH_NAME || git checkout $env.CHANGE_BRANCH || git checkout $env.GIT_BRANCH || git checkout $env.CHANGE_TARGET || git checkout master + rm -rf ./dist + export WEBAPP_GIT_COMMIT=\$(git rev-parse HEAD) - echo Webapp Commit: \${WEBAPP_GIT_COMMIT} + echo Webapp Commit: \${WEBAPP_GIT_COMMIT} - 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 - """ - } - } - } - } - } + 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 + """ + } + } + } + } + } - stage('Check i18n') { - environment { - GOPATH = "/go" - } + stage('Check i18n') { + environment { + GOPATH = "/go" + } - steps { - withDockerContainer(args: '-u root --privileged -v ${WORKSPACE}/src:/go/src/', image: 'mattermost/mattermost-build-server:feb-28-2019') { - ansiColor('xterm') { - sh """ - cd /go/src/github.com/mattermost/mattermost-server - cp i18n/en.json /tmp/en.json - make i18n-extract - diff /tmp/en.json i18n/en.json - """ - } - } - } - } + steps { + withDockerContainer(args: '-u root --privileged -v ${WORKSPACE}/src:/go/src/', image: 'mattermost/mattermost-build-server:feb-28-2019') { + ansiColor('xterm') { + sh """ + cd /go/src/github.com/mattermost/mattermost-server + cp i18n/en.json /tmp/en.json + make i18n-extract + diff /tmp/en.json i18n/en.json + """ + } + } + } + } - stage('Build') { - environment { - GOPATH = "/go" - } + stage('Build') { + environment { + GOPATH = "/go" + } - steps { - withDockerContainer(args: '-u root --privileged -v ${WORKSPACE}/src:/go/src/', image: 'mattermost/mattermost-build-server:feb-28-2019') { - ansiColor('xterm') { - sh """ - cd /go/src/github.com/mattermost/mattermost-server - make config-reset - make check-style BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' - make build BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' - make package BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' - """ - } - } - } - } + steps { + withDockerContainer(args: '-u root --privileged -v ${WORKSPACE}/src:/go/src/', image: 'mattermost/mattermost-build-server:feb-28-2019') { + ansiColor('xterm') { + sh """ + cd /go/src/github.com/mattermost/mattermost-server + make config-reset + make check-style BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' + make build BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' + make package BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' + """ + } + } + } + } - stage('Test') { - environment { - GOPATH = "/go" - TEST_DATABASE_MYSQL_DSN = "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s" - TEST_DATABASE_POSTGRESQL_DSN = "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" - TEST_DATABASE_MYSQL_ROOT_PASSWD = "mostest" - CI_INBUCKET_HOST = "inbucket" - CI_MINIO_HOST = "minio" - CI_INBUCKET_PORT = "10080" - CI_MINIO_PORT = "9000" - CI_INBUCKET_SMTP_PORT = "10025" - CI_LDAP_HOST = "openldap" - IS_CI = true - MM_SQLSETTINGS_DATASOURCE = "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8" - MM_EMAILSETTINGS_SMTPSERVER = "inbucket" - MM_EMAILSETTINGS_SMTPPORT = "10025" - MM_ELASTICSEARCHSETTINGS_CONNECTIONURL = "http://elasticsearch:9200" - LDAP_DATA = "test" - } + stage('Push to S3') { + stages { + stage('Pull request') { + when { + allOf { + expression { env.CHANGE_ID != null } + expression { env.CHANGE_TARGET != null } + } + } + steps { + dir('src/github.com/mattermost/mattermost-server/dist') { + step([$class: 'S3BucketPublisher', dontWaitForConcurrentBuildCompletion: false, entries: [[ + bucket: "releases.mattermost.com/mattermost-platform-pr/${CHANGE_ID}", + excludedFile: '', + flatten: true, + gzipFiles: false, + keepForever: false, + managedArtifacts: false, + noUploadOnFailure: true, + selectedRegion: 'us-east-1', + showDirectlyInBrowser: false, + sourceFile: '*.tar.gz', + storageClass: 'STANDARD', + uploadFromSlave: false, + useServerSideEncryption: false, + userMetadata: [[key: 'Cache-Control', value: 'no-cache']] + ], [ + bucket: "releases.mattermost.com/mattermost-platform-pr/${CHANGE_BRANCH}", + excludedFile: '', + flatten: true, + gzipFiles: false, + keepForever: false, + managedArtifacts: false, + noUploadOnFailure: true, + selectedRegion: 'us-east-1', + showDirectlyInBrowser: false, + sourceFile: '*.tar.gz', + storageClass: 'STANDARD', + uploadFromSlave: false, + useServerSideEncryption: false, + userMetadata: [[key: 'Cache-Control', value: 'no-cache']] + ]], profileName: 'Releases', userMetadAta: []]) + } + } + } + stage('Branch') { + when { + expression { env.CHANGE_ID == null } + } + steps { + dir('src/github.com/mattermost/mattermost-server/dist') { + step([$class: 'S3BucketPublisher', dontWaitForConcurrentBuildCompletion: false, entries: [[ + bucket: "releases.mattermost.com/mattermost-platform-pr/${BRANCH_NAME}", + excludedFile: '', + flatten: true, + gzipFiles: false, + keepForever: false, + managedArtifacts: false, + noUploadOnFailure: true, + selectedRegion: 'us-east-1', + showDirectlyInBrowser: false, + sourceFile: '*.tar.gz', + storageClass: 'STANDARD', + uploadFromSlave: false, + useServerSideEncryption: false, + userMetadata: [[key: 'Cache-Control', value: 'no-cache']] + ]], profileName: 'Releases', userMetadAta: []]) + } + } + } + } + } - steps { - dir('src/github.com/mattermost/mattermost-server/build') { - ansiColor('xterm') { - sh """ - /usr/local/bin/docker-compose --no-ansi run --rm start_dependencies - /usr/local/bin/docker-compose --no-ansi ps - cat ../tests/${LDAP_DATA}-data.ldif | /usr/local/bin/docker-compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'; - """ - } - } + stage('Clean checkout') { + when { + expression { env.CHANGE_ID != null } + } + // We need to perform a clean checkout here to ge the original git commit hash from the PR + // Jenkins now merges master in top of the PR and this generate a new git hash + // We need to do that to build the docker image based on the original git commit and then this will be used by + // mattermod to update the test server. + steps { + sh """ + mkdir -p /tmp/mattermost-server + """ + dir('/tmp/mattermost-server') { + checkout([$class: 'GitSCM', branches: [[name: 'FETCH_HEAD']], + doGenerateSubmoduleConfigurations: false, extensions: [], + submoduleCfg: [], userRemoteConfigs: [ + [refspec: "+refs/pull/${CHANGE_ID}/head:refs/remotes/origin/PR-${CHANGE_ID}", + credentialsId: "310159d3-f7c5-4f5d-bfa1-151e3ef2db57",url: "https://github.com/mattermost/mattermost-server.git"]]]) + sh 'git rev-parse --short HEAD' + } + } + } - dir('src/github.com/mattermost/mattermost-server') { - ansiColor('xterm') { - sh """ - echo "Creating databases" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres sh -c 'exec echo "CREATE DATABASE migrated; CREATE DATABASE latest;" | exec psql -U mmuser mattermost_test' - echo "Importing postgres dump from version 5.0" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres psql -U mmuser -d migrated < \$(pwd)/scripts/mattermost-postgresql-5.0.sql - """ - } - } + stage('Build Docker Image') { + environment { + GIT_COMMIT_SHORT = sh( + script: "cd /tmp/mattermost-server && printf \$(git rev-parse --short HEAD)", + returnStdout: true + ) + } + when { + expression { env.CHANGE_ID != null } + } + steps { + dir('src/github.com/mattermost/mattermost-server') { + withCredentials([usernamePassword(credentialsId: 'matterbuild-docker-hub', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) { + sh 'docker login --username ${DOCKER_USER} --password ${DOCKER_PASS}' + sh """ + docker build --no-cache --build-arg MM_PACKAGE=https://releases.mattermost.com/mattermost-platform-pr/${CHANGE_ID}/mattermost-enterprise-linux-amd64.tar.gz -t mattermost/mattermost-enterprise-edition:${GIT_COMMIT_SHORT} build + docker push mattermost/mattermost-enterprise-edition:${GIT_COMMIT_SHORT} + docker logout + """ + } + } + } + } - withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:feb-28-2019') { - ansiColor('xterm') { - sh """ - cd /go/src/github.com/mattermost/mattermost-server - echo "Setting up config for db migration" - export MM_SQLSETTINGS_DATASOURCE=\"postgres://mmuser:mostest@postgres:5432/migrated?sslmode=disable&connect_timeout=10\" - export MM_SQLSETTINGS_DRIVERNAME=\"postgres\" - make ARGS="config get SqlSettings.DataSource" run-cli - echo "Running the migration" - make ARGS="version" run-cli + stage('Test') { + environment { + GOPATH = "/go" + TEST_DATABASE_MYSQL_DSN = "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s" + TEST_DATABASE_POSTGRESQL_DSN = "postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" + TEST_DATABASE_MYSQL_ROOT_PASSWD = "mostest" + CI_INBUCKET_HOST = "inbucket" + CI_MINIO_HOST = "minio" + CI_INBUCKET_PORT = "10080" + CI_MINIO_PORT = "9000" + CI_INBUCKET_SMTP_PORT = "10025" + CI_LDAP_HOST = "openldap" + IS_CI = true + MM_SQLSETTINGS_DATASOURCE = "mmuser:mostest@tcp(mysql:3306)/mattermost_test?charset=utf8mb4,utf8" + MM_EMAILSETTINGS_SMTPSERVER = "inbucket" + MM_EMAILSETTINGS_SMTPPORT = "10025" + MM_ELASTICSEARCHSETTINGS_CONNECTIONURL = "http://elasticsearch:9200" + LDAP_DATA = "test" + } - echo "Setting up config for fresh db setup" - export MM_SQLSETTINGS_DATASOURCE=\"postgres://mmuser:mostest@postgres:5432/latest?sslmode=disable&connect_timeout=10\" - make ARGS="config get SqlSettings.DataSource" run-cli + steps { + dir('src/github.com/mattermost/mattermost-server/build') { + ansiColor('xterm') { + sh """ + /usr/local/bin/docker-compose --no-ansi run --rm start_dependencies + /usr/local/bin/docker-compose --no-ansi ps + cat ../tests/${LDAP_DATA}-data.ldif | /usr/local/bin/docker-compose --no-ansi exec -T openldap bash -c 'ldapadd -x -D "cn=admin,dc=mm,dc=test,dc=com" -w mostest'; + """ + } + } - echo "Setting up fresh db" - make ARGS="version" run-cli - """ - } - } + dir('src/github.com/mattermost/mattermost-server') { + ansiColor('xterm') { + sh """ + echo "Creating databases" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres sh -c 'exec echo "CREATE DATABASE migrated; CREATE DATABASE latest;" | exec psql -U mmuser mattermost_test' + echo "Importing postgres dump from version 5.0" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres psql -U mmuser -d migrated < \$(pwd)/scripts/mattermost-postgresql-5.0.sql + """ + } + } + + withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:feb-28-2019') { + ansiColor('xterm') { + sh """ + cd /go/src/github.com/mattermost/mattermost-server + echo "Setting up config for db migration" + export MM_SQLSETTINGS_DATASOURCE=\"postgres://mmuser:mostest@postgres:5432/migrated?sslmode=disable&connect_timeout=10\" + export MM_SQLSETTINGS_DRIVERNAME=\"postgres\" + make ARGS="config get SqlSettings.DataSource" run-cli + echo "Running the migration" + make ARGS="version" run-cli + + echo "Setting up config for fresh db setup" + export MM_SQLSETTINGS_DATASOURCE=\"postgres://mmuser:mostest@postgres:5432/latest?sslmode=disable&connect_timeout=10\" + make ARGS="config get SqlSettings.DataSource" run-cli + + echo "Setting up fresh db" + make ARGS="version" run-cli + """ + } + } - dir('src/github.com/mattermost/mattermost-server') { - ansiColor('xterm') { - sh """ - echo "Generating dump" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres pg_dump --schema-only -d migrated -U mmuser > migrated.sql - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres pg_dump --schema-only -d latest -U mmuser > latest.sql + dir('src/github.com/mattermost/mattermost-server') { + ansiColor('xterm') { + sh """ + echo "Generating dump" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres pg_dump --schema-only -d migrated -U mmuser > migrated.sql + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres pg_dump --schema-only -d latest -U mmuser > latest.sql - echo "Removing databases created for db comparison" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres sh -c \'exec echo \"DROP DATABASE migrated; DROP DATABASE latest;\" | exec psql -U mmuser mattermost_test\' + echo "Removing databases created for db comparison" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T postgres sh -c \'exec echo \"DROP DATABASE migrated; DROP DATABASE latest;\" | exec psql -U mmuser mattermost_test\' - echo "Generating diff" - diff migrated.sql latest.sql > diff.txt - export diffErrorCode=\$? + echo "Generating diff" + diff migrated.sql latest.sql > diff.txt + export diffErrorCode=\$? - if [ \$diffErrorCode -eq 0 ]; then echo \"Both schemas are same\";else cat diff.txt; fi + if [ \$diffErrorCode -eq 0 ]; then echo \"Both schemas are same\";else cat diff.txt; fi - exit \$diffErrorCode - """ - } - } + exit \$diffErrorCode + """ + } + } - dir('src/github.com/mattermost/mattermost-server') { - ansiColor('xterm') { - sh """ - echo "Creating databases" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysql -uroot -pmostest -e \"CREATE DATABASE migrated; CREATE DATABASE latest; GRANT ALL PRIVILEGES ON migrated.* TO mmuser; GRANT ALL PRIVILEGES ON latest.* TO mmuser\" - echo "Importing mysql dump from version 5.0" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysql -D migrated -uroot -pmostest < \$(pwd)/scripts/mattermost-mysql-5.0.sql - """ - } - } + dir('src/github.com/mattermost/mattermost-server') { + ansiColor('xterm') { + sh """ + echo "Creating databases" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysql -uroot -pmostest -e \"CREATE DATABASE migrated; CREATE DATABASE latest; GRANT ALL PRIVILEGES ON migrated.* TO mmuser; GRANT ALL PRIVILEGES ON latest.* TO mmuser\" + echo "Importing mysql dump from version 5.0" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysql -D migrated -uroot -pmostest < \$(pwd)/scripts/mattermost-mysql-5.0.sql + """ + } + } - withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:feb-28-2019') { - ansiColor('xterm') { - sh """ - cd /go/src/github.com/mattermost/mattermost-server - echo "Setting up config for db migration" - export MM_SQLSETTINGS_DATASOURCE=\"mmuser:mostest@tcp(mysql:3306)/migrated?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s\" - export MM_SQLSETTINGS_DRIVERNAME=\"mysql\" - make ARGS="config get SqlSettings.DataSource" run-cli - echo "Running the migration" - make ARGS="version" run-cli + withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:feb-28-2019') { + ansiColor('xterm') { + sh """ + cd /go/src/github.com/mattermost/mattermost-server + echo "Setting up config for db migration" + export MM_SQLSETTINGS_DATASOURCE=\"mmuser:mostest@tcp(mysql:3306)/migrated?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s\" + export MM_SQLSETTINGS_DRIVERNAME=\"mysql\" + make ARGS="config get SqlSettings.DataSource" run-cli + echo "Running the migration" + make ARGS="version" run-cli - echo "Setting up config for fresh db setup" - export MM_SQLSETTINGS_DATASOURCE=\"mmuser:mostest@tcp(mysql:3306)/latest?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s\" - make ARGS="config get SqlSettings.DataSource" run-cli + echo "Setting up config for fresh db setup" + export MM_SQLSETTINGS_DATASOURCE=\"mmuser:mostest@tcp(mysql:3306)/latest?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s\" + make ARGS="config get SqlSettings.DataSource" run-cli - echo "Setting up fresh db" - make ARGS="version" run-cli - """ - } - } + echo "Setting up fresh db" + make ARGS="version" run-cli + """ + } + } - dir('src/github.com/mattermost/mattermost-server') { - ansiColor('xterm') { - sh """ - echo "Generating dump" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysqldump --skip-opt --no-data --compact -u root -pmostest migrated > migrated.sql - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysqldump --skip-opt --no-data --compact -u root -pmostest latest > latest.sql + dir('src/github.com/mattermost/mattermost-server') { + ansiColor('xterm') { + sh """ + echo "Generating dump" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysqldump --skip-opt --no-data --compact -u root -pmostest migrated > migrated.sql + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysqldump --skip-opt --no-data --compact -u root -pmostest latest > latest.sql - echo "Removing databases created for db comparison" - /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysql -uroot -pmostest -e \"DROP DATABASE migrated; DROP DATABASE latest\" + echo "Removing databases created for db comparison" + /usr/local/bin/docker-compose --no-ansi -f build/docker-compose.yml exec -T mysql mysql -uroot -pmostest -e \"DROP DATABASE migrated; DROP DATABASE latest\" - echo "Generating diff" - diff migrated.sql latest.sql > diff.txt - export diffErrorCode=\$? + echo "Generating diff" + diff migrated.sql latest.sql > diff.txt + export diffErrorCode=\$? - if [ \$diffErrorCode -eq 0 ]; then echo \"Both schemas are same\";else cat diff.txt; fi + if [ \$diffErrorCode -eq 0 ]; then echo \"Both schemas are same\";else cat diff.txt; fi - exit \$diffErrorCode - """ - } - } + exit \$diffErrorCode + """ + } + } - withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:feb-28-2019') { - ansiColor('xterm') { - sh """ - cd /go/src/github.com/mattermost/mattermost-server + withDockerContainer(args: "-u root --privileged --net ${COMPOSE_PROJECT_NAME}_mm-test -v ${WORKSPACE}/src:/go/src/", image: 'mattermost/mattermost-build-server:feb-28-2019') { + ansiColor('xterm') { + sh """ + cd /go/src/github.com/mattermost/mattermost-server - mkdir -p client/plugins - cat config/config.json + mkdir -p client/plugins + cat config/config.json - make test-server BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' TESTFLAGS= TESTFLAGSEE= - """ - } - withCredentials([string(credentialsId: 'CODECOV_TOKEN', variable: 'CODECOV')]) { - sh ''' - cd /go/src/github.com/mattermost/mattermost-server - curl -s https://codecov.io/bash | bash -s - -t $CODECOV || echo 'Codecov failed to upload' - ''' - } - } - } - } + make test-server BUILD_NUMBER='${BRANCH_NAME}-${BUILD_NUMBER}' TESTFLAGS= TESTFLAGSEE= + """ + } + withCredentials([string(credentialsId: 'CODECOV_TOKEN', variable: 'CODECOV')]) { + sh ''' + cd /go/src/github.com/mattermost/mattermost-server + curl -s https://codecov.io/bash | bash -s - -t $CODECOV || echo 'Codecov failed to upload' + ''' + } + } + } + } + } - stage('Push to S3') { - stages { - stage('Pull request') { - when { - allOf { - expression { env.CHANGE_ID != null } - expression { env.CHANGE_TARGET != null } - } - } - steps { - dir('src/github.com/mattermost/mattermost-server/dist') { - step([$class: 'S3BucketPublisher', dontWaitForConcurrentBuildCompletion: false, entries: [[ - bucket: "releases.mattermost.com/mattermost-platform-pr/${CHANGE_ID}", - excludedFile: '', - flatten: true, - gzipFiles: false, - keepForever: false, - managedArtifacts: false, - noUploadOnFailure: true, - selectedRegion: 'us-east-1', - showDirectlyInBrowser: false, - sourceFile: '*.tar.gz', - storageClass: 'STANDARD', - uploadFromSlave: false, - useServerSideEncryption: false, - userMetadata: [[key: 'Cache-Control', value: 'no-cache']] - ], [ - bucket: "releases.mattermost.com/mattermost-platform-pr/${CHANGE_BRANCH}", - excludedFile: '', - flatten: true, - gzipFiles: false, - keepForever: false, - managedArtifacts: false, - noUploadOnFailure: true, - selectedRegion: 'us-east-1', - showDirectlyInBrowser: false, - sourceFile: '*.tar.gz', - storageClass: 'STANDARD', - uploadFromSlave: false, - useServerSideEncryption: false, - userMetadata: [[key: 'Cache-Control', value: 'no-cache']] - ]], profileName: 'Releases', userMetadAta: []]) - } - } - } - stage('Branch') { - when { - expression { env.CHANGE_ID == null } - } - steps { - dir('src/github.com/mattermost/mattermost-server/dist') { - step([$class: 'S3BucketPublisher', dontWaitForConcurrentBuildCompletion: false, entries: [[ - bucket: "releases.mattermost.com/mattermost-platform-pr/${BRANCH_NAME}", - excludedFile: '', - flatten: true, - gzipFiles: false, - keepForever: false, - managedArtifacts: false, - noUploadOnFailure: true, - selectedRegion: 'us-east-1', - showDirectlyInBrowser: false, - sourceFile: '*.tar.gz', - storageClass: 'STANDARD', - uploadFromSlave: false, - useServerSideEncryption: false, - userMetadata: [[key: 'Cache-Control', value: 'no-cache']] - ]], profileName: 'Releases', userMetadAta: []]) - } - } - } - } - } + post { + always { + dir('src/github.com/mattermost/mattermost-server') { + junit allowEmptyResults: true, healthScaleFactor: 0.0, testResults: 'report*.xml' + archiveArtifacts 'report*.xml' + } + dir('src/github.com/mattermost/mattermost-server/build') { + ansiColor('xterm') { + sh """ + # Capture docker logs + docker-compose logs --tail="all" -t --no-color > docker-compose_logs + docker ps -a --no-trunc > docker_ps + docker stats -a --no-stream > docker_stats + tar -czvf docker_logs.tar.gz docker-compose_logs docker_ps docker_stats - stage('Clean checkout') { - when { - expression { env.CHANGE_ID != null } - } - // We need to perform a clean checkout here to ge the original git commit hash from the PR - // Jenkins now merges master in top of the PR and this generate a new git hash - // We need to do that to build the docker image based on the original git commit and then this will be used by - // mattermod to update the test server. - steps { - sh """ - mkdir -p /tmp/mattermost-server - """ - dir('/tmp/mattermost-server') { - checkout([$class: 'GitSCM', branches: [[name: 'FETCH_HEAD']], - doGenerateSubmoduleConfigurations: false, extensions: [], - submoduleCfg: [], userRemoteConfigs: [ - [refspec: "+refs/pull/${CHANGE_ID}/head:refs/remotes/origin/PR-${CHANGE_ID}", - credentialsId: "310159d3-f7c5-4f5d-bfa1-151e3ef2db57",url: "https://github.com/mattermost/mattermost-server.git"]]]) - sh 'git rev-parse --short HEAD' - } - } - } - - stage('Build Docker Image') { - environment { - GIT_COMMIT_SHORT = sh( - script: "cd /tmp/mattermost-server && printf \$(git rev-parse --short HEAD)", - returnStdout: true - ) - } - when { - expression { env.CHANGE_ID != null } - } - steps { - dir('src/github.com/mattermost/mattermost-server') { - withCredentials([usernamePassword(credentialsId: 'matterbuild-docker-hub', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) { - sh 'docker login --username ${DOCKER_USER} --password ${DOCKER_PASS}' - sh """ - docker build --no-cache --build-arg MM_PACKAGE=https://releases.mattermost.com/mattermost-platform-pr/${CHANGE_ID}/mattermost-enterprise-linux-amd64.tar.gz -t mattermost/mattermost-enterprise-edition:${GIT_COMMIT_SHORT} build - docker push mattermost/mattermost-enterprise-edition:${GIT_COMMIT_SHORT} - docker logout - """ - } - } - } - } - } - - post { - always { - dir('src/github.com/mattermost/mattermost-server') { - junit allowEmptyResults: true, healthScaleFactor: 0.0, testResults: 'report*.xml' - archiveArtifacts 'report*.xml' - } - dir('src/github.com/mattermost/mattermost-server/build') { - ansiColor('xterm') { - sh """ - # Capture docker logs - docker-compose logs --tail="all" -t --no-color > docker-compose_logs - docker ps -a --no-trunc > docker_ps - docker stats -a --no-stream > docker_stats - tar -czvf docker_logs.tar.gz docker-compose_logs docker_ps docker_stats - - docker-compose --no-ansi down -v - """ - } - archiveArtifacts 'docker_logs.tar.gz' - } - } - cleanup { - cleanWs notFailBuild: true - } - } + docker-compose --no-ansi down -v + """ + } + archiveArtifacts 'docker_logs.tar.gz' + } + } + cleanup { + cleanWs notFailBuild: true + } + } }