forked from holmes89/hex-example
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile
114 lines (113 loc) · 2.88 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
def tag = 'UNKNOWN'
def hash = 'UNKNOWN'
def endpoint = 'UNKNOWN'
pipeline {
agent none
stages {
stage ('Get Code') {
agent any
steps {
git 'https://github.com/Holmes89/hex-example.git'
}
}
stage ('Test') {
agent{
docker {
image 'golang:stretch'
args '-e XDG_CACHE_HOME=/tmp/.cache'
}
}
steps {
script {
sh 'go get -t ./...'
sh 'go test ./...'
}
}
}
stage ('Build') {
agent{
docker {
image 'golang:stretch'
args '-e XDG_CACHE_HOME=/tmp/.cache'
}
}
steps {
script {
sh 'go get ./...'
sh 'GOOS=linux go build -o main main.go'
}
}
}
stage ('Container') {
agent any
steps {
script {
hash = sh(returnStdout: true, script: "git rev-parse --short HEAD").trim()
app = docker.build("holmes89/hex-example")
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
app.push("${hash}")
app.push("latest")
}
}
}
}
stage ('Tag Container') {
when { buildingTag() }
agent any
steps {
script {
tag = sh(returnStdout: true, script: "git tag --sort version:refname | tail -1").trim()
app = docker.build("holmes89/hex-example")
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
app.push(tag)
}
}
}
}
stage ('Deploy QA') {
when { not { buildingTag() } }
agent any
steps {
script {
sh 'zip main.zip main'
sh "aws s3 cp main.zip s3://hex-lambda/${hash}/main.zip"
dir("terraform/qa"){
sh 'terraform init'
sh "terraform apply -var \"app_version=${hash}\" -auto-approve"
endpoint = sh(returnStdout: true, script: "terraform output url").trim()
}
}
}
}
stage ('Prod Deploy') {
when { buildingTag() }
agent any
steps {
script {
sh 'zip main.zip main'
sh "aws s3 cp main.zip s3://hex-lambda/${tag}/main.zip"
dir("terraform/prod"){
sh 'terraform init'
sh "terraform apply -var \"app_version=${tag}\" -auto-approve"
endpoint = sh(returnStdout: true, script: "terraform output url").trim()
}
}
}
}
stage ('Acceptance Tests'){
agent{
docker {
image 'holmes89/robotframework:latest'
args "-e HOME=${env.WORKSPACE}"
}
}
steps {
script {
dir("tests/acceptance"){
sh "robot -v HOST:${endpoint} tickets.robot"
}
}
}
}
}
}