ec870b6d3ff3e8d744c34604e09ee5aa2cbd7186
[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     gerrit_trigger_file_paths:
134       - compare-type: REG_EXP
135         pattern: '.*'
136
137     # github_included_regions MUST match gerrit_trigger_file_paths
138     github_included_regions:
139       - '.*'
140
141     builders:
142       - lf-infra-pre-build
143       - lf-infra-docker-login:
144           global-settings-file: 'global-settings'
145           settings-file: '{mvn-settings}'
146       - shell: '{pre_docker_build_script}'
147       - lf-docker-get-container-tag:
148           docker-use-params-from: '{docker-use-params-from}'
149           docker-root: '{docker-root}'
150       - lf-docker-build:
151           docker-build-args: '{docker-build-args}'
152           docker-name: '{docker-name}'
153           docker-root: '{docker-root}'
154           container-public-registry: '{container-public-registry}'
155           container-push-registry: '{container-push-registry}'
156       - shell: '{post_docker_build_script}'
157       - lf-provide-maven-settings-cleanup
158
159 - docker_merge_common: &docker_merge_common
160     name: docker-merge-common
161
162     scm:
163       - lf-infra-gerrit-scm:
164           jenkins-ssh-credential: '{jenkins-ssh-credential}'
165           git-url: '{git-url}'
166           refspec: '$GERRIT_REFSPEC'
167           branch: '$GERRIT_BRANCH'
168           submodule-disable: '{submodule-disable}'
169           submodule-recursive: '{submodule-recursive}'
170           submodule-timeout: '{submodule-timeout}'
171           choosing-strategy: gerrit
172
173     gerrit_merge_triggers:
174       - change-merged-event
175       - comment-added-contains-event:
176           comment-contains-value: remerge$
177
178     gerrit_trigger_file_paths:
179       - compare-type: REG_EXP
180         pattern: '.*'
181
182     # github_included_regions MUST match gerrit_trigger_file_paths
183     github_included_regions:
184       - '.*'
185
186     builders:
187       - lf-infra-pre-build
188       - lf-infra-docker-login:
189           global-settings-file: 'global-settings'
190           settings-file: '{mvn-settings}'
191       - shell: '{pre_docker_build_script}'
192       - lf-docker-get-container-tag:
193           docker-use-params-from: '{docker-use-params-from}'
194           docker-root: '{docker-root}'
195       - lf-docker-build:
196           docker-build-args: '{docker-build-args}'
197           docker-name: '{docker-name}'
198           docker-root: '{docker-root}'
199           container-public-registry: '{container-public-registry}'
200           container-push-registry: '{container-push-registry}'
201       - shell: '{post_docker_build_script}'
202       # Provided all steps have already passed, push the docker image
203       - lf-docker-push:
204           container-push-registry: '{container-push-registry}'
205       - lf-provide-maven-settings-cleanup
206
207 #################
208 # Docker Verify #
209 #################
210
211 - job-template:
212     name: '{project-name}-docker-verify-{stream}'
213     id: gerrit-docker-verify
214     # Job template for Docker verify jobs
215     #
216     # The purpose of this job template is to run a docker build, and potentially
217     # test validation of the docker image
218
219     <<: *lf_docker_common
220     # yamllint disable-line rule:key-duplicates
221     <<: *docker_verify_common
222
223     triggers:
224       - gerrit:
225           server-name: '{gerrit-server-name}'
226           trigger-on: '{obj:gerrit_verify_triggers}'
227           projects:
228             - project-compare-type: ANT
229               project-pattern: '{project}'
230               branches:
231                 - branch-compare-type: ANT
232                   branch-pattern: '**/{branch}'
233               file-paths: '{obj:gerrit_trigger_file_paths}'
234
235 - job-template:
236     name: '{project-name}-docker-verify-{stream}'
237     id: github-docker-verify
238     # Job template for Docker verify jobs
239     #
240     # The purpose of this job template is to run a docker build, and potentially
241     # test validation of the docker image
242
243     <<: *lf_docker_common
244     # yamllint disable-line rule:key-duplicates
245     <<: *docker_verify_common
246
247     properties:
248       - lf-infra-properties:
249           build-days-to-keep: '{build-days-to-keep}'
250       - github:
251           url: '{github-url}/{github-org}/{project}'
252
253     scm:
254       - lf-infra-github-scm:
255           url: '{git-clone-url}{github-org}/{project}'
256           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
257           branch: '$sha1'
258           submodule-recursive: '{submodule-recursive}'
259           submodule-timeout: '{submodule-timeout}'
260           submodule-disable: '{submodule-disable}'
261           choosing-strategy: default
262           jenkins-ssh-credential: '{jenkins-ssh-credential}'
263
264     triggers:
265       - github-pull-request:
266           trigger-phrase: '^(recheck|reverify)$'
267           only-trigger-phrase: false
268           status-context: 'Docker Verify'
269           permit-all: true
270           github-hooks: true
271           white-list-target-branches:
272             - '{branch}'
273           included-regions: '{obj:github_included_regions}'
274
275 ################
276 # Docker Merge #
277 ################
278
279 - job-template:
280     name: '{project-name}-docker-merge-{stream}'
281     id: gerrit-docker-merge
282     # Job template for Docker merge jobs
283     #
284     # The purpose of this job template is to run a docker build, and potentially
285     # test validation of the docker image
286
287     <<: *lf_docker_common
288     # yamllint disable-line rule:key-duplicates
289     <<: *docker_merge_common
290
291     triggers:
292       - gerrit:
293           server-name: '{gerrit-server-name}'
294           trigger-on: '{obj:gerrit_merge_triggers}'
295           projects:
296             - project-compare-type: ANT
297               project-pattern: '{project}'
298               branches:
299                 - branch-compare-type: ANT
300                   branch-pattern: '**/{branch}'
301               file-paths: '{obj:gerrit_trigger_file_paths}'
302
303 - job-template:
304     name: '{project-name}-docker-merge-{stream}'
305     id: github-docker-merge
306     # Job template for Docker merge jobs
307     #
308     # The purpose of this job template is to run a docker build, and potentially
309     # test validation of the docker image
310
311     <<: *lf_docker_common
312     # yamllint disable-line rule:key-duplicates
313     <<: *docker_merge_common
314
315     properties:
316       - lf-infra-properties:
317           build-days-to-keep: '{build-days-to-keep}'
318       - github:
319           url: '{github-url}/{github-org}/{project}'
320
321     scm:
322       - lf-infra-github-scm:
323           url: '{git-clone-url}{github-org}/{project}'
324           refspec: ''
325           branch: 'refs/heads/{branch}'
326           submodule-recursive: '{submodule-recursive}'
327           submodule-timeout: '{submodule-timeout}'
328           submodule-disable: '{submodule-disable}'
329           choosing-strategy: default
330           jenkins-ssh-credential: '{jenkins-ssh-credential}'
331
332     triggers:
333       - github
334       - pollscm:
335           cron: ''
336       - github-pull-request:
337           trigger-phrase: '^remerge$'
338           only-trigger-phrase: true
339           status-context: 'Docker Merge'
340           permit-all: true
341           github-hooks: true
342           org-list:
343             - '{github-org}'
344           white-list: '{obj:github_pr_whitelist}'
345           admin-list: '{obj:github_pr_admin_list}'
346           white-list-target-branches:
347             - '{branch}'
348           included-regions: '{obj:github_included_regions}'