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