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