pipeline { agent { node { label 'jenkins-agent-web' customWorkspace '/workspace' } } options { timestamps() parallelsAlwaysFailFast() retry(3) timeout(time: 15, unit: 'MINUTES') } environment { IMAGE_NAME = 'contacts' PROJECT_NAME = 'contacts' IMAGE_REPO = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker/contacts' AR_REPO_LOCATION = 'us-east1' AR_URL = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker' BRANCH_NAME = "${env.CHANGE_BRANCH ? env.CHANGE_BRANCH : env.BRANCH_NAME}" JENKINS_BUILD_NUMBER = "${BUILD_NUMBER}" BUILD_NUMBER = "${SHORT_SHA}_${BUILD_NUMBER}" DOCKER_COMPOSE_FLAGS = '-f docker-compose.ci.yml' COMMIT_SHA = "${GIT_COMMIT}" SHORT_SHA = "${GIT_COMMIT.take(7)}" } stages { stage ('Build') { steps { dir ('services/contacts') { sh 'make build' } } } stage ('Tests') { parallel { stage ('Push Branch Image') { steps { dir ('services/contacts') { sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}' } } } stage ('Shellcheck') { steps { dir ('services/contacts') { sh 'make shellcheck' } } } stage ('Lint') { steps { dir ('services/contacts') { sh 'make lint_ci' } } } stage ('Format') { steps { dir ('services/contacts') { sh 'make format_ci' } } } stage ('Typecheck') { steps { dir ('services/contacts') { sh 'make typecheck_ci' } } } stage ('Test Unit') { steps { dir ('services/contacts') { sh 'make test_unit' } } } stage ('Test Acceptance') { steps { dir ('services/contacts') { sh 'make test_acceptance' } } } } } stage('Push Production') { steps { dir('services/contacts') { sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}-${BUILD_NUMBER}' } } } } post { cleanup { dir('services/contacts') { sh 'make clean' } sh 'make clean_jenkins' } } }