From ca42638ab3ee0c19f20ebb8d801ec7195e4790ee Mon Sep 17 00:00:00 2001 From: Joe Green Date: Fri, 11 Aug 2017 11:09:41 +0100 Subject: [PATCH 1/3] Create Jenkinsfile --- services/docstore/Jenkinsfile | 83 +++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 services/docstore/Jenkinsfile diff --git a/services/docstore/Jenkinsfile b/services/docstore/Jenkinsfile new file mode 100644 index 0000000000..8fc9e5251b --- /dev/null +++ b/services/docstore/Jenkinsfile @@ -0,0 +1,83 @@ +pipeline { + + agent { + docker { + image 'node:4.2.1' + args "-v /var/lib/jenkins/.npm:/tmp/.npm" + } + } + + environment { + HOME = "/tmp" + } + + triggers { + pollSCM('* * * * *') + cron('@daily') + } + + stages { + stage('Set up') { + steps { + // we need to disable logallrefupdates, else git clones during the npm install will require git to lookup the user id + // which does not exist in the container's /etc/passwd file, causing the clone to fail. + sh 'git config --global core.logallrefupdates false' + } + } + stage('Install') { + steps { + sh 'rm -fr node_modules' + sh 'npm install' + sh 'npm rebuild' + sh 'npm install --quiet grunt-cli' + } + } + stage('Compile') { + steps { + sh 'node_modules/.bin/grunt install' + } + } + stage('Test') { + steps { + sh 'NODE_ENV=development node_modules/.bin/grunt test:unit' + } + } + stage('Acceptance Tests') { + steps { + echo "TODO - Run Acceptance Tests" + //sh 'docker run -v "$(pwd):/app" --rm sl-acceptance-test-runner' + } + } + stage('Package') { + steps { + sh 'touch build.tar.gz' // Avoid tar warning about files changing during read + sh 'tar -czf build.tar.gz --exclude=build.tar.gz --exclude-vcs .' + } + } + stage('Publish') { + steps { + withAWS(credentials:'S3_CI_BUILDS_AWS_KEYS', region:"${S3_REGION_BUILD_ARTEFACTS}") { + s3Upload(file:'build.tar.gz', bucket:"${S3_BUCKET_BUILD_ARTEFACTS}", path:"${JOB_NAME}/${BUILD_NUMBER}.tar.gz") + } + } + } + } + + post { + failure { + mail(from: "${EMAIL_ALERT_FROM}", + to: "${EMAIL_ALERT_TO}", + subject: "Jenkins build failed: ${JOB_NAME}:${BUILD_NUMBER}", + body: "Build: ${BUILD_URL}") + } + } + + // The options directive is for configuration that applies to the whole job. + options { + // we'd like to make sure remove old builds, so we don't fill up our storage! + buildDiscarder(logRotator(numToKeepStr:'50')) + + // And we'd really like to be sure that this build doesn't hang forever, so let's time it out after: + timeout(time: 30, unit: 'MINUTES') + } +} From 26ab98f04ad23ab5306564a38bc4020111de441f Mon Sep 17 00:00:00 2001 From: Joe Green Date: Mon, 14 Aug 2017 15:34:34 +0100 Subject: [PATCH 2/3] run acceptance tests --- services/docstore/Jenkinsfile | 56 ++++++++++++++++------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/services/docstore/Jenkinsfile b/services/docstore/Jenkinsfile index 8fc9e5251b..4e2760b794 100644 --- a/services/docstore/Jenkinsfile +++ b/services/docstore/Jenkinsfile @@ -1,51 +1,47 @@ pipeline { + + agent any - agent { - docker { - image 'node:4.2.1' - args "-v /var/lib/jenkins/.npm:/tmp/.npm" - } - } - - environment { - HOME = "/tmp" - } - triggers { pollSCM('* * * * *') cron('@daily') } stages { - stage('Set up') { + stage('Install') { + agent { + docker { + image 'node:4.2.1' + args "-v /var/lib/jenkins/.npm:/tmp/.npm -e HOME=/tmp" + reuseNode true + } + } steps { // we need to disable logallrefupdates, else git clones during the npm install will require git to lookup the user id // which does not exist in the container's /etc/passwd file, causing the clone to fail. sh 'git config --global core.logallrefupdates false' - } - } - stage('Install') { - steps { sh 'rm -fr node_modules' - sh 'npm install' - sh 'npm rebuild' + sh 'npm install && npm rebuild' sh 'npm install --quiet grunt-cli' } } - stage('Compile') { + stage('Compile and Test') { + agent { + docker { + image 'node:4.2.1' + reuseNode true + } + } steps { sh 'node_modules/.bin/grunt install' - } - } - stage('Test') { - steps { + sh 'node_modules/.bin/grunt compile:acceptance_tests' sh 'NODE_ENV=development node_modules/.bin/grunt test:unit' } } stage('Acceptance Tests') { steps { - echo "TODO - Run Acceptance Tests" - //sh 'docker run -v "$(pwd):/app" --rm sl-acceptance-test-runner' + sh 'docker pull sharelatex/acceptance-test-runner' + sh 'docker run --rm -v $(pwd):/app sharelatex/acceptance-test-runner' } } stage('Package') { @@ -62,21 +58,21 @@ pipeline { } } } - + post { failure { - mail(from: "${EMAIL_ALERT_FROM}", - to: "${EMAIL_ALERT_TO}", + mail(from: "${EMAIL_ALERT_FROM}", + to: "${EMAIL_ALERT_TO}", subject: "Jenkins build failed: ${JOB_NAME}:${BUILD_NUMBER}", body: "Build: ${BUILD_URL}") } } - + // The options directive is for configuration that applies to the whole job. options { // we'd like to make sure remove old builds, so we don't fill up our storage! buildDiscarder(logRotator(numToKeepStr:'50')) - + // And we'd really like to be sure that this build doesn't hang forever, so let's time it out after: timeout(time: 30, unit: 'MINUTES') } From 172060c06653bcae82bcdfe5c91f237c64026841 Mon Sep 17 00:00:00 2001 From: Joe Green Date: Mon, 14 Aug 2017 15:44:40 +0100 Subject: [PATCH 3/3] Use correct env vars --- services/docstore/Jenkinsfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/docstore/Jenkinsfile b/services/docstore/Jenkinsfile index 4e2760b794..57601daec9 100644 --- a/services/docstore/Jenkinsfile +++ b/services/docstore/Jenkinsfile @@ -41,7 +41,9 @@ pipeline { stage('Acceptance Tests') { steps { sh 'docker pull sharelatex/acceptance-test-runner' - sh 'docker run --rm -v $(pwd):/app sharelatex/acceptance-test-runner' + withCredentials([usernamePassword(credentialsId: 'S3_DOCSTORE_TEST_AWS_KEYS', passwordVariable: 'AWS_SECRET', usernameVariable: 'AWS_ID')]) { + sh 'docker run --rm -e AWS_BUCKET="sl-doc-archive-testing" -e AWS_ACCESS_KEY_ID=$AWS_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET -v $(pwd):/app sharelatex/acceptance-test-runner' + } } } stage('Package') {