|
CONTAINER_IMAGE='quay.io/redhattraining/ossm-adopt-a-pup-webapp'
|
WEBAPP_DIR='adopt-a-pup/web-app'
|
|
pipeline {
|
agent {
|
label 'master'
|
}
|
|
environment {
|
HOME = '${WORKSPACE}'
|
NPM_CONFIG_CACHE = '${WORKSPACE}/.npm'
|
CI = 'true'
|
}
|
|
stages {
|
stage('adopt-a-pup web-app: Test') {
|
agent {
|
docker {
|
image 'node:14'
|
}
|
}
|
|
steps {
|
dir(WEBAPP_DIR) {
|
sh 'npm ci'
|
sh 'npm run lint'
|
sh 'npm test'
|
}
|
}
|
}
|
|
stage('adopt-a-pup web-app: NPM build') {
|
agent {
|
docker {
|
image 'node:14'
|
}
|
}
|
|
steps {
|
dir(WEBAPP_DIR) {
|
sh 'npm ci'
|
sh 'REACT_APP_VERSION=v1 npm run build'
|
}
|
stash includes: 'adopt-a-pup/web-app/build/**/*', name: 'build_v1'
|
|
dir(WEBAPP_DIR) {
|
sh 'REACT_APP_VERSION=v2 npm run build'
|
}
|
stash includes: 'adopt-a-pup/web-app/build/**/*', name: 'build_v2'
|
}
|
}
|
|
stage('adopt-a-pup web-app: DEPLOY?') {
|
when {
|
branch 'master'
|
}
|
|
steps {
|
script {
|
env.DEPLOY = "TRUE"
|
try {
|
timeout(time: 5, unit: 'MINUTES') {
|
input "Build and push image to quay?"
|
}
|
// By catching the timeout exception, we prevent the pipeline from failing
|
} catch (err) {
|
env.DEPLOY = "FALSE"
|
}
|
}
|
}
|
}
|
|
stage('adopt-a-pup web-app: Build and push image') {
|
when {
|
allOf {
|
branch 'master'
|
expression { env.DEPLOY == "TRUE" }
|
}
|
}
|
|
steps {
|
sh 'rm -rf build'
|
unstash 'build_v1'
|
dir(WEBAPP_DIR) {
|
sh "docker build -t ${CONTAINER_IMAGE} ."
|
sh "docker tag ${CONTAINER_IMAGE} ${CONTAINER_IMAGE}:1.0"
|
}
|
|
sh 'rm -rf build'
|
unstash 'build_v2'
|
dir(WEBAPP_DIR) {
|
sh "docker build -t ${CONTAINER_IMAGE} ."
|
sh "docker tag ${CONTAINER_IMAGE} ${CONTAINER_IMAGE}:2.0"
|
}
|
|
withDockerRegistry([url: 'https://quay.io/', credentialsId: 'rht_jenkins_quay']) {
|
sh "docker push ${CONTAINER_IMAGE}"
|
}
|
}
|
}
|
}
|
|
post {
|
always {
|
sh "rm ${env.WORKSPACE}/adopt-a-pup/web-app/build -fr"
|
}
|
}
|
}
|