Add packer verify and merge jobs for AGL 33/9733/2
authorAnil Belur <abelur@linuxfoundation.org>
Wed, 24 May 2017 09:20:50 +0000 (19:20 +1000)
committerAnil Belur <abelur@linuxfoundation.org>
Fri, 16 Jun 2017 00:00:34 +0000 (10:00 +1000)
Packer jobs are designed to rebuild new minon images regularly. These
jobs are also triggered on changes submitted to the templates or
provision scripts.

New images generated by packer must be manually updated on Jenkins.

Change-Id: Ie2e7dbcbc57148693ad1cf4179ceda2f7a3c9d1a
Signed-off-by: Anil Belur <abelur@linuxfoundation.org>
jjb/ci-management/ci-management.yaml
jjb/global-defaults.yaml
jjb/global-macros.yaml

index a519b75..07811ea 100644 (file)
@@ -4,10 +4,20 @@
     jobs:
       - 'ci-management-verify-jjb'
       - 'ci-management-merge'
+      - 'ci-management-verify-packer'
+      - 'ci-management-merge-packer-{platforms}-{templates}'
 
     project: 'ci-management'
     branch: master
 
+    platforms:
+        - ubuntu-16.04
+
+    templates:
+        - basebuild-agl-test-slave
+        - basebuild-control-slave
+        - basebuild
+
 - job-template:
     name: ci-management-verify-jjb
 
@@ -35,6 +45,7 @@
       - gerrit-trigger-patch-submitted:
           name: '{project}'
           branch: '{branch}'
+          files: '**/**'
 
     builders:
       - shell: |
@@ -65,7 +76,7 @@
           choosing-strategy: 'default'
 
     wrappers:
-      - agl-infra-wrappers:
+        - agl-infra-wrappers:
           build-timeout: '{build-timeout}'
 
     triggers:
     builders:
       - shell:
           !include-raw-escape: include-raw-jjb-update.sh
+
+
+- job-template:
+    name: 'ci-management-verify-packer'
+    project-type: freestyle
+    node: control-slave
+    concurrent: true
+
+    properties:
+      - agl-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          build-num-to-keep: '{build-num-to-keep}'
+
+
+    parameters:
+      - agl-infra-parameters:
+          project: '{project}'
+          branch: 'master'
+          refspec: 'refs/heads/master'
+
+    scm:
+      - gerrit-trigger-scm:
+          refspec: '$GERRIT_REFSPEC'
+          choosing-strategy: 'gerrit'
+
+    wrappers:
+      - agl-infra-wrappers:
+          build-timeout: '{build-timeout}'
+
+    triggers:
+      - gerrit-trigger-patch-submitted:
+          name: 'AGL/AGL-repo'
+          branch: '{branch}'
+          files: 'packer/**'
+
+    builders:
+      - packer-validate:
+
+    publishers:
+      - archive:
+          artifacts: 'packer/*.log'
+          allow-empty: 'true'
+          only-if-success: 'true'
+
+- job-template:
+    name: 'ci-management-merge-packer-{platforms}-{templates}'
+    project-type: freestyle
+    node: control-slave
+
+    properties:
+      - agl-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          build-num-to-keep: '{build-num-to-keep}'
+
+    parameters:
+      - agl-infra-parameters:
+          project: '{project}'
+          branch: 'master'
+          refspec: 'refs/heads/master'
+
+    scm:
+      - gerrit-trigger-scm:
+          refspec: '$GERRIT_REFSPEC'
+          choosing-strategy: 'gerrit'
+
+    wrappers:
+      - ssh-agent-credentials:
+          users:
+              - '{ssh-credentials}'
+      - agl-infra-wrappers:
+          build-timeout: '{build-timeout}'
+
+    triggers:
+      - timed: '00 10 1 * *'
+      - gerrit:
+          trigger-on:
+            - change-merged-event
+            - comment-added-contains-event:
+                comment-contains-value: 'remerge'
+          projects:
+            - project-compare-type: 'ANT'
+              project-pattern: 'ci-management'
+              branches:
+                - branch-compare-type: 'ANT'
+                  branch-pattern: '**/{branch}'
+              file-paths:
+                - compare-type: ANT
+                  pattern: 'packer/vars/{platforms}.json'
+                - compare-type: ANT
+                  pattern: 'packer/templates/{templates}.json'
+                - compare-type: ANT
+                  pattern: 'packer/provision/{templates}.sh'
+                - compare-type: ANT
+                  pattern: 'packer/provision/system_reseal.sh'
+                - compare-type: ANT
+                  pattern: 'packer/provision/rh-user_data.sh'
+                - compare-type: ANT
+                  pattern: 'packer/provision/baseline.sh'
+                - compare-type: ANT
+                  pattern: 'packer/provision/null_data.sh'
+                - compare-type: ANT
+                  pattern: 'packer/provision/agl_dependencies.sh'
+                - compare-type: ANT
+                  pattern: 'packer/provision/agl_mirror.sh'
+                - compare-type: ANT
+                  pattern: 'packer/provision/basebuild-no-tmpfs.sh'
+
+
+    builders:
+      - packer-validate:
+      - packer-build:
+          platform: '{platforms}'
+          template: '{templates}'
+
+    publishers:
+      - archive:
+          artifacts: 'packer/*.log'
+          allow-empty: 'true'
+          only-if-success: 'true'
index 4e25be0..e019b2f 100644 (file)
@@ -11,3 +11,6 @@
     # Timeout in minutes
     build-timeout: 420
     ssh-credentials: 'agl-jobbuilder'
+
+    # AGL branch defaults
+    branch: master
index b84eedf..c73bd86 100644 (file)
               branches:
                 - branch-compare-type: 'ANT'
                   branch-pattern: '**/{branch}'
+              file-paths:
+                - compare-type: ANT
+                  pattern: '{files}'
 
 - trigger:
     name: gerrit-trigger-patch-submitted-manual-verified-silent
       - ansicolor
       - openstack:
           single-use: false
+
+- property:
+    name: agl-infra-properties
+    properties:
+        - build-discarder:
+            days-to-keep: '{build-days-to-keep}'
+            num-to-keep: '{build-num-to-keep}'
+
+- builder:
+    name: packer-validate
+    builders:
+      - config-file-provider:
+          files:
+            - file-id: 'packer-cloud-env'
+              variable: 'CLOUDENV'
+      - shell: |
+          #!/bin/bash -x
+          cd packer
+          varfiles="../packer/vars/*"
+          templates="../packer/templates/*"
+          provision="../packer/provision/*.sh"
+          for v in $varfiles; do
+              [[ "${v##*/}" =~ ^(cloud-env.*|README.*)$ ]] && 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
+    builders:
+      - config-file-provider:
+          files:
+            - file-id: 'packer-cloud-env'
+              variable: 'CLOUDENV'
+      - shell: |
+          cd packer
+          export PACKER_LOG="yes" && \
+          export PACKER_LOG_PATH="packer-build.log" && \
+                      packer.io build -color=false -var-file=$CLOUDENV \
+                       -var-file=../packer/vars/{platform}.json \
+                       -parallel=false \
+                       ../packer/templates/{template}.json