--- ########### # 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" 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