-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathJenkinsfile
74 lines (68 loc) · 2.6 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
pipeline {
agent any
environment {
SCANNER_HOME = tool 'sonarscanner'
DOCKERHUB_CREDENTIALS = credentials('dockerhub-credentials')
}
stages {
stage('SonarQube analysis') {
steps {
slackSend channel: "#devops-project", color: "#439FE0", message: "Test Started: ${env.JOB_NAME} ${env.BUILD_NUMBER}"
withSonarQubeEnv('sonarserver') {
sh """
${SCANNER_HOME}/bin/sonar-scanner \
-Dsonar.projectKey=sonarqube-react-project \
-Dsonar.sources=."""
}
}
}
stage("Quality Gate") {
steps {
timeout(time: 1, unit: 'HOURS') {
script{
def qg = waitForQualityGate()
if (qg.status != 'OK') {
error "Pipeline aborted due to quality gate failure: ${qg.status}"
}
echo 'Quality Gate Passed'
}
}
}
post {
success {
script {
slackSend channel: "#devops-project", color: "good", message: "Test succeeded: ${env.JOB_NAME} ${env.BUILD_NUMBER}"
}
}
failure {
script {
slackSend channel: "#devops-project", color: "#FF0000", message: "Test failed: ${env.JOB_NAME} ${env.BUILD_NUMBER}"
error "Pipeline aborted due to quality gate failure: ${qg.status}"
}
}
}
}
stage('Build & Push Docker Image') {
steps {
when {
expression { return currentBuild.resultIsBetterOrEqualTo('SUCCESS') }
}
script {
withCredentials([usernamePassword(credentialsId: 'dockerhub-credentials', usernameVariable: 'DOCKERHUB_USERNAME', passwordVariable: 'DOCKERHUB_PASSWORD')]) {
// Build Docker image
sh "docker build -t ${DOCKERHUB_USERNAME}/chatbot:latest ."
// Log in to Docker Hub
sh "docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}"
// Push Docker image to Docker Hub
sh "docker push ${DOCKERHUB_USERNAME}/chatbot:latest"
}
}
}
post {
always {
sh 'docker logout'
}
}
}
}
}