-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile
130 lines (119 loc) · 4.16 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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
pipeline {
environment { // Declaration of environment variables
DOCKER_ID = "kawaz971" // replace this with your docker-id
DOCKER_IMAGE = "datascientestapi"
DOCKER_TAG = "v.${BUILD_ID}.0" // we will tag our images with the current build in order to increment the value by 1 with each new build
}
agent any // Jenkins will be able to select all available agents
stages {
stage(' Docker Build'){ // docker build image stage
steps {
script {
sh '''
docker rm -f jenkins
docker build -t $DOCKER_ID/$DOCKER_IMAGE:$DOCKER_TAG .
sleep 6
'''
}
}
}
stage('Docker run'){ // run container from our builded image
steps {
script {
sh '''
docker run -d -p 80:80 --name jenkins $DOCKER_ID/$DOCKER_IMAGE:$DOCKER_TAG
sleep 10
'''
}
}
}
stage('Test Acceptance'){ // we launch the curl command to validate that the container responds to the request
steps {
script {
sh '''
curl localhost
'''
}
}
}
stage('Docker Push'){ //we pass the built image to our docker hub account
environment
{
DOCKER_PASS = credentials("DOCKER_HUB_PASS") // we retrieve docker password from secret text called docker_hub_pass saved on jenkins
}
steps {
script {
sh '''
docker login -u $DOCKER_ID -p $DOCKER_PASS
docker push $DOCKER_ID/$DOCKER_IMAGE:$DOCKER_TAG
'''
}
}
}
stage('Deploiement en dev'){
environment
{
KUBECONFIG = credentials("config") // we retrieve kubeconfig from secret file called config saved on jenkins
}
steps {
script {
sh '''
rm -Rf .kube
mkdir .kube
ls
cat $KUBECONFIG > .kube/config
cp fastapi/values.yaml values.yml
cat values.yml
sed -i "s+tag.*+tag: ${DOCKER_TAG}+g" values.yml
helm upgrade --install app fastapi --values=values.yml --namespace dev
'''
}
}
}
stage('Deploiement en staging'){
environment
{
KUBECONFIG = credentials("config") // we retrieve kubeconfig from secret file called config saved on jenkins
}
steps {
script {
sh '''
rm -Rf .kube
mkdir .kube
ls
cat $KUBECONFIG > .kube/config
cp fastapi/values.yaml values.yml
cat values.yml
sed -i "s+tag.*+tag: ${DOCKER_TAG}+g" values.yml
helm upgrade --install app fastapi --values=values.yml --namespace staging
'''
}
}
}
stage('Deploiement en prod'){
environment
{
KUBECONFIG = credentials("config") // we retrieve kubeconfig from secret file called config saved on jenkins
}
steps {
// Create an Approval Button with a timeout of 15minutes.
// this require a manuel validation in order to deploy on production environment
timeout(time: 15, unit: "MINUTES") {
input message: 'Do you want to deploy in production ?', ok: 'Yes'
}
script {
sh '''
rm -Rf .kube
mkdir .kube
ls
cat $KUBECONFIG > .kube/config
cp fastapi/values.yaml values.yml
cat values.yml
sed -i "s+tag.*+tag: ${DOCKER_TAG}+g" values.yml
helm upgrade --install app fastapi --values=values.yml --namespace prod
'''
}
}
}
}
}