Jaime Ramírez
2020-06-11 a397c553e00998305bbdb7b6025eb8a03fd46662
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
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"
        }
    }
}