Update docker scripts
[releng/global-jjb.git] / jjb / lf-docker-jobs.yaml
1 ---
2 # This file contains job templates for Docker projects.
3
4 ##########
5 # Macros #
6 ##########
7
8 - builder:
9     name: lf-docker-get-container-tag
10     builders:
11       - inject:
12           properties-content: |
13             DOCKER_ROOT={docker-root}
14       - conditional-step:
15           condition-kind: regex-match
16           regex: git-describe-params
17           label: '{docker-use-params-from}'
18           steps:
19             - shell: !include-raw-escape:
20                 - ../shell/docker-get-git-describe.sh
21       - conditional-step:
22           condition-kind: regex-match
23           regex: yaml-file-params
24           label: '{docker-use-params-from}'
25           steps:
26             - shell: !include-raw-escape:
27                 - ../shell/docker-get-yaml-tag.sh
28       - inject:
29           # Import the docker image information from the previous build step
30           properties-file: 'env_docker_inject.txt'
31
32
33 - builder:
34     name: lf-docker-build
35     builders:
36       - inject:
37           properties-content: |
38             DOCKER_ARGS={docker-build-args}
39             DOCKER_NAME={docker-name}
40             DOCKER_ROOT={docker-root}
41             CONTAINER_PULL_REGISTRY={container-public-registry}
42             CONTAINER_PUSH_REGISTRY={container-push-registry}
43       - shell: !include-raw-escape:
44           - ../shell/docker-build.sh
45
46 - builder:
47     name: lf-docker-push
48     builders:
49       - inject:
50           properties-content: |
51               CONTAINER_PUSH_REGISTRY={container-push-registry}
52       - shell: !include-raw-escape:
53           - ../shell/docker-push.sh
54
55 ####################
56 # COMMON FUNCTIONS #
57 ####################
58
59 - lf_docker_common: &lf_docker_common
60     name: lf-docker-common
61
62     project-type: freestyle
63     node: '{build-node}'
64
65     ######################
66     # Default parameters #
67     ######################
68
69     branch: master
70     build-days-to-keep: 7
71     build-timeout: 60
72     submodule-disable: false
73     submodule-recursive: true
74     submodule-timeout: 10
75     pre_docker_build_script: '# pre docker build script goes here'
76     post_docker_build_script: '# post docker build script goes here'
77     docker-use-params-from: ''
78     disable-job: 'false'
79     docker-root: '$WORKSPACE'
80     docker-build-args: ''
81     git-url: '$GIT_URL/$PROJECT'
82
83     #####################
84     # Job Configuration #
85     #####################
86
87     disabled: '{disable-job}'
88
89     properties:
90       - lf-infra-properties:
91           build-days-to-keep: '{build-days-to-keep}'
92
93     parameters:
94       - lf-infra-parameters:
95           branch: '{branch}'
96           project: '{project}'
97           refspec: 'refs/heads/{branch}'
98           stream: '{stream}'
99
100     wrappers:
101       - lf-infra-wrappers:
102           build-timeout: '{build-timeout}'
103           jenkins-ssh-credential: '{jenkins-ssh-credential}'
104
105     publishers:
106       - lf-infra-publish
107
108 - docker_verify_common: &docker_verify_common
109     name: docker-verify-common
110
111     concurrent: true
112
113     scm:
114       - lf-infra-gerrit-scm:
115           jenkins-ssh-credential: '{jenkins-ssh-credential}'
116           git-url: '{git-url}'
117           refspec: '$GERRIT_REFSPEC'
118           branch: '$GERRIT_BRANCH'
119           submodule-disable: '{submodule-disable}'
120           submodule-recursive: '{submodule-recursive}'
121           submodule-timeout: '{submodule-timeout}'
122           choosing-strategy: gerrit
123
124     gerrit_verify_triggers:
125       - patchset-created-event:
126           exclude-drafts: true
127           exclude-trivial-rebase: false
128           exclude-no-code-change: false
129       - draft-published-event
130       - comment-added-contains-event:
131           comment-contains-value: '^Patch Set[ ]+[0-9]+:([ ]+|[\n]+)(recheck|reverify)$'
132
133     builders:
134       - lf-infra-pre-build
135       - lf-infra-docker-login:
136           global-settings-file: 'global-settings'
137           settings-file: '{mvn-settings}'
138       - shell: '{pre_docker_build_script}'
139       - lf-docker-get-container-tag:
140           docker-use-params-from: '{docker-use-params-from}'
141           docker-root: '{docker-root}'
142       - lf-docker-build:
143           docker-build-args: '{docker-build-args}'
144           docker-name: '{docker-name}'
145           docker-root: '{docker-root}'
146           container-public-registry: '{container-public-registry}'
147           container-push-registry: '{container-push-registry}'
148       - shell: '{post_docker_build_script}'
149       - lf-provide-maven-settings-cleanup
150
151 - docker_merge_common: &docker_merge_common
152     name: docker-merge-common
153
154     scm:
155       - lf-infra-gerrit-scm:
156           jenkins-ssh-credential: '{jenkins-ssh-credential}'
157           git-url: '{git-url}'
158           refspec: '$GERRIT_REFSPEC'
159           branch: '$GERRIT_BRANCH'
160           submodule-disable: '{submodule-disable}'
161           submodule-recursive: '{submodule-recursive}'
162           submodule-timeout: '{submodule-timeout}'
163           choosing-strategy: gerrit
164
165     gerrit_merge_triggers:
166       - change-merged-event
167       - comment-added-contains-event:
168           comment-contains-value: remerge$
169
170     builders:
171       - lf-infra-pre-build
172       - lf-infra-docker-login:
173           global-settings-file: 'global-settings'
174           settings-file: '{mvn-settings}'
175       - shell: '{pre_docker_build_script}'
176       - lf-docker-get-container-tag:
177           docker-use-params-from: '{docker-use-params-from}'
178           docker-root: '{docker-root}'
179       - lf-docker-build:
180           docker-build-args: '{docker-build-args}'
181           docker-name: '{docker-name}'
182           docker-root: '{docker-root}'
183           container-public-registry: '{container-public-registry}'
184           container-push-registry: '{container-push-registry}'
185       - shell: '{post_docker_build_script}'
186       # Provided all steps have already passed, push the docker image
187       - lf-docker-push:
188           container-push-registry: '{container-push-registry}'
189       - lf-provide-maven-settings-cleanup
190
191 #################
192 # Docker Verify #
193 #################
194
195 - job-template:
196     name: '{project-name}-docker-verify-{stream}'
197     id: gerrit-docker-verify
198     # Job template for Docker verify jobs
199     #
200     # The purpose of this job template is to run a docker build, and potentially
201     # test validation of the docker image
202
203     <<: *lf_docker_common
204     # yamllint disable-line rule:key-duplicates
205     <<: *docker_verify_common
206
207     triggers:
208       - gerrit:
209           server-name: '{gerrit-server-name}'
210           trigger-on: '{obj:gerrit_verify_triggers}'
211           projects:
212             - project-compare-type: ANT
213               project-pattern: '{project}'
214               branches:
215                 - branch-compare-type: ANT
216                   branch-pattern: '**/{branch}'
217
218 - job-template:
219     name: '{project-name}-docker-verify-{stream}'
220     id: github-docker-verify
221     # Job template for Docker verify jobs
222     #
223     # The purpose of this job template is to run a docker build, and potentially
224     # test validation of the docker image
225
226     <<: *lf_docker_common
227     # yamllint disable-line rule:key-duplicates
228     <<: *docker_verify_common
229
230     properties:
231       - lf-infra-properties:
232           build-days-to-keep: '{build-days-to-keep}'
233       - github:
234           url: '{github-url}/{github-org}/{project}'
235
236     scm:
237       - lf-infra-github-scm:
238           url: '{git-clone-url}{github-org}/{project}'
239           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
240           branch: '$sha1'
241           submodule-recursive: '{submodule-recursive}'
242           submodule-timeout: '{submodule-timeout}'
243           submodule-disable: '{submodule-disable}'
244           choosing-strategy: default
245           jenkins-ssh-credential: '{jenkins-ssh-credential}'
246
247     triggers:
248       - github-pull-request:
249           trigger-phrase: '^(recheck|reverify)$'
250           only-trigger-phrase: false
251           status-context: 'Docker Verify'
252           permit-all: true
253           github-hooks: true
254           white-list-target-branches:
255             - '{branch}'
256           included-regions: '{obj:github_included_regions}'
257
258 ################
259 # Docker Merge #
260 ################
261
262 - job-template:
263     name: '{project-name}-docker-merge-{stream}'
264     id: gerrit-docker-merge
265     # Job template for Docker merge jobs
266     #
267     # The purpose of this job template is to run a docker build, and potentially
268     # test validation of the docker image
269
270     <<: *lf_docker_common
271     # yamllint disable-line rule:key-duplicates
272     <<: *docker_merge_common
273
274     triggers:
275       - gerrit:
276           server-name: '{gerrit-server-name}'
277           trigger-on: '{obj:gerrit_merge_triggers}'
278           projects:
279             - project-compare-type: ANT
280               project-pattern: '{project}'
281               branches:
282                 - branch-compare-type: ANT
283                   branch-pattern: '**/{branch}'
284
285 - job-template:
286     name: '{project-name}-docker-merge-{stream}'
287     id: github-docker-merge
288     # Job template for Docker merge jobs
289     #
290     # The purpose of this job template is to run a docker build, and potentially
291     # test validation of the docker image
292
293     <<: *lf_docker_common
294     # yamllint disable-line rule:key-duplicates
295     <<: *docker_merge_common
296
297     properties:
298       - lf-infra-properties:
299           build-days-to-keep: '{build-days-to-keep}'
300       - github:
301           url: '{github-url}/{github-org}/{project}'
302
303     scm:
304       - lf-infra-github-scm:
305           url: '{git-clone-url}{github-org}/{project}'
306           refspec: ''
307           branch: 'refs/heads/{branch}'
308           submodule-recursive: '{submodule-recursive}'
309           submodule-timeout: '{submodule-timeout}'
310           submodule-disable: '{submodule-disable}'
311           choosing-strategy: default
312           jenkins-ssh-credential: '{jenkins-ssh-credential}'
313
314     triggers:
315       - github
316       - pollscm:
317           cron: ''
318       - github-pull-request:
319           trigger-phrase: '^remerge$'
320           only-trigger-phrase: true
321           status-context: 'Docker Merge'
322           permit-all: true
323           github-hooks: true
324           org-list:
325             - '{github-org}'
326           white-list: '{obj:github_pr_whitelist}'
327           admin-list: '{obj:github_pr_admin_list}'
328           white-list-target-branches:
329             - '{branch}'
330           included-regions: '{obj:github_included_regions}'