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