forked from mbwatson/dug-search-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile
131 lines (130 loc) · 4.58 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
131
pipeline {
agent {
kubernetes {
yaml '''
kind: Pod
metadata:
name: kaniko
spec:
containers:
- name: jnlp
workingDir: /home/jenkins/agent
- name: kaniko
workingDir: /home/jenkins/agent
image: gcr.io/kaniko-project/executor:debug
imagePullPolicy: Always
resources:
requests:
cpu: "512m"
memory: "1024Mi"
ephemeral-storage: "4Gi"
limits:
cpu: "1024m"
memory: "2048Mi"
ephemeral-storage: "8Gi"
command:
- /busybox/cat
tty: true
volumeMounts:
- name: jenkins-docker-cfg
mountPath: /kaniko/.docker
- name: crane
workingDir: /tmp/jenkins
image: gcr.io/go-containerregistry/crane:debug
imagePullPolicy: Always
command:
- /busybox/cat
tty: true
volumes:
- name: jenkins-docker-cfg
projected:
sources:
- secret:
name: rencibuild-imagepull-secret
items:
- key: .dockerconfigjson
path: config.json
'''
}
}
environment {
PATH = "/busybox:/kaniko:/ko-app/:$PATH"
DOCKERHUB_CREDS = credentials("${env.CONTAINERS_REGISTRY_CREDS_ID_STR}")
GITHUB_CREDS = credentials("${env.GITHUB_CREDS_ID_STR}")
REGISTRY = "${env.REGISTRY}"
REG_OWNER="helxplatform"
REG_APP="dug-search-client"
COMMIT_HASH="${sh(script:"git rev-parse --short HEAD", returnStdout: true).trim()}"
VERSION_FILE="./package.json"
VERSION="${sh(script: {'''sed \'3q;d\' package.json | awk \'{ print $2 }\' | tr -d \'\042 \054\' '''}, returnStdout: true).trim()}"
IMAGE_NAME="${REGISTRY}/${REG_OWNER}/${REG_APP}"
TAG1="$BRANCH_NAME"
TAG2="$COMMIT_HASH"
TAG3="$VERSION"
TAG4="latest"
}
stages {
stage('Build') {
steps {
container(name: 'kaniko', shell: '/busybox/sh') {
sh '''#!/busybox/sh
echo "Build stage"
/kaniko/executor --dockerfile ./Dockerfile \
--context . \
--verbosity debug \
--no-push \
--destination $IMAGE_NAME:$TAG1 \
--destination $IMAGE_NAME:$TAG2 \
--destination $IMAGE_NAME:$TAG3 \
--destination $IMAGE_NAME:$TAG4 \
--tarPath image.tar
'''
}
}
post {
always {
archiveArtifacts artifacts: 'image.tar', onlyIfSuccessful: true
}
}
}
stage('Test') {
steps {
sh '''
echo "Test stage"
'''
}
}
stage('Publish') {
steps {
container(name: 'crane', shell: '/busybox/sh') {
sh '''
echo "Publish stage"
echo "$DOCKERHUB_CREDS_PSW" | crane auth login -u $DOCKERHUB_CREDS_USR --password-stdin $REGISTRY
crane push image.tar $IMAGE_NAME:$TAG1
crane push image.tar $IMAGE_NAME:$TAG2
if [ $BRANCH_NAME == "develop" ]; then
crane push image.tar $IMAGE_NAME:$TAG3
elif [ $BRANCH_NAME == "master" ]; then
crane push image.tar $IMAGE_NAME:$TAG3
crane push image.tar $IMAGE_NAME:$TAG4
if [ $(git tag -l "$VERSION") ]; then
error "ERROR: Tag with version $VERSION already exists! Exiting."
else
# Recover some things we've lost since the build stage:
git config --global user.email "helx-dev@lists"
git config --global user.name "rencibuild rencibuild"
grep url .git/config
git checkout $BRANCH_NAME
# Set the tag
SHA=$(git log --oneline | head -1 | awk '{print $1}')
git tag $VERSION "$SHA"
git remote set-url origin https://$GITHUB_CREDS_PSW@github.com/helxplatform/dug-search-client.git
git push origin --tags
fi
fi
'''
}
}
}
}
}