Support cascade triggered docker images. 55/55055/8
authorDenes Nemeth <denes.nemeth@nokia.com>
Tue, 19 Jun 2018 06:21:59 +0000 (14:21 +0800)
committerDenes Nemeth <denes.nemeth@nokia.com>
Mon, 25 Jun 2018 07:50:38 +0000 (09:50 +0200)
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 <denes.nemeth@nokia.com>
jjb/global-templates-docker.yaml
jjb/vfc/vfc-nfvo-driver-vnfm-svnfm-nokiav2.yaml

index b1db09a..7b5df82 100644 (file)
       # 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
       # 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
           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
       # 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
       # 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
           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
       # 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'
+
+
index 7a93b8b..f873300 100644 (file)
           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'