evergreen/Jenkinsfile

187 lines
5.3 KiB
Groovy

pipeline {
agent { label 'linux' }
options {
timeout(time: 1, unit: 'HOURS')
buildDiscarder(logRotator(daysToKeepStr: '10'))
timestamps()
}
triggers {
pollSCM('H * * * *')
}
environment {
// Squid is enabled by default in the dev environment
DISABLE_PROXY_CACHE = 'true'
}
stages {
stage('Prepare Workspace') {
steps {
sh 'make clean || true'
}
}
stage('Lint code') {
steps {
sh 'make lint'
}
}
stage('Validate essentials.yaml') {
steps {
dir('services') {
sh 'make generate-essentials && git diff --quiet essentials.yaml'
}
}
post {
failure {
echo 'Please ensure that updates to essentials.yaml are committed!'
}
always {
archiveArtifacts artifacts: 'services/essentials.yaml', fingerprint: true
}
}
}
stage('Prepare ingest') {
steps {
sh 'make -C services generate-ingest'
}
post {
success {
archiveArtifacts artifacts: 'services/ingest.json', fingerprint: true
}
}
}
stage('Verifications') {
parallel {
stage('Evergreen Client') {
steps {
sh 'make -C distribution/client check'
}
post {
success {
archiveArtifacts 'distribution/client/coverage/**'
}
}
}
stage('Backend Services') {
steps {
sh 'make -C services check'
}
post {
success {
archiveArtifacts 'services/coverage/**'
}
cleanup {
sh 'make -C services stop'
}
}
}
}
}
stage('Build Distribution') {
steps {
sh 'make -C distribution distribution'
}
post {
success {
archiveArtifacts artifacts: 'distribution/build/*.zip', fingerprint: true
}
}
}
stage('Build images') {
parallel {
stage('jenkins/evergreen') {
environment {
// Since tests have already been successfully run, skip them
SKIP_TESTS = 'true'
}
steps {
sh 'make -C distribution container'
}
}
stage('jenkinsciinfra/evergreen-backend') {
environment {
// Since tests have already been successfully run, skip them
SKIP_TESTS = 'true'
}
steps {
sh 'make -C services container'
}
}
}
post {
cleanup {
sh 'make -C services stop'
}
}
}
stage('Test images') {
environment {
// Since tests have already been successfully run, skip them
SKIP_TESTS = 'true'
}
parallel {
stage('Docker Cloud image') {
agent { label 'linux' }
steps {
sh 'make -C distribution clean docker-cloud-container-check'
}
post {
always {
archiveArtifacts artifacts: '**/build/tests-run*/**'
}
}
}
stage('Rollback testing') {
agent { label 'linux' }
steps {
sh 'make -C distribution clean rollback-check'
}
post {
always {
archiveArtifacts artifacts: '**/build/tests-run*/**'
}
}
}
stage('AWS Cloud image (smokes)') {
agent { label 'linux' }
steps {
sh 'make -C distribution clean aws-cloud-container-check'
}
post {
always {
archiveArtifacts artifacts: '**/build/tests-run*/**'
}
}
}
}
}
stage('Publish jenkins/evergreen') {
when {
expression { infra.isTrusted() }
}
steps {
withCredentials([[$class: 'ZipFileBinding',
credentialsId: 'jenkins-dockerhub',
variable: 'DOCKER_CONFIG']]) {
sh 'make publish'
}
}
}
}
}
// vim: ft=groovy