[CORD-3039] new imagebuilder job

Change-Id: I8bc5974c71bc17b99e49671c2d3aabbec768ae80
diff --git a/jjb/imagebuilder.yaml b/jjb/imagebuilder.yaml
new file mode 100644
index 0000000..e29b11c
--- /dev/null
+++ b/jjb/imagebuilder.yaml
@@ -0,0 +1,74 @@
+---
+# CORD helm chart publishing tasks
+
+- project:
+    name: imagebuilder
+
+    # add repos that have documentation to the project list in both jobs
+    jobs:
+      - 'publish-imagebuilder':
+          project-regexp: '.*'
+          branch-regexp: '{supported-branches-regexp}'
+
+
+- job-template:
+    id: publish-imagebuilder
+    name: 'publish-imagebuilder'
+    description: |
+      Created by {id} job-template from ci-management/jjb/helm.yaml
+
+    triggers:
+      - cord-infra-gerrit-trigger-merge:
+          gerrit-server-name: '{gerrit-server-name}'
+          project-regexp: '{project-regexp}'
+          branch-regexp: '{branch-regexp}'
+          file-include-regexp: '{all-files-regexp}'
+          dependency-jobs: '{dependency-jobs}'
+
+    properties:
+      - cord-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: '{build-timeout}'
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    parameters:
+      - string:
+          name: executorNode
+          default: 'imagebuilder_node'
+          description: 'Name of the Jenkins node to run the job on'
+
+      - string:
+          name: manifestUrl
+          default: '{gerrit-server-url}/{cord-repo-manifest}'
+          description: 'URL to the repo manifest'
+
+      - string:
+          name: manifestBranch
+          default: '$GERRIT_BRANCH'
+          description: 'Name of the repo branch to use'
+
+      - string:
+          name: gerritProject
+          default: '$GERRIT_PROJECT'
+          description: 'Name of the Gerrit project'
+
+      - bool:
+          name: build
+          default: false
+          description: 'Rebuild all containers (same as "docker build --no-cache")'
+
+      - bool:
+          name: force
+          default: false
+          description: 'Force remove obsolete tags/images (same as "docker rmi --force")'
+
+
+    project-type: pipeline
+    concurrent: false
+
+    dsl: !include-raw-escape: pipeline/imagebuilder.groovy
+
diff --git a/jjb/pipeline/imagebuilder.groovy b/jjb/pipeline/imagebuilder.groovy
new file mode 100644
index 0000000..b86bc22
--- /dev/null
+++ b/jjb/pipeline/imagebuilder.groovy
@@ -0,0 +1,79 @@
+/* imagebuilder pipeline */
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.executorNode}"
+  }
+  stages {
+
+    stage('repo') {
+      steps {
+        checkout(changelog: false, \
+          poll: false,
+          scm: [$class: 'RepoScm', \
+            manifestRepositoryUrl: "${params.manifestUrl}", \
+            manifestBranch: "${params.manifestBranch}", \
+            currentBranch: true, \
+            destinationDir: 'cord', \
+            forceSync: true,
+            resetFirst: true, \
+            quiet: true, \
+            jobs: 4, \
+            showAllChanges: true] \
+          )
+      }
+    }
+
+    stage('imagebuilder'){
+      steps {
+        sh '''
+           #!/usr/bin/env bash
+
+           mkdir "$WORKSPACE/image_logs"
+           ib_args=""
+
+           if [[ ${params.force} == 'true' ]]; then
+             ib_args+="--force "
+           fi
+
+           if [[ ${params.build} == 'true' ]]; then
+             ib_args+="--build "
+           fi
+
+           pushd cord/automation-tools/developer
+           ./imagebuilder.py -vv \${ib_args} -c docker_images.yml \
+                             -a "$WORKSPACE/ib_actions.yml" \
+                             -l "$WORKSPACE/ib_logs" \
+                             -g "$WORKSPACE/ib_graph.dot"
+           popd
+           '''
+      }
+    }
+
+    stage('push'){
+       steps {
+         script {
+          def ib_actions = readYaml( file:"$WORKSPACE/ib_actions.yml" )
+
+          withDockerRegistry([credentialsId: 'docker-artifact-push-credentials']) {
+            for(image in ib_actions.ib_built){
+              for(tag in image.tags){
+                push_tag = image.base + ":" + tag
+                echo "Pushing image: " + push_tag
+                docker.image(push_tag).push()
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  post {
+    always {
+      archiveArtifacts artifacts: 'ib_actions.yml, ib_graph.dot, ib_logs/*', fingerprint: true
+      deleteDir()
+    }
+  }
+}