-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJenkinsfile
72 lines (61 loc) · 3.2 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
#!/usr/bin/env groovy
node {
def dockerhubDomain = 'dockerhub.accenture.com'
def dockerhubAccount = 'lwa'
def imageName = 'fsa-reactive-gateway'
def languageTag = 'elixir'
def imageTestSuffix = 'test'
def imageBuildSuffix = 'build'
def imageDeploySuffix = 'deploy'
def gitHash
ansiColor('xterm') {
stage('Preparation') {
// wipe out workspace
deleteDir()
// clone repository
checkout scm
poll: true
// get last commit hash
gitHash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
// ensure that docker is running
sh '''(
if [ `ps -ef | grep -v grep | grep docker | wc -l` -gt 0 ]
then
echo 'Docker is running ...'
else
echo 'Starting docker ...'
service docker start
fi
)'''
}
stage('Test') {
// build environment for Elixir app test
sh "docker build -t ${imageName}-${languageTag}-${imageTestSuffix} -f test.dockerfile ."
// run test
sh "docker run --rm --name ${imageName}-${languageTag}-${imageTestSuffix} ${imageName}-${languageTag}-${imageTestSuffix}"
}
stage('Build') {
// build environment for Elixir app release
sh "docker build -t ${imageName}-${languageTag}-${imageBuildSuffix} -f build.dockerfile --no-cache=true ."
// run release for app and mount artifacts to volume
sh "docker run --rm --name ${imageName}-${languageTag}-${imageBuildSuffix} -v $WORKSPACE/fsa-reactive-gateway:/opt/sites/fsa-reactive-gateway/_build/prod/rel/gateway ${imageName}-${languageTag}-${imageBuildSuffix}"
}
stage('Deploy') {
withCredentials([usernamePassword(credentialsId: 'lwa-service-account', passwordVariable: 'DOCKERHUB_PASSWORD', usernameVariable: 'DOCKERHUB_USERNAME')]) {
sh "docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD $dockerhubDomain"
// build image of application from artifacts in volume
def appImage = docker.build("${imageName}-${languageTag}-${imageDeploySuffix}")
// tag and push images without basepath
sh "docker tag ${appImage.imageName()} ${dockerhubDomain}/${dockerhubAccount}/${imageName}:${languageTag}-${gitHash}"
sh "docker push ${dockerhubDomain}/${dockerhubAccount}/${imageName}:${languageTag}-${gitHash}"
sh "docker tag ${appImage.imageName()} ${dockerhubDomain}/${dockerhubAccount}/${imageName}:${languageTag}"
sh "docker push ${dockerhubDomain}/${dockerhubAccount}/${imageName}:${languageTag}"
}
}
stage('Clean') {
// remove images
sh "docker rmi ${imageName}-${languageTag}-${imageDeploySuffix}"
sh "docker rmi \$(docker images --format '{{.Repository}}:{{.Tag}}' | grep \"${dockerhubDomain}/${dockerhubAccount}/${imageName}:${languageTag}\")"
}
}
}