#!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. build_and_test = ''' mkdir -p ${COUCHDB_IO_LOG_DIR} ${ERLANG_VERSION} cd ${ERLANG_VERSION} rm -rf build mkdir build cd build tar -xf ${WORKSPACE}/apache-couchdb-*.tar.gz cd apache-couchdb-* . /usr/local/kerl/${ERLANG_VERSION}/activate ./configure --spidermonkey-version 60 make check || (make build-report && false) ''' pipeline { // no top-level agent; agents must be declared for each stage agent none 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' // Parameters for the matrix build DOCKER_IMAGE = 'apache/couchdbci-debian:buster-erlang-all' // 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 deals with /home/jenkins not mapping correctly // inside the image DOCKER_ARGS = '-e npm_config_cache=npm-cache -e HOME=. -v=/etc/passwd:/etc/passwd -v /etc/group:/etc/group' // *** BE SURE TO ALSO CHANGE THE ERLANG VERSIONS FARTHER DOWN *** // Search for ERLANG_VERSION // see https://issues.jenkins.io/browse/JENKINS-61047 for why this cannot // be done parametrically LOW_ERLANG_VER = '20.3.8.26' } 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') timestamps() } stages { stage('Build Release Tarball') { agent { docker { image "${DOCKER_IMAGE}" label 'docker' args "${DOCKER_ARGS}" registryUrl 'https://docker.io/' registryCredentialsId 'dockerhub_creds' } } options { timeout(time: 15, unit: "MINUTES") } steps { sh ''' set rm -rf apache-couchdb-* . /usr/local/kerl/${LOW_ERLANG_VER}/activate ./configure make dist chmod -R a+w * . ''' } post { success { stash includes: 'apache-couchdb-*.tar.gz', name: 'tarball' } 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('Make Check') { matrix { axes { axis { name 'ERLANG_VERSION' values '20.3.8.26', '21.3.8.22', '22.3.4.17', '23.3.1' } } stages { stage('Build and Test') { agent { docker { image "${DOCKER_IMAGE}" label 'docker' args "${DOCKER_ARGS}" } } options { skipDefaultCheckout() timeout(time: 90, unit: "MINUTES") } steps { unstash 'tarball' sh( script: build_and_test ) } post { always { junit '**/.eunit/*.xml, **/_build/*/lib/couchdbtest/*.xml, **/src/mango/nosetests.xml, **/test/javascript/junit.xml' } cleanup { sh 'rm -rf ${WORKSPACE}/* ${COUCHDB_IO_LOG_DIR}' } } } // stage } // stages } // matrix } // stage "Make Check" } // stages } // pipeline