From 88405ef9ee466381aac64b46f1be34ef16224496 Mon Sep 17 00:00:00 2001 From: Denes Nemeth Date: Tue, 19 Jun 2018 14:21:59 +0800 Subject: Support cascade triggered docker images. Add new templates for building Docker images that are triggered by the job that builds the artifacts that is required to build the Docker image. Change-Id: Iafd46c6814971949223ef2d7b03d1fbbbda1a9fa Issue-ID: VFC-728 Signed-off-by: Denes Nemeth --- jjb/global-templates-docker.yaml | 345 ++++++++++++++++++++++++ jjb/vfc/vfc-nfvo-driver-vnfm-svnfm-nokiav2.yaml | 7 +- 2 files changed, 350 insertions(+), 2 deletions(-) diff --git a/jjb/global-templates-docker.yaml b/jjb/global-templates-docker.yaml index b1db09a6b..7b5df8235 100644 --- a/jjb/global-templates-docker.yaml +++ b/jjb/global-templates-docker.yaml @@ -124,6 +124,51 @@ # 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-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: + - '{project-name}-{stream}-{subproject}-merge-java' + result: 'success' + - job-template: name: '{project-name}-{stream}-verify-docker' # Job template for Docker verify jobs @@ -162,6 +207,53 @@ # 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-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: + - '{project-name}-{stream}-{subproject}-verify-java' + result: 'success' + - job-template: name: '{project-name}-{stream}-release-version-docker-daily-no-sonar' # Job template for Docker daily release jobs @@ -219,6 +311,62 @@ 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 + choosing-strategy: default + + builders: + - 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: + - '{project-name}-{stream}-release-version-java-daily' + result: 'success' + - job-template: name: '{project-name}-{subproject}-{stream}-merge-docker' # Job template for Docker merge jobs @@ -255,6 +403,48 @@ # 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-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: + - '{project-name}-{stream}-{subproject}-merge-java' + result: 'success' + - job-template: name: '{project-name}-{subproject}-{stream}-verify-docker' # Job template for Docker verify jobs @@ -293,6 +483,49 @@ # 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-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: + - '{project-name}-{stream}-{subproject}-verify-java' + result: 'success' + - job-template: name: '{project-name}-{subproject}-{stream}-release-version-docker-daily-no-sonar' # Job template for Docker daily release jobs @@ -350,6 +583,62 @@ 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 + choosing-strategy: default + + builders: + - 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: + - '{project-name}-{stream}-{subproject}-release-version-java-daily' + result: 'success' + - job-template: name: '{project-name}-{subproject}-{stream}-release-version-docker-no-sonar' # Job template for Docker final release job @@ -399,3 +688,59 @@ # 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 + + builders: + - 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: + - '{project-name}-{stream}-{subproject}-release-version-java-daily' + result: 'success' + + diff --git a/jjb/vfc/vfc-nfvo-driver-vnfm-svnfm-nokiav2.yaml b/jjb/vfc/vfc-nfvo-driver-vnfm-svnfm-nokiav2.yaml index 7a93b8b8c..f87330011 100644 --- a/jjb/vfc/vfc-nfvo-driver-vnfm-svnfm-nokiav2.yaml +++ b/jjb/vfc/vfc-nfvo-driver-vnfm-svnfm-nokiav2.yaml @@ -34,15 +34,18 @@ pom: 'nokiav2/pom.xml' pattern: 'nokiav2/**' jobs: - - '{project-name}-{subproject}-{stream}-merge-docker': +#missing docker build for verify + - '{project-name}-{subproject}-{stream}-merge-docker-cascade-trigger': docker_build_args: '--build-arg MODE=-SNAPSHOT --build-arg REPO=snapshots' docker_name: 'onap/vfc/nfvo/svnfm/nokiav2' docker_root: '$WORKSPACE/nokiav2/deployment' - - '{project-name}-{subproject}-{stream}-release-version-docker-daily-no-sonar': + - '{project-name}-{subproject}-{stream}-release-version-docker-daily-no-sonar-cascade-trigger': docker_build_args: '--build-arg MODE= --build-arg REPO=staging' docker_name: 'onap/vfc/nfvo/svnfm/nokiav2' docker_root: '$WORKSPACE/nokiav2/deployment' docker_registry: '$DOCKER_REGISTRY:10003' +#Since the release is moved manually from the staging repo to the release repo this job can not +#be triggered in a cascade way - '{project-name}-{subproject}-{stream}-release-version-docker-no-sonar': docker_build_args: '--build-arg MODE= --build-arg REPO=releases' docker_name: 'onap/vfc/nfvo/svnfm/nokiav2' -- cgit 1.2.3-korg