Skip to content

Commit 8e52b06

Browse files
Update Jenkinsfile
1 parent b2e64fe commit 8e52b06

File tree

1 file changed

+116
-66
lines changed

1 file changed

+116
-66
lines changed

Jenkinsfile

Lines changed: 116 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
def CODE_VERSION = ''
22
def IS_IMAGE_BUILDED = false
3+
def IS_IMAGE_PUSH = false
34
def isSuccess
5+
def preDeployFrontStage
6+
def preDeployBackStage
47
def vers
58
pipeline {
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

Comments
 (0)