11def CODE_VERSION = ' '
22def IS_IMAGE_BUILDED = false
3+ def IS_IMAGE_PUSH = false
34def isSuccess
5+ def preDeployFrontStage
6+ def preDeployBackStage
47def vers
58pipeline {
69 agent {
@@ -10,9 +13,8 @@ pipeline {
1013 GITHUB_TOKEN = credentials(' GH_TOKEN' )
1114 }
1215 options {
13- // test config to not keep ALL builds of PR check
14- buildDiscarder(logRotator(numToKeepStr : ' 10' , artifactNumToKeepStr : ' 10' ))
15- timestamps()
16+ skipDefaultCheckout true
17+ disableConcurrentBuilds()
1618 }
1719 stages {
1820 stage(' Checkout' ) {
@@ -79,7 +81,8 @@ pipeline {
7981
8082 npm run test:cover
8183 '''
82-
84+ }
85+ }
8386 stage(' Build image' ) {
8487 when {
8588 branch pattern : " release/[0-9].[0-9].[0-9]" , comparator : " REGEXP"
@@ -105,129 +108,176 @@ pipeline {
105108 sh " docker push ${ username} /streetcode_client:latest"
106109 sh " docker tag ${ username} /streetcode_client:latest ${ username} /streetcode_client:${ env.CODE_VERSION} "
107110 sh " docker push ${ username} /streetcode_client:${ env.CODE_VERSION} "
108-
111+ IS_IMAGE_PUSH = true
109112 }
110113 }
111114 }
112115 }
113116 stage(' Deploy Stage' ){
117+ when {
118+ expression { IS_IMAGE_PUSH == true }
119+ }
114120 steps {
115- input message : ' Do you want to approve deploy stage ?' , ok : ' Yes' , submitter : ' deploy_admin, deploy_dev '
121+ input message : ' Do you want to approve Staging deployment ?' , ok : ' Yes' , submitter : ' admin_1, ira_zavushchak , dev '
116122 script {
123+ checkout scmGit(
124+ branches : [[name : ' main' ]],
125+ userRemoteConfigs : [[
credentialsId :
' StreetcodeGithubCreds' ,
url :
' [email protected] :ita-social-projects/Streetcode-DevOps.git' ]])
126+
117127 preDeployBackStage = sh(script : ' docker inspect $(docker ps | awk \' {print $2}\' | grep -v ID) | jq \' .[].RepoTags\' | grep -m 1 "streetcode:" | tail -n 1 | cut -d ":" -f2 | head -c -2' , returnStdout : true ). trim()
118128 echo " Last Tag Stage backend: ${ preDeployBackStage} "
119129 preDeployFrontStage = sh(script : ' docker inspect $(docker ps | awk \' {print $2}\' | grep -v ID) | jq \' .[].RepoTags\' | grep -m 1 "streetcode_client:" | tail -n 1 | cut -d ":" -f2 | head -c -2' , returnStdout : true ). trim()
120130 echo " Last Tag Stage frontend: ${ preDeployFrontStage} "
121131
122132
123- echo " DOCKER_TAG_BACKEND ${ env.CODE_VERSION } "
124- echo " DOCKER_TAG_FRONTEND ${ preDeployFrontStage } "
133+ echo " DOCKER_TAG_BACKEND ${ preDeployBackStage } "
134+ echo " DOCKER_TAG_FRONTEND ${ env.CODE_VERSION } "
125135
126- // docker image prune --force --filter "until=72h"
127- // docker system prune --force --filter "until=72h"
128- // export DOCKER_TAG_BACKEND=${env.CODE_VERSION}
129- // export DOCKER_TAG_FRONTEND=${preDeployFrontStage}
130- // docker compose down && sleep 10
131- // docker compose --env-file /etc/environment up -d
136+ sh ' docker image prune --force --filter "until=72h"'
137+ sh ' docker system prune --force --filter "until=72h"'
138+ sh """ export DOCKER_TAG_BACKEND=${ env.CODE_VERSION}
139+ export DOCKER_TAG_FRONTEND=${ preDeployBackStage}
140+ docker stop backend frontend nginx loki certbot
141+ docker container prune -f
142+ docker volume prune -f
143+ docker network prune -f
144+ sleep 10
145+ docker compose --env-file /etc/environment up -d"""
132146
133147 }
134148 }
135- }
136- stage(' WHAT IS THE NEXT STEP' ) {
149+ }
150+ stage(' WHAT IS THE NEXT STEP' ) {
151+ when {
152+ expression { IS_IMAGE_PUSH == true }
153+ }
137154 steps {
138- script {
139- CHOICES = [" deployProd" , " rollbackStage " ];
140- env. yourChoice = input message : ' Please validate, choose one ' , ok : ' Proceed' , submitter : ' deploy_admin ' ,id :' choice_id' ,
141- parameters : [choice(choices : CHOICES , description : ' Do you want to deploy or to rollback? ' , name : ' CHOICE' )]
155+ script {
156+ CHOICES = [" deployProd" ];
157+ env. yourChoice = input message : ' Do you want to deploy to Production? ' , ok : ' Proceed' , submitter : ' admin_1, ira_zavushchak ' ,id :' choice_id' ,
158+ parameters : [choice(choices : CHOICES , description : ' Developer team can abort to switch next step as rollback stage ' , name : ' CHOICE' )]
142159 }
160+
143161 }
162+ post {
163+ aborted{
164+ input message : ' Do you want to rollback Staging deployment?' , ok : ' Yes' , submitter : ' admin_1, ira_zavushchak , dev'
165+ script{
166+ sh ' ls'
167+ echo " Rollback Tag Stage backend: ${ preDeployBackStage} "
168+ echo " Rollback Tag Stage frontend: ${ preDeployFrontStage} "
169+ sh ' docker image prune --force --filter "until=72h"'
170+ sh ' docker system prune --force --filter "until=72h"'
171+ sh """
172+ export DOCKER_TAG_BACKEND=${ preDeployBackStage}
173+ export DOCKER_TAG_FRONTEND=${ preDeployFrontStage}
174+ docker stop backend frontend nginx loki certbot
175+ docker container prune -f
176+ docker volume prune -f
177+ docker network prune -f
178+ sleep 10
179+ docker compose --env-file /etc/environment up -d"""
180+
181+ }
182+
183+ }
184+ success {
185+ script {
186+ isSuccess = ' 1'
187+ }
188+ }
189+ }
144190 }
145- stage(' Deploy prod' ) {
146- agent { label ' production' }
147- when {
191+ stage(' Deploy prod' ) {
192+ agent {
193+ label ' production'
194+ }
195+ when {
148196 expression { env. yourChoice == ' deployProd' }
149197 }
150198 steps {
151199 script {
200+ checkout scmGit(
201+ branches : [[name : ' main' ]],
202+ userRemoteConfigs : [[credentialsId : ' StreetcodeGithubCreds' , url : ' https://github.com/ita-social-projects/Streetcode-DevOps.git' ]])
203+
204+
152205 preDeployBackProd = sh(script : ' docker inspect $(docker ps | awk \' {print $2}\' | grep -v ID) | jq \' .[].RepoTags\' | grep -m 1 "streetcode:" | tail -n 1 | cut -d ":" -f2 | head -c -2' , returnStdout : true ). trim()
153206 echo " Last Tag Prod backend: ${ preDeployBackProd} "
154207 preDeployFrontProd = sh(script : ' docker inspect $(docker ps | awk \' {print $2}\' | grep -v ID) | jq \' .[].RepoTags\' | grep -m 1 "streetcode_client:" | tail -n 1 | cut -d ":" -f2 | head -c -2' , returnStdout : true ). trim()
155208 echo " Last Tag Prod frontend: ${ preDeployFrontProd} "
156- // docker image prune --force --filter "until=72h"
157- // docker system prune --force --filter "until=72h"
158- // export DOCKER_TAG_BACKEND=${env.CODE_VERSION}
159- // export DOCKER_TAG_FRONTEND=${preDeployFrontProd}
160- // docker compose down && sleep 10
161- // docker compose --env-file /etc/environment up -d
162-
209+ sh ' docker image prune --force --filter "until=72h"'
210+ sh ' docker system prune --force --filter "until=72h"'
211+
212+ sh """
213+ export DOCKER_TAG_BACKEND=${ preDeployBackProd}
214+ export DOCKER_TAG_FRONTEND=${ env.CODE_VERSION}
215+ docker stop production_deploy-frontend-1 loki production_deploy-certbot-1 production_deploy-nginx-1 production_deploy-backend-1
216+ #docker stop backend frontend nginx loki certbot
217+ docker container prune -f
218+ docker volume prune -f
219+ docker network prune -f
220+ sleep 10
221+ docker compose --env-file /etc/environment up -d"""
163222 }
164223 }
165224 post {
166- always {
167- echo ' Always'
168- }
169225 success {
170226 script {
171227 isSuccess = ' 1'
172228 }
173229 }
174230 }
175231 }
176- stage(' Rollback Stage' ) {
177- when {
178- expression { env. yourChoice == ' rollbackStage' }
179- }
180- steps {
181- script {
182- echo " Rollback Tag Stage backend: ${ preDeployBackStage} "
183- echo " Rollback Tag Stage frontend: ${ preDeployFrontStage} "
184- // docker image prune --force --filter "until=72h"
185- // docker system prune --force --filter "until=72h"
186- // export DOCKER_TAG_BACKEND=${preDeployBackStage}
187- // export DOCKER_TAG_FRONTEND=${preDeployFrontStage}
188- // docker compose down && sleep 10
189- // docker compose --env-file /etc/environment up -d
190-
191-
192- }
193- }
194- }
195232 stage(' Sync after release' ) {
196233 when {
197234 expression { isSuccess == ' 1' }
198235 }
199236 steps {
200237 script {
201- // ??
202- sh ' echo ${BRANCH_NAME}'
203- sh " git checkout master"
238+
204239 sh ' echo ${BRANCH_NAME}'
205- // sh "git merge release/${env.CODE_VERSION}"
206- // sh "git push origin main"
240+ // sh "git checkout master"
241+ // sh 'echo ${BRANCH_NAME}'
242+ // sh "git merge release/${env.CODE_VERSION}" ??????????????????????????/
243+ // sh "git push origin main"
207244
208245 }
209246 }
210247 post {
211248 success {
212- sh ' gh auth status'
213- // sh "gh release create v${vers} --generate-notes --draft"
249+ // sh 'gh auth status'
250+ // sh "gh release create v${vers} --generate-notes --draft"
251+ sh ' echo delitt'
214252 }
215253 }
216254 }
217255 stage(' Rollback Prod' ) {
256+ agent {
257+ label ' production'
258+ }
259+ when {
260+ expression { env. yourChoice == ' deployProd' }
261+ }
218262 steps {
219- input message : ' Do you want to rollback deploy prod ?' , ok : ' Yes'
263+ input message : ' Do you want to rollback Production deployment ?' , ok : ' Yes' , submitter : ' admin_1, ira_zavushchak '
220264 script {
221265 echo " Rollback Tag Prod backend: ${ preDeployBackProd} "
222266 echo " Rollback Tag Prod frontend: ${ preDeployFrontProd} "
223- // docker image prune --force --filter "until=72h"
224- // docker system prune --force --filter "until=72h"
225- // export DOCKER_TAG_BACKEND=${preDeployBackProd}
226- // export DOCKER_TAG_FRONTEND=${preDeployFrontProd}
227- // docker compose down && sleep 10
228- // docker compose --env-file /etc/environment up -d
267+ sh ' docker image prune --force --filter "until=72h"'
268+ sh ' docker system prune --force --filter "until=72h"'
269+ sh """ export DOCKER_TAG_BACKEND=${ preDeployBackProd}
270+ export DOCKER_TAG_FRONTEND=${ preDeployFrontProd}
271+ # docker stop production_deploy-frontend-1 loki production_deploy-certbot-1 production_deploy-nginx-1 production_deploy-backend-1
272+ docker stop backend frontend nginx loki certbot
273+ docker container prune -f
274+ docker volume prune -f
275+ docker network prune -f
276+ sleep 10
277+ docker compose --env-file /etc/environment up -d"""
229278 }
230279 }
231280 }
281+ }
232282 }
233283}
0 commit comments