summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoan Touzet <joant@atypical.net>2019-12-04 17:55:37 -0500
committerJoan Touzet <joant@atypical.net>2019-12-11 18:14:22 -0500
commit89cfbce7611c1f9909c2e4932ab6f249bf928a0f (patch)
tree29c4ea817fd4174878c2f3f8c8f4a8eb94d5e7dd
parentcda94302d7b1462061cc0ae14a1c714950b61d61 (diff)
downloadcouchdb-jenkins-mini-test.tar.gz
Add mini Jenkins build (1 platform only)jenkins-mini-test
-rw-r--r--build-aux/Jenkinsfile.mini244
1 files changed, 244 insertions, 0 deletions
diff --git a/build-aux/Jenkinsfile.mini b/build-aux/Jenkinsfile.mini
new file mode 100644
index 000000000..e7c51ec9d
--- /dev/null
+++ b/build-aux/Jenkinsfile.mini
@@ -0,0 +1,244 @@
+#!groovy
+//
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+// DRYing out the Jenkinsfile...
+
+build_and_test = '''
+mkdir -p ${COUCHDB_IO_LOG_DIR}
+rm -rf build
+mkdir build
+cd build
+tar -xf ${WORKSPACE}/apache-couchdb-*.tar.gz
+cd apache-couchdb-*
+./configure --with-curl
+make check || (build-aux/logfile-uploader.py && false)
+'''
+
+make_packages = '''
+git clone https://github.com/apache/couchdb-pkg
+rm -rf couchdb
+mkdir couchdb
+cp ${WORKSPACE}/apache-couchdb-*.tar.gz couchdb
+tar -xf ${WORKSPACE}/apache-couchdb-*.tar.gz -C couchdb
+cd couchdb-pkg
+make ${platform} PLATFORM=${platform}
+'''
+
+cleanup_and_save = '''
+rm -rf ${WORKSPACE}/pkgs/${platform}
+mkdir -p ${WORKSPACE}/pkgs/${platform}
+mv ${WORKSPACE}/rpmbuild/RPMS/$(arch)/*rpm ${WORKSPACE}/pkgs/${platform} || true
+mv ${WORKSPACE}/couchdb/*.deb ${WORKSPACE}/pkgs/${platform} || true
+'''
+
+pipeline {
+
+ //agent {
+ // label 'ubuntu'
+ //}
+ agent any
+
+ environment {
+ COUCHAUTH = credentials('couchdb_vm2_couchdb')
+ recipient = 'notifications@couchdb.apache.org'
+ COUCHDB_IO_LOG_DIR = '/tmp/couchjslogs'
+ // Following fix an issue with git <= 2.6.5 where no committer
+ // name or email are present for reflog, required for git clone
+ GIT_COMMITTER_NAME = 'Jenkins User'
+ GIT_COMMITTER_EMAIL = 'couchdb@apache.org'
+ }
+
+ options {
+ buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '10'))
+ // This fails the build immediately if any parallel step fails
+ parallelsAlwaysFailFast()
+ preserveStashes(buildCount: 10)
+ timeout(time: 3, unit: 'HOURS')
+ }
+
+ stages {
+ stage('Build Release Tarball') {
+ agent {
+ // https://github.com/jenkins-infra/jenkins.io/blob/master/Jenkinsfile#64
+ // We need the jenkins user mapped inside of the image
+ // npm config cache below is required because /home/jenkins doesn't
+ // ACTUALLY exist in the image
+ docker {
+ image 'couchdbdev/debian-stretch-erlang-19.3.6:latest'
+ alwaysPull true
+ args '-e npm_config_cache=npm-cache -e HOME=. -v=/etc/passwd:/etc/passwd -v /etc/group:/etc/group'
+ }
+ }
+ options {
+ timeout(time: 15, unit: "MINUTES")
+ }
+ steps {
+ sh '''
+ set
+ rm -rf apache-couchdb-*
+ ./configure --with-curl
+ make dist
+ chmod -R a+w * .
+ '''
+ }
+ post {
+ success {
+ stash includes: 'apache-couchdb-*.tar.gz', name: 'tarball'
+ archiveArtifacts artifacts: 'apache-couchdb-*.tar.gz', fingerprint: true
+ }
+ cleanup {
+ // UGH see https://issues.jenkins-ci.org/browse/JENKINS-41894
+ sh 'rm -rf ${WORKSPACE}/*'
+ }
+ }
+ } // stage Build Release Tarball
+
+ // TODO Rework once Improved Docker Pipeline Engine is released
+ // https://issues.jenkins-ci.org/browse/JENKINS-47962
+ // https://issues.jenkins-ci.org/browse/JENKINS-48050
+
+ stage('Test and Package') {
+
+ agent {
+ docker {
+ image 'couchdbdev/debian-stretch-erlang-19.3.6:latest'
+ alwaysPull true
+ //label 'ubuntu'
+ customWorkspace pwd() + '/stretch'
+ }
+ }
+ options {
+ skipDefaultCheckout()
+ timeout(time: 90, unit: "MINUTES")
+ }
+ environment {
+ platform = 'stretch'
+ }
+ stages {
+ stage('Build from tarball & test') {
+ steps {
+ unstash 'tarball'
+ sh( script: build_and_test )
+ }
+ post {
+ always {
+ junit '**/.eunit/*.xml, **/_build/*/lib/couchdbtest/*.xml, **/src/mango/nosetests.xml'
+ }
+ }
+ }
+ stage('Build CouchDB packages') {
+ steps {
+ sh( script: make_packages )
+ sh( script: cleanup_and_save )
+ }
+ post {
+ success {
+ archiveArtifacts artifacts: 'pkgs/**', fingerprint: true
+ }
+ }
+ }
+ } // stages
+ post {
+ cleanup {
+ sh 'rm -rf ${WORKSPACE}/*'
+ }
+ } // post
+ } // stage "Test and Package"
+
+ stage('Publish') {
+
+ when {
+ expression { return env.BRANCH_NAME ==~ /master|2.0.x|2.1.x|jenkins-.*/ }
+ }
+
+ agent {
+ docker {
+ image 'couchdbdev/debian-stretch-erlang-19.3.6:latest'
+ alwaysPull true
+ args '-e npm_config_cache=npm-cache -e HOME=. -v=/etc/passwd:/etc/passwd -v /etc/group:/etc/group'
+ //label 'ubuntu'
+ }
+ }
+ options {
+ skipDefaultCheckout()
+ timeout(time: 90, unit: "MINUTES")
+ }
+
+ steps {
+ withCredentials([sshUserPrivateKey(credentialsId: 'jenkins-key', keyFileVariable: 'SSH_KEY')]) {
+ sh 'rm -rf ${WORKSPACE}/*'
+ unstash 'tarball'
+ unarchive mapping: ['pkgs/' : '.']
+
+ echo 'Retrieving & cleaning current couchdb-vm2 tree...'
+ sh '''
+ rsync -avz -e "ssh -o StrictHostKeyChecking=no -i $SSH_KEY" jenkins@couchdb-vm2.apache.org:/var/www/html/$BRANCH_NAME . || mkdir -p $BRANCH_NAME
+ rm -rf $BRANCH_NAME/debian/* $BRANCH_NAME/el6/* $BRANCH_NAME/el7/*
+ mkdir -p $BRANCH_NAME/debian $BRANCH_NAME/el6 $BRANCH_NAME/el7 $BRANCH_NAME/source
+ rsync -avz -e "ssh -o StrictHostKeyChecking=no -i $SSH_KEY" jenkins@couchdb-vm2.apache.org:/var/www/html/js .
+ '''
+
+ echo 'Building Debian repo...'
+ sh '''
+ git clone https://github.com/apache/couchdb-pkg
+ cp js/debian-stretch/*.deb pkgs/stretch
+ reprepro -b couchdb-pkg/repo includedeb stretch pkgs/stretch/*.deb
+ '''
+
+ echo 'Building tree to upload...'
+ sh '''
+ mv couchdb-pkg/repo/pool $BRANCH_NAME/debian
+ mv couchdb-pkg/repo/dists $BRANCH_NAME/debian
+ mv apache-couchdb-*.tar.gz $BRANCH_NAME/source
+ cd $BRANCH_NAME/source
+ ls -1tr | head -n -10 | xargs -d '\n' rm -f --
+ cd ../..
+ '''
+
+ echo 'rsyncing tree to couchdb-vm2...'
+ sh '''
+ rsync -avz --delete -e "ssh -o StrictHostKeyChecking=no -i $SSH_KEY" $BRANCH_NAME jenkins@couchdb-vm2.apache.org:/var/www/html
+ rm -rf $BRANCH_NAME couchdb-pkg *.tar.gz
+ '''
+ } // withCredentials
+ } // steps
+ } // stage
+ } // stages
+
+ post {
+ success {
+ mail to: "${env.recipient}",
+ replyTo: "${env.recipient}",
+ subject: "[Jenkins] Mini build SUCCESS: ${currentBuild.fullDisplayName}",
+ body: "Yay, we passed. ${env.RUN_DISPLAY_URL}"
+ }
+ unstable {
+ mail to: "${env.recipient}",
+ replyTo: "${env.recipient}",
+ subject: "[Jenkins] Mini build SUCCESS: ${currentBuild.fullDisplayName}",
+ body: "Eep! Build is unstable... ${env.RUN_DISPLAY_URL}"
+ }
+ failure {
+ mail to: "${env.recipient}",
+ replyTo: "${env.recipient}",
+ subject: "[Jenkins] Mini build FAILURE: ${currentBuild.fullDisplayName}",
+ body: "Boo, we failed. ${env.RUN_DISPLAY_URL}"
+ }
+ cleanup {
+ sh 'rm -rf ${COUCHDB_IO_LOG_DIR}'
+ }
+ }
+
+} // pipeline