Merge "Update new images built for changes #50992 and #50976"
[releng/builder.git] / jjb / releng-macros.yaml
index c2ca83a74ca20090737a9695e86d167e66c2b493..ef6b63e45d471be20e23263b44f729f9da630238 100644 (file)
@@ -1,5 +1,11 @@
 # OLD Releng macros
 
+- property:
+    name: opendaylight-infra-properties
+    properties:
+        - build-discarder:
+            days-to-keep: '{build-days-to-keep}'
+
 - parameter:
     name: opendaylight-infra-parameters
     parameters:
             name: GERRIT_REFSPEC
             default: '{refspec}'
             description: "GERRIT_REFSPEC parameter if not given by trigger"
+        - string:
+            name: STACK_NAME
+            default: '$JOB_NAME-$BUILD_NUMBER'
+            description: "Used by Heat to generate a unique stack & vm name"
 
 - parameter:
     name: build-tag
             timeout: 360
             fail: true
 
+# This is a single macro to use for all jobs who vote on every (relevant) patch set.
+# Only 'recheck' trigger word is supported, it always triggers the full set of relevant jobs,
+# in order to prevent Jenkins from starting only a subset and still voting Verified+1.
+# Arguments:
+#     server: name of gerrit server to listen to
+#     project: pattern to match triggering projects
+#     branch: triggering branch name
+#     files: pattern to match triggering filepaths
 - trigger:
     name: gerrit-trigger-patch-submitted
     triggers:
         - gerrit:
-            server-name: 'OpenDaylight'
-            trigger-on:
-                - patchset-created-event:
-                    exclude-drafts: 'false'
-                    exclude-trivial-rebase: 'false'
-                    exclude-no-code-change: 'false'
-                - draft-published-event
-                - comment-added-contains-event:
-                    comment-contains-value: 'recheck'
-                - comment-added-contains-event:
-                    comment-contains-value: 'reverify'
-            projects:
-              - project-compare-type: 'ANT'
-                project-pattern: '{name}'
-                branches:
-                  - branch-compare-type: 'ANT'
-                    branch-pattern: '**/{branch}'
-
-- trigger:
-    name: gerrit-trigger-relevant-patch-submitted
-    triggers:
-        - gerrit:
-            server-name: 'OpenDaylight'
+            server-name: '{server}'
             trigger-on:
                 - patchset-created-event:
                     exclude-drafts: 'true'
                 - draft-published-event
                 - comment-added-contains-event:
                     comment-contains-value: 'recheck'
-                - comment-added-contains-event:
-                    comment-contains-value: 'reverify'
             projects:
-              - project-compare-type: 'ANT'
-                project-pattern: '{name}'
-                branches:
-                  - branch-compare-type: 'ANT'
-                    branch-pattern: '**/{branch}'
-
+                - project-compare-type: 'ANT'
+                  project-pattern: '{project}'
+                  branches:
+                      - branch-compare-type: 'ANT'
+                        branch-pattern: '**/{branch}'
+                  file-paths:
+                      - compare-type: 'ANT'
+                        pattern: '{files}'
+
+# TODO: Unify argument names across gerrit-trigger-* macros.
 - trigger:
     name: gerrit-trigger-patch-merged
     triggers:
         - gerrit:
-            server-name: 'OpenDaylight'
+            server-name: '{server-name}'
             trigger-on:
                 - change-merged-event
                 - comment-added-contains-event:
                     comment-contains-value: 'remerge'
             projects:
-              - project-compare-type: 'ANT'
-                project-pattern: '{name}'
-                branches:
-                  - branch-compare-type: 'ANT'
-                    branch-pattern: '**/{branch}'
+                - project-compare-type: 'ANT'
+                  project-pattern: '{name}'
+                  branches:
+                      - branch-compare-type: 'ANT'
+                        branch-pattern: '**/{branch}'
             skip-vote:
                 successful: true
                 failed: true
             gerrit-build-unstable-codereview-value: 0
             gerrit-build-notbuilt-codereview-value: 0
 
+# TODO: Unify argument names across gerrit-trigger-* macros.
 - trigger:
     name: gerrit-trigger-patch-sonar
     triggers:
         - gerrit:
-            server-name: 'OpenDaylight'
+            server-name: '{server-name}'
             trigger-on:
                 - comment-added-contains-event:
                     comment-contains-value: 'run-sonar'
                 unstable: true
                 notbuilt: true
 
-- trigger:
-    name: gerrit-trigger-patch-site-merged
-    triggers:
-        - gerrit:
-            server-name: 'OpenDaylight'
-            trigger-on:
-                - change-merged-event
-                - comment-added-contains-event:
-                    comment-contains-value: 'republish'
-            projects:
-              - project-compare-type: 'ANT'
-                project-pattern: '{name}'
-                branches:
-                    - branch-compare-type: 'ANT'
-                      branch-pattern: '**/{branch}'
-            # Force Jenkins always vote the values it should already have voted
-            # during the prior verify phase
-            override-votes: true
-            gerrit-build-started-verified-value: 1
-            gerrit-build-successful-verified-value: 1
-            gerrit-build-failed-verified-value: 1
-            gerrit-build-unstable-verified-value: 1
-            gerrit-build-notbuilt-verified-value: 1
-            gerrit-build-started-codereview-value: 0
-            gerrit-build-successful-codereview-value: 0
-            gerrit-build-failed-codereview-value: 0
-            gerrit-build-unstable-codereview-value: 0
-            gerrit-build-notbuilt-codereview-value: 0
-
 - publisher:
     name: archive-artifacts
     publishers:
     name: email-notification
     publishers:
         - email-ext:
-            recipients: 'jenkins@lists.opendaylight.org'
+            recipients: '{email-recipients}'
             reply-to: ''
             content-type: default
             subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
     publishers:
         - postbuildscript:
             builders:
+                - shell: |
+                    if [ -d "$WORKSPACE/.venv-openstack" ]; then
+                        source $WORKSPACE/.venv-openstack/bin/activate
+                        openstack --os-cloud rackspace stack delete --yes $STACK_NAME
+                    fi
                 - shell: !include-raw: include-raw-deploy-archives.sh
                 - maven-target:
                         maven-version: '{maven-version}'
               - '**/*.jenkins-trigger'
             fail-build: false
 
+- builder:
+    name: opendaylight-infra-stack
+    # opendaylight-infra-stack.sh has a required variable {stack-template} that
+    # must be passed into this macro.
+    builders:
+        - shell: !include-raw: opendaylight-infra-stack.sh
+        - shell: !include-raw-escape: opendaylight-infra-copy-ssh-keys.sh
+
+- builder:
+    name: opendaylight-infra-push-gerrit-patch
+    # opendaylight-infra-push-gerrit-patch.sh allows a job to push a patch to
+    # Gerrit in an automated fashion. This is meant for tasks that creates
+    # the same patch regularly and needs the ability to detect if an unreviewed
+    # patch already exists. In which case it will update the existing patch.
+    #
+    # Note: This patch assumes the $WORKSPACE contains the project repo with
+    #       the files changed already "git add" and waiting for a "git commit" call.
+    #
+    # This script requires the following JJB variables to be passed in:
+    #     {project}       Gerrit project-name
+    #     {gerrit-topic}  Gerrit topic, please make a unique topic.
+    #     {gerrit-commit-message} Commit message to assign to commit.
+    # NOTE: Requires git review to be installed on node.
+    builders:
+        - shell: !include-raw: opendaylight-infra-push-gerrit-patch.sh
+
+- builder:
+    name: distribute-build-url
+    # Place URL of the current run of a build job to a file at given path.
+    builders:
+        - shell: 'echo "$BUILD_URL" > {path}/build.url'
+
 - builder:
     name: wipe-org-opendaylight-repo
     builders:
     # needed by OpenDaylight infra.
     name: opendaylight-infra-wrappers
     wrappers:
+        - mask-passwords
+        - config-file-provider:
+            files:
+                - file-id: rackspace-heat
+                  target: '$HOME/.config/openstack/clouds.yaml'
         - timeout:
             type: absolute
             timeout: '{build-timeout}'
         - ssh-agent-credentials:
             users:
                 - 'opendaylight-jenkins-ssh'
-        - jclouds:
-            single-use: True
         - openstack:
             single-use: True
 
                   variable: 'CLOUDENV'
         - shell: |
             cd packer
-            export PACKER_LOG="yes" && \
-            export PACKER_LOG_PATH="packer-validate.log" && \
-                        packer.io validate -var-file=$CLOUDENV \
-                         -var-file=../packer/vars/{platform}.json \
-                         ../packer/templates/{template}.json
+            varfiles="../packer/vars/*"
+            templates="../packer/templates/*"
+            provision="../packer/provision/*.sh"
+            for v in $varfiles; do
+                [[ "${v##*/}" =~ ^(cloud-env.*)$ ]] && continue
+                for t in $templates; do
+                    export PACKER_LOG="yes" && \
+                    export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \
+                                packer.io validate -var-file=$CLOUDENV \
+                                -var-file=$v $t
+                    if [ $? -ne 0 ]; then
+                        break
+                    fi
+                done
+            done
+            for p in $provision; do
+                /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1
+            done
 
 - builder:
     name: packer-build
                         packer.io build -var-file=$CLOUDENV \
                          -var-file=../packer/vars/{platform}.json \
                          ../packer/templates/{template}.json
+
+- builder:
+    # TODO: Verify signature after downloading users public key from a locally created
+    # repository instead of the public keymesh. This requires a process in place to get ODL
+    # developers public keys into a local repository without increasing the job thoughput.
+    name: verify-gpg-signature
+    builders:
+        - shell: !include-raw: include-raw-verify-gpg-signatures.sh