-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjenkinsfile
115 lines (105 loc) · 4.94 KB
/
jenkinsfile
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
110
111
112
113
114
115
pipeline {
agent any
stages {
stage('checkout') {
steps {
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[url: 'https://github.com/AbderrazakBouasker/Image_Coloring_Ai.git']])
}
}
stage('create venv') {
steps {
script {
// Check if .venv directory exists
def venvDirectory = '.venv'
def venvExists = fileExists(venvDirectory)
if (!venvExists) {
// Create virtual environment
sh "/opt/conda/bin/python -m venv ${venvDirectory}"
sh "${venvDirectory}/bin/python -m pip install --upgrade pip"
} else {
echo "Virtual environment directory '${venvDirectory}' already exists. Skipping creation."
}
}
}
}
stage('install requirements') {
steps {
script {
def requirementsFile = 'requirements.txt'
def credentials = 'credentials.json'
def credentialsExist = fileExists(credentials)
def modTime = sh(script: "stat -c %Y ${requirementsFile}", returnStdout: true).trim().toInteger()
def currentTime = sh(script: 'date +%s', returnStdout: true).trim().toInteger()
def timeDiff = currentTime - modTime
// Check if the requirements.txt file was modified within the last 5 minutes (300 seconds)
if (timeDiff <= 300) {
sh ".venv/bin/pip install -r ${requirementsFile} --no-cache-dir"
} else {
echo 'Requirements are up to date.'
}
sh ". .venv/bin/activate"
if (!credentialsExist){
sh ".venv/bin/gdown -O credentials.json <credials file's id>"
}else{
echo "credentials exist"
}
}
}
}
// stage('test') {
// steps {
// git branch: 'main', url: 'https://github.com/AbderrazakBouasker/Image_Coloring_Ai.git'
// sh '.venv/bin/pytest test.py'
// }
// }
stage('build') {
steps {
sh "docker build -t image_coloring:${env.BUILD_NUMBER} ."
echo 'build completed'
}
}
stage('deploy') {
steps {
script {
def imageName = "image_coloring:${env.BUILD_NUMBER}"
def imageTag = "josemokeni/image_coloring:${env.BUILD_NUMBER}"
def latestTag = "josemokeni/image_coloring:latest"
def imageTag2 = "abderrazakbouasker/image_coloring:${env.BUILD_NUMBER}"
def latestTag2 = "abderrazakbouasker/image_coloring:latest"
// Tag the built image with the Docker Hub repository
docker.withRegistry('', 'docker-hub-credentials') {
sh "docker tag ${imageName} ${imageTag}"
sh "docker push ${imageTag}"
sh "docker tag ${imageName} ${latestTag}"
sh "docker push ${latestTag}"
// Delete locally stored images
// sh "docker rmi ${imageName}"
sh "docker rmi ${imageTag}"
sh "docker rmi ${latestTag}"
echo 'pushing completed Jose'
}
// Tag the built image with the Docker Hub repository
docker.withRegistry('', 'docker-hub-credentials2') {
sh "docker tag ${imageName} ${imageTag2}"
sh "docker push ${imageTag2}"
sh "docker tag ${imageName} ${latestTag2}"
sh "docker push ${latestTag2}"
// Delete locally stored images
sh "docker rmi ${imageName}"
sh "docker rmi ${imageTag2}"
sh "docker rmi ${latestTag2}"
echo 'pushing completed abderrazak'
}
}
}
}
stage('rolling update'){
steps{
script{
sh "gcloud container clusters get-credentials flaskapp-cluster --zone us-central1-a --project image-coloring-deep-learning"
sh "kubectl set image deployment/flaskapp image-coloring=josemokeni/image_coloring:${env.BUILD_NUMBER}"
}
}
}
}
}