# Default to LF standard 'snapshots' docker registry
docker_registry: '$DOCKER_REGISTRY:10003'
docker_tag: 'latest'
+ submodule-disable: false
+ submodule-timeout: 10
#####################
# Job Configuration #
<<: *docker_merge_boiler_plate
builders:
+ - lf-infra-pre-build
- lf-infra-docker-login:
global-settings-file: 'global-settings'
settings-file: '{mvn-settings}'
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
# Provided all steps have already passed, push the docker image
- shell: !include-raw: ../shell/docker-push.sh
+- job-template:
+ name: '{project-name}-{stream}-merge-docker-cascade-trigger'
+ # 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. This job is triggered by the it's corresponding
+ # job that builds the artifacts from which the docker image is built from. Projects
+ # using the {project-name}-{stream}-merge-docker job should move to this job. Because
+ # the {project-name}-{stream}-merge-docker has no garanties that the docker image is built
+ # from merged artifact.
+
+ <<: *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
+ triggers:
+ - reverse:
+ jobs:
+ - '{parent_job}'
+ result: 'success'
+
- job-template:
name: '{project-name}-{stream}-verify-docker'
# Job template for Docker verify jobs
<<: *docker_verify_boiler_plate
builders:
+ - lf-infra-pre-build
- lf-infra-docker-login:
global-settings-file: 'global-settings'
settings-file: '{mvn-settings}'
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
# Execute any post build clean-up or testing
- shell: '{post_build_script}'
+- job-template:
+ name: '{project-name}-{stream}-verify-docker-cascade-trigger'
+ # 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. This job is triggered by the it's corresponding
+ # job that builds the artifacts from which the docker image is built from. Projects
+ # using the {project-name}-{stream}-verify-docker job should move to this job. Because
+ # the {project-name}-{stream}-verify-docker has no garanties that the docker image is built
+ # from merged artifact.
+
+ ######################
+ # 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}'
+ triggers:
+ - reverse:
+ jobs:
+ - '{parent_job}'
+ result: 'success'
+
- job-template:
name: '{project-name}-{stream}-release-version-docker-daily-no-sonar'
# Job template for Docker daily release jobs
# branch: git branch (eg. stable/lithium or master)
<<: *docker_job_boiler_plate
- docker_registry: '$DOCKER_REGISTRY:10004'
+ docker_registry: '$DOCKER_REGISTRY:10003'
scm:
- lf-infra-gerrit-scm:
refspec: '$GERRIT_REFSPEC'
branch: '$GERRIT_BRANCH'
submodule-recursive: true
+ submodule-timeout: '{submodule-timeout}'
+ submodule-disable: '{submodule-disable}'
choosing-strategy: default
builders:
+ - lf-infra-pre-build
- lf-infra-docker-login:
global-settings-file: 'global-settings'
settings-file: '{mvn-settings}'
DOCKER_ROOT={docker_root}
DOCKER_TAG={docker_tag}
DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=STAGING
# Do the docker build
- shell: !include-raw: ../shell/snapshot-strip.sh
triggers:
# 11 AM UTC
- - timed: 'H 11 * * *'
+ - timed: '@daily'
- gerrit-trigger-release-manually:
server: '{server-name}'
project: '{project}'
branch: '{branch}'
+- job-template:
+ name: '{project-name}-{stream}-release-version-docker-daily-no-sonar-cascade-trigger'
+ # Job template for Docker daily release job.
+ #
+ # The purpose of this job template is to run "docker build and docker push"
+ # for projects using this template. This job is triggered by the daily build
+ # that builds the artifacts required for building the Docker image.
+ #
+ # Required Variables:
+ # branch: git branch (eg. stable/lithium or master)
+ <<: *docker_job_boiler_plate
+
+ docker_registry: '$DOCKER_REGISTRY:10003'
+
+ 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: '{submodule-timeout}'
+ submodule-disable: '{submodule-disable}'
+ choosing-strategy: default
+
+ 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}
+ DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=STAGING
+
+ # Do the docker build
+ - shell: !include-raw: ../shell/snapshot-strip.sh
+ - 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
+
+ triggers:
+ - reverse:
+ jobs:
+ - '{parent_job}'
+ result: 'success'
+
- job-template:
name: '{project-name}-{subproject}-{stream}-merge-docker'
# Job template for Docker merge jobs
<<: *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}
+ DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=SNAPSHOT
+ # 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}-{subproject}-{stream}-merge-docker-cascade-trigger'
+ # 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. This job is triggered by the merge job
+ # that builds the artifacts required for building 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}'
DOCKER_ROOT={docker_root}
DOCKER_TAG={docker_tag}
DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=SNAPSHOT
# Do the docker build
- shell: !include-raw: ../shell/docker-build.sh
- inject:
- shell: '{post_build_script}'
# Provided all steps have already passed, push the docker image
- shell: !include-raw: ../shell/docker-push.sh
+ triggers:
+ - reverse:
+ jobs:
+ - '{parent_job}'
+ result: 'success'
- job-template:
name: '{project-name}-{subproject}-{stream}-verify-docker'
<<: *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}
+ DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=SNAPSHOT
+ # 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:
+ name: '{project-name}-{subproject}-{stream}-verify-docker-cascade-trigger'
+ # 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}'
DOCKER_ROOT={docker_root}
DOCKER_TAG={docker_tag}
DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=SNAPSHOT
# Do the docker build
- shell: !include-raw: ../shell/docker-build.sh
- inject:
properties-file: 'env_inject.txt'
# Execute any post build clean-up or testing
- shell: '{post_build_script}'
+ triggers:
+ - reverse:
+ jobs:
+ - '{parent_job}'
+ result: 'success'
- job-template:
name: '{project-name}-{subproject}-{stream}-release-version-docker-daily-no-sonar'
# branch: git branch (eg. stable/lithium or master)
<<: *docker_job_boiler_plate
- docker_registry: '$DOCKER_REGISTRY:10004'
+ docker_registry: '$DOCKER_REGISTRY:10003'
scm:
- lf-infra-gerrit-scm:
refspec: '$GERRIT_REFSPEC'
branch: '$GERRIT_BRANCH'
submodule-recursive: true
+ submodule-timeout: '{submodule-timeout}'
+ submodule-disable: '{submodule-disable}'
choosing-strategy: default
builders:
+ - lf-infra-pre-build
- lf-infra-docker-login:
global-settings-file: 'global-settings'
settings-file: '{mvn-settings}'
DOCKER_ROOT={docker_root}
DOCKER_TAG={docker_tag}
DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=STAGING
# Do the docker build
- shell: !include-raw: ../shell/snapshot-strip.sh
triggers:
# 11 AM UTC
- - timed: 'H 11 * * *'
+ - timed: '@daily'
- gerrit-trigger-release-manually:
server: '{server-name}'
project: '{project}'
branch: '{branch}'
+
+- job-template:
+ name: '{project-name}-{subproject}-{stream}-release-version-docker-daily-no-sonar-cascade-trigger'
+ # Job template for Docker daily release jobs
+ #
+ # The purpose of this job template is to run "docker build and docker push"
+ # for projects using this template. This job is triggered by the daily job
+ # that builds the artifacts required for building the Docker image.
+ #
+ # Required Variables:
+ # branch: git branch (eg. stable/lithium or master)
+ <<: *docker_job_boiler_plate
+
+ docker_registry: '$DOCKER_REGISTRY:10003'
+
+ 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: '{submodule-timeout}'
+ submodule-disable: '{submodule-disable}'
+ choosing-strategy: default
+
+ 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}
+ DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=STAGING
+
+ # Do the docker build
+ - shell: !include-raw: ../shell/snapshot-strip.sh
+ - 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
+
+ triggers:
+ - reverse:
+ jobs:
+ - '{parent_job}'
+ result: 'success'
+
+- job-template:
+ name: '{project-name}-{subproject}-{stream}-release-version-docker-no-sonar'
+ # Job template for Docker final release job
+ #
+ # The purpose of this job template is to run "docker build and docker push"
+ # for projects using this template.
+ #
+ # Required Variables:
+ # branch: git branch (eg. stable/lithium or master)
+ <<: *docker_job_boiler_plate
+
+ docker_registry: '$DOCKER_REGISTRY:10003'
+
+ 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: '{submodule-timeout}'
+ submodule-disable: '{submodule-disable}'
+ choosing-strategy: default
+
+ 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}
+ DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=STAGING
+
+ # Do the docker build
+ - shell: !include-raw: ../shell/snapshot-strip.sh
+ - 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}-{subproject}-{stream}-release-version-docker-cascade-trigger-no-sonar'
+ # Job template for Docker final release job
+ #
+ # The purpose of this job template is to run "docker build and docker push"
+ # for projects using this template. This job has no cascading counterpart, because the
+ # final release is moved manually to the release repo.
+ #
+ # Required Variables:
+ # branch: git branch (eg. stable/lithium or master)
+ <<: *docker_job_boiler_plate
+
+ docker_registry: '$DOCKER_REGISTRY:10003'
+
+ 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: '{submodule-timeout}'
+ submodule-disable: '{submodule-disable}'
+ choosing-strategy: default
+
+ 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}
+ DOCKERREGISTRY={docker_registry}
+ BUILD_MODE=STAGING
+
+ # Do the docker build
+ - shell: !include-raw: ../shell/snapshot-strip.sh
+ - 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
+ triggers:
+ - reverse:
+ jobs:
+ - '{parent_job}'
+ result: 'success'
+
+- 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