X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=jjb%2Fglobal-templates-docker.yaml;h=23a554ba96e936e72ac9ed15adc95a03b8151f0a;hb=f05189249163b371fb5acb80e1a53a117c8c636a;hp=3052dc2db0758a2e40e2d25ff3f92da823c10868;hpb=1440b813ea0d6d167b7e2bd78c007283dffa93f9;p=ci-management.git diff --git a/jjb/global-templates-docker.yaml b/jjb/global-templates-docker.yaml index 3052dc2db..23a554ba9 100644 --- a/jjb/global-templates-docker.yaml +++ b/jjb/global-templates-docker.yaml @@ -24,6 +24,8 @@ # Default to LF standard 'snapshots' docker registry docker_registry: '$DOCKER_REGISTRY:10003' docker_tag: 'latest' + submodule-disable: false + submodule-timeout: 10 ##################### # Job Configuration # @@ -125,52 +127,6 @@ # 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 @@ -211,124 +167,27 @@ - shell: '{post_build_script}' - job-template: - name: '{project-name}-{stream}-verify-docker-cascade-trigger' - # Job template for Docker verify jobs + # Job template for creating a docker manifest list # - # 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 # - ###################### + # 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 - # 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 - # - # 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 - 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 + node: '{build-node}' + build-timeout: 15 - triggers: - # 11 AM UTC - - timed: '@daily' - - gerrit-trigger-release-manually: - server: '{server-name}' + parameters: + - lf-infra-parameters: project: '{project}' + stream: '{stream}' branch: '{branch}' + - string: + name: PARENT_JOB_NAME + default: 'none' -- 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' + disabled: '{obj:disabled}' scm: - lf-infra-gerrit-scm: @@ -337,276 +196,58 @@ refspec: '$GERRIT_REFSPEC' branch: '$GERRIT_BRANCH' submodule-recursive: true + submodule-disable: '{submodule-disable}' + submodule-timeout: '{submodule-timeout}' 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 - # - # 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} - 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 + - shell: | + #!/bin/bash -ex + export PARENT_JOB_NAME + ./docker_push_manifest.sh - job-template: - name: '{project-name}-{subproject}-{stream}-merge-docker-cascade-trigger' - # Job template for Docker merge jobs + # Job template for staging jobs on multiple architectures # - # 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 + # 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 - 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 - triggers: - - reverse: - jobs: - - '{parent_job}' - result: 'success' - -- job-template: - name: '{project-name}-{subproject}-{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} - 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}' - - 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}' - triggers: - - reverse: - jobs: - - '{parent_job}' - result: 'success' - -- job-template: - name: '{project-name}-{subproject}-{stream}-release-version-docker-daily-no-sonar' - # 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. - # - # 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 - 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 + name: '{project-name}-multiarch-docker-stage-{stream}' + node: '{build-node}' + project-type: multijob + disabled: '{obj:disabled}' + build-timeout: 15 + pattern: '**' - triggers: - # 11 AM UTC - - timed: '@daily' - - gerrit-trigger-release-manually: - server: '{server-name}' + 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' -- 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 + disabled: '{obj:disabled}' - docker_registry: '$DOCKER_REGISTRY:10003' + 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: @@ -615,146 +256,50 @@ refspec: '$GERRIT_REFSPEC' branch: '$GERRIT_BRANCH' submodule-recursive: true + submodule-timeout: 10 + submodule-disable: false 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 - 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 - choosing-strategy: default + - 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: - - 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' - + - 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