From 1146253c0ab82ab384ecd648af48f02ffaa41161 Mon Sep 17 00:00:00 2001 From: Joe Green Date: Fri, 11 Aug 2017 11:06:36 +0100 Subject: [PATCH 1/3] Create Jenkinsfile --- services/document-updater/Jenkinsfile | 83 +++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 services/document-updater/Jenkinsfile diff --git a/services/document-updater/Jenkinsfile b/services/document-updater/Jenkinsfile new file mode 100644 index 0000000000..a2150d086b --- /dev/null +++ b/services/document-updater/Jenkinsfile @@ -0,0 +1,83 @@ +pipeline { + + agent { + docker { + image 'node:4.2.6' + 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 compile' + } + } + 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 b1a7f779d1d1d1016c1aec7e1708f91f9a80e130 Mon Sep 17 00:00:00 2001 From: Joe Green Date: Mon, 14 Aug 2017 15:28:04 +0100 Subject: [PATCH 2/3] add acceptance tests --- services/document-updater/Jenkinsfile | 56 +++++++++++++-------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/services/document-updater/Jenkinsfile b/services/document-updater/Jenkinsfile index a2150d086b..a1852639b1 100644 --- a/services/document-updater/Jenkinsfile +++ b/services/document-updater/Jenkinsfile @@ -1,51 +1,47 @@ pipeline { + + agent any - agent { - docker { - image 'node:4.2.6' - 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 compile' - } - } - 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 0e8ce294146d6a6f96dbaea93715018fb2d1c47a Mon Sep 17 00:00:00 2001 From: Joe Green Date: Mon, 14 Aug 2017 15:33:30 +0100 Subject: [PATCH 3/3] compile acceptance tests --- services/document-updater/Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/document-updater/Jenkinsfile b/services/document-updater/Jenkinsfile index a1852639b1..e798bbaa51 100644 --- a/services/document-updater/Jenkinsfile +++ b/services/document-updater/Jenkinsfile @@ -34,7 +34,7 @@ pipeline { } steps { sh 'node_modules/.bin/grunt compile' - // sh 'node_modules/.bin/grunt compile:acceptance_tests' + sh 'node_modules/.bin/grunt compile:acceptance_tests' sh 'NODE_ENV=development node_modules/.bin/grunt test:unit' } }