Skip to content

Commit 3dc9b20

Browse files
authored
CI Improvements (NginxProxyManager#77)
1 parent 444dbd5 commit 3dc9b20

File tree

1 file changed

+85
-80
lines changed

1 file changed

+85
-80
lines changed

Jenkinsfile

Lines changed: 85 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pipeline {
1212
TEMP_IMAGE_ARM64 = "nginx-proxy-manager-arm64-build_${BUILD_NUMBER}"
1313
TAG_VERSION = getPackageVersion()
1414
MAJOR_VERSION = "2"
15+
BRANCH_LOWER = "${BRANCH_NAME.toLowerCase()}"
1516
}
1617
stages {
1718
stage('Build PR') {
@@ -21,23 +22,27 @@ pipeline {
2122
steps {
2223
ansiColor('xterm') {
2324
// Codebase
24-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE yarn install'
25-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE npm run-script build'
25+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
26+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
2627
sh 'rm -rf node_modules'
27-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE yarn install --prod'
28-
sh 'docker run --rm -v $(pwd):/data $DOCKER_CI_TOOLS node-prune'
28+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
29+
sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} node-prune'
2930

3031
// Docker Build
31-
sh 'docker build --pull --no-cache --squash --compress -t $TEMP_IMAGE .'
32+
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE} .'
3233

3334
// Private Registry
34-
sh 'docker tag $TEMP_IMAGE $DOCKER_PRIVATE_REGISTRY/$IMAGE:$BRANCH_NAME'
35+
sh 'docker tag ${TEMP_IMAGE} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:github-${BRANCH_LOWER}'
3536
withCredentials([usernamePassword(credentialsId: 'jc21-private-registry', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
36-
sh "docker login -u '${duser}' -p '$dpass' $DOCKER_PRIVATE_REGISTRY"
37-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:$BRANCH_NAME'
37+
sh "docker login -u '${duser}' -p '${dpass}' ${DOCKER_PRIVATE_REGISTRY}"
38+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:github-${BRANCH_LOWER}'
3839
}
3940

40-
sh 'docker rmi $TEMP_IMAGE'
41+
sh 'docker rmi ${TEMP_IMAGE}'
42+
43+
script {
44+
def comment = pullRequest.comment("Docker Image for build ${BUILD_NUMBER} is available on [DockerHub](https://cloud.docker.com/repository/docker/jc21/${IMAGE}) as `jc21/${IMAGE}:github-${BRANCH_LOWER}`")
45+
}
4146
}
4247
}
4348
}
@@ -48,30 +53,30 @@ pipeline {
4853
steps {
4954
ansiColor('xterm') {
5055
// Codebase
51-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE yarn install'
52-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE npm run-script build'
56+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
57+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
5358
sh 'rm -rf node_modules'
54-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE yarn install --prod'
55-
sh 'docker run --rm -v $(pwd):/data $DOCKER_CI_TOOLS node-prune'
59+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
60+
sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} node-prune'
5661

5762
// Docker Build
58-
sh 'docker build --pull --no-cache --squash --compress -t $TEMP_IMAGE .'
63+
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE} .'
5964

6065
// Dockerhub
61-
sh 'docker tag $TEMP_IMAGE docker.io/jc21/$IMAGE:develop'
66+
sh 'docker tag ${TEMP_IMAGE} docker.io/jc21/${IMAGE}:develop'
6267
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
63-
sh "docker login -u '${duser}' -p '$dpass'"
64-
sh 'docker push docker.io/jc21/$IMAGE:develop'
68+
sh "docker login -u '${duser}' -p '${dpass}'"
69+
sh 'docker push docker.io/jc21/${IMAGE}:develop'
6570
}
6671

6772
// Private Registry
68-
sh 'docker tag $TEMP_IMAGE $DOCKER_PRIVATE_REGISTRY/$IMAGE:develop'
73+
sh 'docker tag ${TEMP_IMAGE} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:develop'
6974
withCredentials([usernamePassword(credentialsId: 'jc21-private-registry', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
70-
sh "docker login -u '${duser}' -p '$dpass' $DOCKER_PRIVATE_REGISTRY"
71-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:develop'
75+
sh "docker login -u '${duser}' -p '${dpass}' ${DOCKER_PRIVATE_REGISTRY}"
76+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:develop'
7277
}
7378

74-
sh 'docker rmi $TEMP_IMAGE'
79+
sh 'docker rmi ${TEMP_IMAGE}'
7580
}
7681
}
7782
}
@@ -84,40 +89,40 @@ pipeline {
8489
steps {
8590
ansiColor('xterm') {
8691
// Codebase
87-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE yarn install'
88-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE npm run-script build'
92+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install'
93+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} npm run-script build'
8994
sh 'rm -rf node_modules'
90-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE yarn install --prod'
91-
sh 'docker run --rm -v $(pwd):/data $DOCKER_CI_TOOLS node-prune'
95+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE} yarn install --prod'
96+
sh 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} node-prune'
9297

9398
// Docker Build
94-
sh 'docker build --pull --no-cache --squash --compress -t $TEMP_IMAGE .'
99+
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE} .'
95100

96101
// Dockerhub
97-
sh 'docker tag $TEMP_IMAGE docker.io/jc21/$IMAGE:$TAG_VERSION'
98-
sh 'docker tag $TEMP_IMAGE docker.io/jc21/$IMAGE:$MAJOR_VERSION'
99-
sh 'docker tag $TEMP_IMAGE docker.io/jc21/$IMAGE:latest'
102+
sh 'docker tag ${TEMP_IMAGE} docker.io/jc21/${IMAGE}:${TAG_VERSION}'
103+
sh 'docker tag ${TEMP_IMAGE} docker.io/jc21/${IMAGE}:${MAJOR_VERSION}'
104+
sh 'docker tag ${TEMP_IMAGE} docker.io/jc21/${IMAGE}:latest'
100105

101106
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
102-
sh "docker login -u '${duser}' -p '$dpass'"
103-
sh 'docker push docker.io/jc21/$IMAGE:$TAG_VERSION'
104-
sh 'docker push docker.io/jc21/$IMAGE:$MAJOR_VERSION'
105-
sh 'docker push docker.io/jc21/$IMAGE:latest'
107+
sh "docker login -u '${duser}' -p '${dpass}'"
108+
sh 'docker push docker.io/jc21/${IMAGE}:${TAG_VERSION}'
109+
sh 'docker push docker.io/jc21/${IMAGE}:${MAJOR_VERSION}'
110+
sh 'docker push docker.io/jc21/${IMAGE}:latest'
106111
}
107112

108113
// Private Registry
109-
sh 'docker tag $TEMP_IMAGE $DOCKER_PRIVATE_REGISTRY/$IMAGE:$TAG_VERSION'
110-
sh 'docker tag $TEMP_IMAGE $DOCKER_PRIVATE_REGISTRY/$IMAGE:$MAJOR_VERSION'
111-
sh 'docker tag $TEMP_IMAGE $DOCKER_PRIVATE_REGISTRY/$IMAGE:latest'
114+
sh 'docker tag ${TEMP_IMAGE} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${TAG_VERSION}'
115+
sh 'docker tag ${TEMP_IMAGE} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${MAJOR_VERSION}'
116+
sh 'docker tag ${TEMP_IMAGE} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:latest'
112117

113118
withCredentials([usernamePassword(credentialsId: 'jc21-private-registry', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
114-
sh "docker login -u '${duser}' -p '$dpass' $DOCKER_PRIVATE_REGISTRY"
115-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:$TAG_VERSION'
116-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:$MAJOR_VERSION'
117-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:latest'
119+
sh "docker login -u '${duser}' -p '${dpass}' ${DOCKER_PRIVATE_REGISTRY}"
120+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${TAG_VERSION}'
121+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${MAJOR_VERSION}'
122+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:latest'
118123
}
119124

120-
sh 'docker rmi $TEMP_IMAGE'
125+
sh 'docker rmi ${TEMP_IMAGE}'
121126
}
122127
}
123128
}
@@ -131,39 +136,39 @@ pipeline {
131136
steps {
132137
ansiColor('xterm') {
133138
// Codebase
134-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE:armhf yarn install'
135-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE:armhf npm run-script build'
139+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE}:armhf yarn install'
140+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE}:armhf npm run-script build'
136141
sh 'rm -rf node_modules'
137-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE:armhf yarn install --prod'
142+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE}:armhf yarn install --prod'
138143

139144
// Docker Build
140-
sh 'docker build --pull --no-cache --squash --compress -t $TEMP_IMAGE_ARM -f Dockerfile.armhf .'
145+
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE_ARM} -f Dockerfile.armhf .'
141146

142147
// Dockerhub
143-
sh 'docker tag $TEMP_IMAGE_ARM docker.io/jc21/$IMAGE:$TAG_VERSION-armhf'
144-
sh 'docker tag $TEMP_IMAGE_ARM docker.io/jc21/$IMAGE:$MAJOR_VERSION-armhf'
145-
sh 'docker tag $TEMP_IMAGE_ARM docker.io/jc21/$IMAGE:latest-armhf'
148+
sh 'docker tag ${TEMP_IMAGE_ARM} docker.io/jc21/${IMAGE}:${TAG_VERSION}-armhf'
149+
sh 'docker tag ${TEMP_IMAGE_ARM} docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-armhf'
150+
sh 'docker tag ${TEMP_IMAGE_ARM} docker.io/jc21/${IMAGE}:latest-armhf'
146151

147152
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
148-
sh "docker login -u '${duser}' -p '$dpass'"
149-
sh 'docker push docker.io/jc21/$IMAGE:$TAG_VERSION-armhf'
150-
sh 'docker push docker.io/jc21/$IMAGE:$MAJOR_VERSION-armhf'
151-
sh 'docker push docker.io/jc21/$IMAGE:latest-armhf'
153+
sh "docker login -u '${duser}' -p '${dpass}'"
154+
sh 'docker push docker.io/jc21/${IMAGE}:${TAG_VERSION}-armhf'
155+
sh 'docker push docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-armhf'
156+
sh 'docker push docker.io/jc21/${IMAGE}:latest-armhf'
152157
}
153158

154159
// Private Registry
155-
sh 'docker tag $TEMP_IMAGE_ARM $DOCKER_PRIVATE_REGISTRY/$IMAGE:$TAG_VERSION-armhf'
156-
sh 'docker tag $TEMP_IMAGE_ARM $DOCKER_PRIVATE_REGISTRY/$IMAGE:$MAJOR_VERSION-armhf'
157-
sh 'docker tag $TEMP_IMAGE_ARM $DOCKER_PRIVATE_REGISTRY/$IMAGE:latest-armhf'
160+
sh 'docker tag ${TEMP_IMAGE_ARM} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${TAG_VERSION}-armhf'
161+
sh 'docker tag ${TEMP_IMAGE_ARM} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${MAJOR_VERSION}-armhf'
162+
sh 'docker tag ${TEMP_IMAGE_ARM} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:latest-armhf'
158163

159164
withCredentials([usernamePassword(credentialsId: 'jc21-private-registry', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
160-
sh "docker login -u '${duser}' -p '$dpass' $DOCKER_PRIVATE_REGISTRY"
161-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:$TAG_VERSION-armhf'
162-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:$MAJOR_VERSION-armhf'
163-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:latest-armhf'
165+
sh "docker login -u '${duser}' -p '${dpass}' ${DOCKER_PRIVATE_REGISTRY}"
166+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${TAG_VERSION}-armhf'
167+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${MAJOR_VERSION}-armhf'
168+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:latest-armhf'
164169
}
165170

166-
sh 'docker rmi $TEMP_IMAGE_ARM'
171+
sh 'docker rmi ${TEMP_IMAGE_ARM}'
167172
}
168173
}
169174
}
@@ -177,39 +182,39 @@ pipeline {
177182
steps {
178183
ansiColor('xterm') {
179184
// Codebase
180-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE:arm64 yarn install'
181-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE:arm64 npm run-script build'
185+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE}:arm64 yarn install'
186+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE}:arm64 npm run-script build'
182187
sh 'sudo rm -rf node_modules'
183-
sh 'docker run --rm -v $(pwd):/app -w /app $BASE_IMAGE:arm64 yarn install --prod'
188+
sh 'docker run --rm -v $(pwd):/app -w /app ${BASE_IMAGE}:arm64 yarn install --prod'
184189

185190
// Docker Build
186-
sh 'docker build --pull --no-cache --squash --compress -t $TEMP_IMAGE_ARM64 -f Dockerfile.arm64 .'
191+
sh 'docker build --pull --no-cache --squash --compress -t ${TEMP_IMAGE_ARM64} -f Dockerfile.arm64 .'
187192

188193
// Dockerhub
189-
sh 'docker tag $TEMP_IMAGE_ARM64 docker.io/jc21/$IMAGE:$TAG_VERSION-arm64'
190-
sh 'docker tag $TEMP_IMAGE_ARM64 docker.io/jc21/$IMAGE:$MAJOR_VERSION-arm64'
191-
sh 'docker tag $TEMP_IMAGE_ARM64 docker.io/jc21/$IMAGE:latest-arm64'
194+
sh 'docker tag ${TEMP_IMAGE_ARM64} docker.io/jc21/${IMAGE}:${TAG_VERSION}-arm64'
195+
sh 'docker tag ${TEMP_IMAGE_ARM64} docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-arm64'
196+
sh 'docker tag ${TEMP_IMAGE_ARM64} docker.io/jc21/${IMAGE}:latest-arm64'
192197

193198
withCredentials([usernamePassword(credentialsId: 'jc21-dockerhub', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
194-
sh "docker login -u '${duser}' -p '$dpass'"
195-
sh 'docker push docker.io/jc21/$IMAGE:$TAG_VERSION-arm64'
196-
sh 'docker push docker.io/jc21/$IMAGE:$MAJOR_VERSION-arm64'
197-
sh 'docker push docker.io/jc21/$IMAGE:latest-arm64'
199+
sh "docker login -u '${duser}' -p '${dpass}'"
200+
sh 'docker push docker.io/jc21/${IMAGE}:${TAG_VERSION}-arm64'
201+
sh 'docker push docker.io/jc21/${IMAGE}:${MAJOR_VERSION}-arm64'
202+
sh 'docker push docker.io/jc21/${IMAGE}:latest-arm64'
198203
}
199204

200205
// Private Registry
201-
sh 'docker tag $TEMP_IMAGE_ARM64 $DOCKER_PRIVATE_REGISTRY/$IMAGE:$TAG_VERSION-arm64'
202-
sh 'docker tag $TEMP_IMAGE_ARM64 $DOCKER_PRIVATE_REGISTRY/$IMAGE:$MAJOR_VERSION-arm64'
203-
sh 'docker tag $TEMP_IMAGE_ARM64 $DOCKER_PRIVATE_REGISTRY/$IMAGE:latest-arm64'
206+
sh 'docker tag ${TEMP_IMAGE_ARM64} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${TAG_VERSION}-arm64'
207+
sh 'docker tag ${TEMP_IMAGE_ARM64} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${MAJOR_VERSION}-arm64'
208+
sh 'docker tag ${TEMP_IMAGE_ARM64} ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:latest-arm64'
204209

205210
withCredentials([usernamePassword(credentialsId: 'jc21-private-registry', passwordVariable: 'dpass', usernameVariable: 'duser')]) {
206-
sh "docker login -u '${duser}' -p '$dpass' $DOCKER_PRIVATE_REGISTRY"
207-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:$TAG_VERSION-arm64'
208-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:$MAJOR_VERSION-arm64'
209-
sh 'docker push $DOCKER_PRIVATE_REGISTRY/$IMAGE:latest-arm64'
211+
sh "docker login -u '${duser}' -p '${dpass}' ${DOCKER_PRIVATE_REGISTRY}"
212+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${TAG_VERSION}-arm64'
213+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:${MAJOR_VERSION}-arm64'
214+
sh 'docker push ${DOCKER_PRIVATE_REGISTRY}/${IMAGE}:latest-arm64'
210215
}
211216

212-
sh 'docker rmi $TEMP_IMAGE_ARM64'
217+
sh 'docker rmi ${TEMP_IMAGE_ARM64}'
213218

214219
// Hack to clean up ec2 instance for next build
215220
sh 'sudo chown -R ec2-user:ec2-user *'
@@ -232,7 +237,7 @@ pipeline {
232237
}
233238

234239
def getPackageVersion() {
235-
ver = sh(script: 'docker run --rm -v $(pwd):/data $DOCKER_CI_TOOLS bash -c "cat /data/package.json|jq -r \'.version\'"', returnStdout: true)
240+
ver = sh(script: 'docker run --rm -v $(pwd):/data ${DOCKER_CI_TOOLS} bash -c "cat /data/package.json|jq -r \'.version\'"', returnStdout: true)
236241
return ver.trim()
237242
}
238243

0 commit comments

Comments
 (0)