| --- |
| ########### |
| # ANCHORS # |
| ########### |
| - docker_job_boiler_plate: &docker_job_boiler_plate |
| name: docker_job_boiler_plate |
| |
| project-type: freestyle |
| node: '{build-node}' |
| |
| ###################### |
| # Default parameters # |
| ###################### |
| |
| branch: master |
| submodule-recursive: true |
| |
| # default params for docker jobs |
| pre_build_script: '' |
| post_build_script: '' |
| docker_root: '$WORKSPACE' |
| docker_build_args: '' |
| docker_name: 'unnamed' |
| # Default to LF standard 'snapshots' docker registry |
| docker_registry: '$DOCKER_REGISTRY:10003' |
| docker_tag: 'latest' |
| submodule-disable: false |
| submodule-timeout: 10 |
| |
| ##################### |
| # Job Configuration # |
| ##################### |
| |
| properties: |
| - lf-infra-properties: |
| build-days-to-keep: '{build-days-to-keep}' |
| |
| parameters: |
| - lf-infra-parameters: |
| branch: '{branch}' |
| project: '{project}' |
| stream: '{stream}' |
| lftools-version: '{lftools-version}' |
| |
| wrappers: |
| - lf-infra-wrappers: |
| build-timeout: '{build-timeout}' |
| jenkins-ssh-credential: '{jenkins-ssh-credential}' |
| |
| publishers: |
| - lf-infra-publish |
| |
| - docker_verify_boiler_plate: &docker_verify_boiler_plate |
| name: docker_verify_boiler_plate |
| |
| concurrent: true |
| |
| scm: |
| - gerrit-trigger-scm: |
| refspec: '$GERRIT_REFSPEC' |
| choosing-strategy: 'default' |
| submodule-recursive: '{submodule-recursive}' |
| |
| triggers: |
| - gerrit-trigger-patch-submitted: |
| status-context: '{project}-Docker-Verify' |
| server: '{server-name}' |
| project: '{project}' |
| branch: '{branch}' |
| files: '{files}' |
| |
| - docker_merge_boiler_plate: &docker_merge_boiler_plate |
| name: docker_merge_boiler_plate |
| |
| scm: |
| - gerrit-trigger-scm: |
| refspec: '$GERRIT_REFSPEC' |
| choosing-strategy: 'default' |
| submodule-recursive: '{submodule-recursive}' |
| |
| triggers: |
| - gerrit-trigger-patch-merged: |
| server: '{server-name}' |
| project: '{project}' |
| branch: '{branch}' |
| files: '{files}' |
| - pollscm: |
| cron: '' |
| |
| ################# |
| # JOB TEMPLATES # |
| ################# |
| - job-template: |
| name: '{project-name}-{stream}-merge-docker' |
| # Job template for Docker merge jobs |
| # |
| # The purpose of this job template is to run a docker build, and potentially |
| # test validation of the docker image |
| |
| <<: *docker_job_boiler_plate |
| # yamllint disable-line rule:key-duplicates |
| <<: *docker_merge_boiler_plate |
| |
| builders: |
| - lf-infra-pre-build |
| - lf-infra-docker-login: |
| global-settings-file: 'global-settings' |
| settings-file: '{mvn-settings}' |
| - shell: '{pre_build_script}' |
| - inject: |
| # Docker registry is purposely not using an '_' so as to not conflict |
| # with the Jenkins global env var |
| properties-content: | |
| DOCKER_ARGS={docker_build_args} |
| DOCKER_NAME={docker_name} |
| DOCKER_ROOT={docker_root} |
| DOCKER_TAG={docker_tag} |
| BUILD_MODE=SNAPSHOT |
| DOCKERREGISTRY={docker_registry} |
| # Do the docker build |
| - shell: !include-raw: ../shell/docker-build.sh |
| - inject: |
| # Import the docker image information from the build step |
| properties-file: 'env_inject.txt' |
| # Execute any post build clean-up or testing |
| - shell: '{post_build_script}' |
| # Provided all steps have already passed, push the docker image |
| - shell: !include-raw: ../shell/docker-push.sh |
| |
| - job-template: |
| name: '{project-name}-{stream}-verify-docker' |
| # Job template for Docker verify jobs |
| # |
| # The purpose of this job template is to run a docker build, and potentially |
| # test validation of the docker image |
| |
| ###################### |
| # Default parameters # |
| ###################### |
| |
| <<: *docker_job_boiler_plate |
| # yamllint disable-line rule:key-duplicates |
| <<: *docker_verify_boiler_plate |
| |
| builders: |
| - lf-infra-pre-build |
| - lf-infra-docker-login: |
| global-settings-file: 'global-settings' |
| settings-file: '{mvn-settings}' |
| - shell: '{pre_build_script}' |
| - inject: |
| # Docker registry is purposely not using an '_' so as to not conflict |
| # with the Jenkins global env var |
| properties-content: | |
| DOCKER_ARGS={docker_build_args} |
| DOCKER_NAME={docker_name} |
| DOCKER_ROOT={docker_root} |
| DOCKER_TAG={docker_tag} |
| BUILD_MODE=SNAPSHOT |
| DOCKERREGISTRY={docker_registry} |
| # Do the docker build |
| - shell: !include-raw: ../shell/docker-build.sh |
| - inject: |
| # Import the docker image information from the build step |
| properties-file: 'env_inject.txt' |
| # Execute any post build clean-up or testing |
| - shell: '{post_build_script}' |
| |
| - job-template: |
| # Job template for creating a docker manifest list |
| # |
| # The purpose of this job template is to run: |
| # 1. docker_push_manifest.sh script (which needs to exist in the |
| # project implementation repo) |
| |
| name: '{project-name}-docker-manifest-{stream}' |
| <<: *docker_job_boiler_plate |
| node: '{build-node}' |
| build-timeout: 15 |
| |
| parameters: |
| - lf-infra-parameters: |
| project: '{project}' |
| stream: '{stream}' |
| branch: '{branch}' |
| - string: |
| name: PARENT_JOB_NAME |
| default: 'none' |
| |
| disabled: '{obj:disabled}' |
| |
| scm: |
| - lf-infra-gerrit-scm: |
| jenkins-ssh-credential: '{jenkins-ssh-credential}' |
| git-url: '$GIT_URL/$PROJECT' |
| refspec: '$GERRIT_REFSPEC' |
| branch: '$GERRIT_BRANCH' |
| submodule-recursive: true |
| submodule-disable: '{submodule-disable}' |
| submodule-timeout: '{submodule-timeout}' |
| choosing-strategy: default |
| |
| |
| builders: |
| - lf-infra-docker-login: |
| global-settings-file: 'global-settings' |
| settings-file: '{mvn-settings}' |
| - shell: | |
| #!/bin/bash -ex |
| export PARENT_JOB_NAME |
| ./docker_push_manifest.sh |
| |
| - job-template: |
| # Job template for staging jobs on multiple architectures |
| # |
| # The purpose of this job template is to: |
| # 1. Run parallel maven-docker-stage jobs for each supported architecure |
| # 2. Build and push a docker manifest list for the images created by |
| # the previous jobs |
| |
| name: '{project-name}-multiarch-docker-stage-{stream}' |
| node: '{build-node}' |
| project-type: multijob |
| disabled: '{obj:disabled}' |
| build-timeout: 15 |
| pattern: '**' |
| |
| parameters: |
| - lf-infra-parameters: |
| project: '{project}' |
| stream: '{stream}' |
| branch: '{branch}' |
| - string: |
| name: DOCKER_REGISTRY |
| default: 'none' |
| - string: |
| name: DOCKERHUB_REGISTRY |
| default: 'registry-1.docker.io' |
| |
| disabled: '{obj:disabled}' |
| |
| properties: |
| - throttle: |
| max-per-node: 1 |
| option: 'project' |
| - build-blocker: |
| use-build-blocker: true |
| blocking-jobs: |
| - '{project-name}-.*-docker-.*' |
| blocking-level: 'NODE' |
| |
| scm: |
| - lf-infra-gerrit-scm: |
| jenkins-ssh-credential: '{jenkins-ssh-credential}' |
| git-url: '$GIT_URL/$PROJECT' |
| refspec: '$GERRIT_REFSPEC' |
| branch: '$GERRIT_BRANCH' |
| submodule-recursive: true |
| submodule-timeout: 10 |
| submodule-disable: false |
| choosing-strategy: default |
| |
| triggers: |
| - timed: '@daily' |
| - gerrit: |
| server-name: '{gerrit-server-name}' |
| trigger-on: |
| - comment-added-contains-event: |
| comment-contains-value: '^Patch Set\s+\d+:\s+stage-(docker-)?release\s*$' |
| |
| projects: |
| - project-compare-type: ANT |
| project-pattern: '{project}' |
| branches: |
| - branch-compare-type: ANT |
| branch-pattern: '**/{branch}' |
| file-paths: |
| - compare-type: ANT |
| pattern: "**" |
| |
| builders: |
| - multijob: |
| name: 'build docker images' |
| condition: ALWAYS |
| execution-type: PARALLEL |
| projects: |
| - name: '{project-name}-amd64-maven-docker-stage-{stream}' |
| kill-phase-on: FAILURE |
| current-parameters: true |
| - name: '{project-name}-arm64-maven-docker-stage-{stream}' |
| kill-phase-on: NEVER |
| current-parameters: true |
| - multijob: |
| name: 'publish docker manifest' |
| condition: SUCCESSFUL |
| execution-type: PARALLEL |
| projects: |
| - name: '{project-name}-docker-manifest-{stream}' |
| current-parameters: true |
| predefined-parameters: | |
| PARENT_JOB_NAME=$JOB_NAME |
| DOCKERHUB_REGISTRY=docker.io |
| |
| publishers: |
| - lf-infra-publish |