Merge "adding olt-voltha-build jjb"
diff --git a/Makefile b/Makefile
index 2d8c2ba..74377f4 100644
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,9 @@
 $(JOBCONFIG_DIR):
 	mkdir $@
 
+lint:
+	yamllint -c yamllint.conf jjb/
+
 test: $(VENV_DIR) $(JOBCONFIG_DIR)
 	source $(VENV_DIR)/bin/activate ; \
 	pipdeptree ; \
diff --git a/README.md b/README.md
index c8dca3d..0770dbe 100644
--- a/README.md
+++ b/README.md
@@ -106,20 +106,17 @@
 
 ### Testing job definitions
 
-JJB job definitions can be tested by running:
-
-```shell
-make test
-```
-
-Which will create a python virtualenv, install jenkins-job-builder in it, then
-try building all the job files, which are put in `job-configs` and can be
-inspected.
+JJB job definitions can be tested by running `make test`, which will create a
+python virtualenv, install jenkins-job-builder in it, then try building all the
+job files, which are put in `job-configs` and can be inspected.
 
 The output of this is somewhat difficult to decipher, sometimes requiring you
 to go through the python backtrace to figure out where the error occurred in
 the jenkins-job-builder source code.
 
+There is also a `make lint` target which will run `yamllint` on all the JJB
+YAML files, which can catch a variety of formatting errors.
+
 If you're writing a new shell script, it's a good idea to test it with
 [shellcheck](https://github.com/koalaman/shellcheck) before including it -
 failing to heed those messages then using `!include-escape` to add it to the
diff --git a/jjb/api-test.yaml b/jjb/api-test.yaml
index 3369ad5..595369f 100644
--- a/jjb/api-test.yaml
+++ b/jjb/api-test.yaml
@@ -35,6 +35,6 @@
       script-path: 'Jenkinsfile/verify-api-tests-JenkinsFile'
       scm:
         - git:
-           url: '{gerrit-server-url}/cord-tester'
-           branches:
-             - 'master'
+            url: '{gerrit-server-url}/cord-tester'
+            branches:
+              - 'master'
diff --git a/jjb/cord-macros.yaml b/jjb/cord-macros.yaml
index 8e43216..c287aab 100644
--- a/jjb/cord-macros.yaml
+++ b/jjb/cord-macros.yaml
@@ -69,7 +69,7 @@
       - gerrit:
           server-name: '{gerrit-server-name}'
           dependency-jobs: '{dependency-jobs}'
-          silent-start: True
+          silent-start: true
           trigger-on:
             - change-merged-event
           projects:
diff --git a/jjb/cord-onos-app-publishing.yaml b/jjb/cord-onos-app-publishing.yaml
new file mode 100644
index 0000000..87cca8c
--- /dev/null
+++ b/jjb/cord-onos-app-publishing.yaml
@@ -0,0 +1,40 @@
+---
+# onos-app-publishing
+
+- project:
+    name: onos-app-publishing
+
+    project-name: '{name}'
+
+    jobs:
+      - 'onos-app-publishing'
+
+
+- job-template:
+    id: onos-app-publishing
+    name: 'cord-onos-app-publishing'
+    description: |
+      <!-- Managed by Jenkins Job Builder -->
+      Created by {id} job-template from ci-management/jjb/cord-onos-app-publishing.yaml
+
+    properties:
+      - cord-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+    node: 'ubuntu16.04-basebuild-1c-2g'
+    project-type: pipeline
+    concurrent: true
+
+    pipeline-scm:
+      scm:
+        - cord-infra-gerrit-repo-scm:
+          manifest-url: '{gerrit-server-url}/{cord-repo-manifest}'
+          branch: 'master'
+          destination-dir: 'cord'
+      script-path: 'cord-onos-publisher/Jenkinsfile'
+
+    triggers:
+       - timed: |
+                 TZ=America/Los_Angeles
+                 H 0 * * *
diff --git a/jjb/cord-test/cord-test-pipeline.yaml b/jjb/cord-test/cord-test-pipeline.yaml
deleted file mode 100644
index 19f7402..0000000
--- a/jjb/cord-test/cord-test-pipeline.yaml
+++ /dev/null
@@ -1,224 +0,0 @@
----
-# POD Nightly Build Pipeline Jobs
-
-- test-pipe-job-boiler-plate: &test-pipe-job-boiler-plate
-    name: test-pipe-job-boiler-plate
-
-    project-type: pipeline
-
-    sandbox: true
-
-    properties:
-      - cord-infra-properties:
-          build-days-to-keep: '{build-days-to-keep}'
-          artifact-num-to-keep: '{artifact-num-to-keep}'
-
-
-- job-parameters-plate: &job-parameters-plate
-    name: job-parameters-plate
-    <<: *test-pipe-job-boiler-plate
-
-    parameters:
-      - string:
-         name: devNodeName
-         default: '{pod}'
-         description: 'Jenkins node name of Dev Node'
-
-      - string:
-         name: configRepoUrl
-         default: 'https://gerrit.opencord.org/pod-configs'
-         description: 'The URL of the POD configs repository'
-
-      - string:
-         name: configRepoBaseDir
-         default: 'pod-configs/'
-         description: 'The directory inside the POD configs repository'
-
-      - string:
-         name: configRepoFile
-         default: 'deployment-configs/{pod}.yml'
-         description: 'The deployment config file'
-
-      - string:
-         name: branch
-         default: '{branch}'
-
-      - string:
-         name: notificationEmail
-         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
-         description: ''
-
-    concurrent: true
-
-- job-template:
-    name: 'build_{pod}_{branch}'
-    id: build_pod_first
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Nightly Physical POD Builds at {pod} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    <<: *job-parameters-plate
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord'
-           branches:
-             - '{branch}'
-
-    triggers:
-       - timed: |
-                 TZ=America/Los_Angeles
-                 H {time} * * *
-
-- job-template:
-    name: 'build_{pod}_{branch}'
-    id: build_pod
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Nightly Physical POD Builds at {pod} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    <<: *job-parameters-plate
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord'
-           branches:
-             - '{branch}'
-
-    triggers:
-        - reverse:
-            jobs: 'build-{pod}-{fromBranch}-test'
-            result: 'failure'
-
-- job-template:
-    name: 'build_{pod}_{branch}_test'
-    id: build_pod_test
-    description: |
-                  <!-- Managed by Jenkins Job Builder -->
-                  Post Tests on {pod} triggered by build_{pod}_{branch} <br /><br />
-                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
-                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
-                  Copyright (c) 2017 Open Networking Foundation (ONF)
-
-    branches: '{branch}'
-
-    <<: *job-parameters-plate
-
-    pipeline-scm:
-      script-path: '{Jenkinsfile}'
-      scm:
-        - git:
-           url: '{gerrit-server-url}/cord-tester'
-           branches:
-             - '{branch}'
-
-    triggers:
-      - reverse:
-          jobs: 'build-{pod}-{branch}'
-          result: 'failure'
-
-- project:
-    name: nightly-build-pipeline
-
-    project-name: '{name}'
-
-    build-timeout: '300'
-
-    jobs:
-      - 'build_pod_first':
-         pod: 'qct-pod1'
-         branch: 'cord-4.0'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         time: '20'
-
-      - 'build_pod':
-         pod: 'qct-pod1'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         fromBranch: 'cord-4.0'
-
-      - 'build_pod':
-         pod: 'qct-pod1'
-         branch: 'cord-5.0'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         fromBranch: 'cord-4.1'
-
-      - 'build_pod':
-         pod: 'qct-pod1'
-         branch: 'master'
-         Jenkinsfile: 'Jenkinsfile'
-         fromBranch: 'cord-5.0'
-
-      - 'build_pod_first':
-         pod: 'qct-pod3'
-         branch: 'cord-4.0'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         time: '20'
-
-      - 'build_pod':
-         pod: 'qct-pod3'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         fromBranch: 'cord-4.0'
-
-      - 'build_pod':
-         pod: 'qct-pod3'
-         branch: 'cord-5.0'
-         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
-         fromBranch: 'cord-4.1'
-
-      - 'build_pod':
-         pod: 'qct-pod3'
-         branch: 'master'
-         Jenkinsfile: 'Jenkinsfile'
-         fromBranch: 'cord-5.0'
-
-      - 'build_pod_test':
-         pod: 'qct-pod1'
-         branch: 'cord-4.0'
-         Jenkinsfile: 'Jenkinsfile-rcord'
-
-      - 'build_pod_test':
-         pod: 'qct-pod1'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile-rcord'
-
-      - 'build_pod_test':
-         pod: 'qct-pod1'
-         branch: 'cord-5.0'
-         Jenkinsfile: 'Jenkinsfile-rcord'
-
-      - 'build_pod_test':
-         pod: 'qct-pod1'
-         branch: 'master'
-         Jenkinsfile: 'Jenkinsfile-rcord'
-
-      - 'build_pod_test':
-         pod: 'qct-pod3'
-         branch: 'cord-4.0'
-         Jenkinsfile: 'Jenkinsfile-rcord'
-
-      - 'build_pod_test':
-         pod: 'qct-pod3'
-         branch: 'cord-4.1'
-         Jenkinsfile: 'Jenkinsfile-rcord'
-
-      - 'build_pod_test':
-         pod: 'qct-pod3'
-         branch: 'cord-5.0'
-         Jenkinsfile: 'Jenkinsfile-rcord'
-
-      - 'build_pod_test':
-         pod: 'qct-pod3'
-         branch: 'master'
-         Jenkinsfile: 'Jenkinsfile-rcord'
diff --git a/jjb/cord-test/ecord-build.yaml b/jjb/cord-test/ecord-build.yaml
new file mode 100644
index 0000000..d73677e
--- /dev/null
+++ b/jjb/cord-test/ecord-build.yaml
@@ -0,0 +1,105 @@
+---
+# POD Nightly Build Pipeline E-CORD Jobs
+
+- project:
+    name: ecord-nightly-build-pipeline
+
+    project-name: '{name}'
+
+    build-timeout: '300'
+
+    jobs:
+      # qct pod 3 build jobs (ecord-global)
+      - 'build_pod_first':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-global.yml'
+         profile: 'ecord-global'
+         branch: 'cord-4.1'
+         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
+         time: '20'
+
+      - 'build_pod':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-global.yml'
+         profile: 'ecord-global'
+         branch: 'cord-5.0'
+         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
+         fromBranch: 'cord-4.1'
+
+      - 'build_pod':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-global.yml'
+         profile: 'ecord-global'
+         branch: 'master'
+         Jenkinsfile: 'Jenkinsfile'
+         fromBranch: 'cord-5.0'
+
+      # qct pod 3 test jobs (ecord-global)
+      - 'build_pod_test':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-global.yml'
+         profile: 'ecord-global'
+         branch: 'cord-4.1'
+         Jenkinsfile: 'Jenkinsfile-ecord-global'
+
+      - 'build_pod_test':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-global.yml'
+         profile: 'ecord-global'
+         branch: 'cord-5.0'
+         Jenkinsfile: 'Jenkinsfile-ecord-global'
+
+
+      - 'build_pod_test':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-global.yml'
+         profile: 'ecord-global'
+         branch: 'master'
+         Jenkinsfile: 'Jenkinsfile-ecord-global'
+
+      # qct pod 3 build jobs (ecord-local)
+      - 'build_pod_first':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-local.yml'
+         profile: 'ecord-local'
+         branch: 'cord-4.1'
+         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
+         time: '3'
+
+      - 'build_pod':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-local.yml'
+         profile: 'ecord-local'
+         branch: 'cord-5.0'
+         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
+         fromBranch: 'cord-4.1'
+
+      - 'build_pod':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-local.yml'
+         profile: 'ecord-local'
+         branch: 'master'
+         Jenkinsfile: 'Jenkinsfile'
+         fromBranch: 'cord-5.0'
+
+      # qct pod 3 test jobs (ecord-local)
+      - 'build_pod_test':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-local.yml'
+         profile: 'ecord-local'
+         branch: 'cord-4.1'
+         Jenkinsfile: 'Jenkinsfile-ecord-local'
+
+      - 'build_pod_test':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-local.yml'
+         profile: 'ecord-local'
+         branch: 'cord-5.0'
+         Jenkinsfile: 'Jenkinsfile-ecord-local'
+
+      - 'build_pod_test':
+         pod: 'qct-pod3'
+         pod_config: 'qct-pod3-ecord-local.yml'
+         profile: 'ecord-local'
+         branch: 'master'
+         Jenkinsfile: 'Jenkinsfile-ecord-local'
diff --git a/jjb/cord-test/nightly-build-pipeline.yaml b/jjb/cord-test/nightly-build-pipeline.yaml
new file mode 100644
index 0000000..d38334f
--- /dev/null
+++ b/jjb/cord-test/nightly-build-pipeline.yaml
@@ -0,0 +1,189 @@
+---
+# POD Nightly Build Pipeline Jobs
+
+- test-pipe-job-boiler-plate: &test-pipe-job-boiler-plate
+    name: test-pipe-job-boiler-plate
+
+    project-type: pipeline
+
+    sandbox: true
+
+    properties:
+      - cord-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+- job-template:
+    name: 'build_{profile}_{pod}_{branch}'
+    id: build_pod_first
+    description: |
+                  <!-- Managed by Jenkins Job Builder -->
+                  Nightly Physical POD Builds at {pod} using {pod_config} <br /><br />
+                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
+                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
+                  Copyright (c) 2017 Open Networking Foundation (ONF)
+
+    <<: *test-pipe-job-boiler-plate
+
+    parameters:
+      - string:
+         name: devNodeName
+         default: '{pod}'
+         description: 'Jenkins node name of Dev Node'
+
+      - string:
+         name: configRepoUrl
+         default: 'https://gerrit.opencord.org/pod-configs'
+         description: 'The URL of the POD configs repository'
+
+      - string:
+         name: configRepoBaseDir
+         default: 'pod-configs/'
+         description: 'The directory inside the POD configs repository'
+
+      - string:
+         name: configRepoFile
+         default: 'deployment-configs/{pod_config}'
+         description: 'The deployment config file'
+
+      - string:
+         name: branch
+         default: '{branch}'
+
+      - string:
+         name: notificationEmail
+         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
+         description: ''
+
+    concurrent: true
+
+    pipeline-scm:
+      script-path: '{Jenkinsfile}'
+      scm:
+        - git:
+           url: '{gerrit-server-url}/cord'
+           branches:
+             - '{branch}'
+
+    triggers:
+       - timed: |
+                 TZ=America/Los_Angeles
+                 H {time} * * *
+
+
+- job-template:
+    name: 'build_{profile}_{pod}_{branch}'
+    id: build_pod
+    description: |
+                  <!-- Managed by Jenkins Job Builder -->
+                  Nightly Physical POD Builds at {pod} using {pod_config} <br /><br />
+                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
+                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
+                  Copyright (c) 2017 Open Networking Foundation (ONF)
+
+    <<: *test-pipe-job-boiler-plate
+
+    parameters:
+      - string:
+         name: devNodeName
+         default: '{pod}'
+         description: 'Jenkins node name of Dev Node'
+
+      - string:
+         name: configRepoUrl
+         default: 'https://gerrit.opencord.org/pod-configs'
+         description: 'The URL of the POD configs repository'
+
+      - string:
+         name: configRepoBaseDir
+         default: 'pod-configs/'
+         description: 'The directory inside the POD configs repository'
+
+      - string:
+         name: configRepoFile
+         default: 'deployment-configs/{pod_config}'
+         description: 'The deployment config file'
+
+      - string:
+         name: branch
+         default: '{branch}'
+
+      - string:
+         name: notificationEmail
+         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
+         description: ''
+
+    concurrent: true
+
+    pipeline-scm:
+      script-path: '{Jenkinsfile}'
+      scm:
+        - git:
+           url: '{gerrit-server-url}/cord'
+           branches:
+             - '{branch}'
+
+    triggers:
+        - reverse:
+            jobs: 'build_{profile}_{pod}_{fromBranch}_test'
+            result: 'failure'
+
+
+- job-template:
+    name: 'build_{profile}_{pod}_{branch}_test'
+    id: build_pod_test
+    description: |
+                  <!-- Managed by Jenkins Job Builder -->
+                  Post Tests on {pod} triggered by build_{pod}_{branch} <br /><br />
+                  Created from job-template {id} from ci-management/jjb/cord-test/cord-test-pipeline.yaml <br />
+                  Created by Kailash Khalasi - kailash@opennetworking.org <br />
+                  Copyright (c) 2017 Open Networking Foundation (ONF)
+
+    branches: '{branch}'
+
+    <<: *test-pipe-job-boiler-plate
+
+    parameters:
+      - string:
+         name: devNodeName
+         default: '{pod}'
+         description: 'Jenkins node name of Dev Node'
+
+      - string:
+         name: configRepoUrl
+         default: 'https://gerrit.opencord.org/pod-configs'
+         description: 'The URL of the POD configs repository'
+
+      - string:
+         name: configRepoBaseDir
+         default: 'pod-configs/'
+         description: 'The directory inside the POD configs repository'
+
+      - string:
+         name: configRepoFile
+         default: 'deployment-configs/{pod_config}'
+         description: 'The deployment config file'
+
+      - string:
+         name: branch
+         default: '{branch}'
+
+      - string:
+         name: notificationEmail
+         default: 'kailash@opennetworking.org, you@opennetworking.org, suchitra@opennetworking.org'
+         description: ''
+
+    concurrent: true
+
+    pipeline-scm:
+      script-path: '{Jenkinsfile}'
+      scm:
+        - git:
+           url: '{gerrit-server-url}/cord-tester'
+           branches:
+             - '{branch}'
+
+    triggers:
+      - reverse:
+          jobs: 'build_{profile}_{pod}_{branch}'
+          result: 'failure'
diff --git a/jjb/cord-test/rcord-build.yaml b/jjb/cord-test/rcord-build.yaml
new file mode 100644
index 0000000..20795d2
--- /dev/null
+++ b/jjb/cord-test/rcord-build.yaml
@@ -0,0 +1,72 @@
+---
+# POD Nightly Build Pipeline R-CORD Jobs
+
+- project:
+    name: rcord-nightly-build-pipeline
+
+    project-name: '{name}'
+
+    build-timeout: '300'
+
+    jobs:
+      # qct pod 1 build jobs (rcord)
+      - 'build_pod_first':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'cord-4.0'
+         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
+         time: '20'
+
+      - 'build_pod':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'cord-4.1'
+         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
+         fromBranch: 'cord-4.0'
+
+      - 'build_pod':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'cord-5.0'
+         Jenkinsfile: 'Jenkinsfile.newBuildSystem'
+         fromBranch: 'cord-4.1'
+
+      - 'build_pod':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'master'
+         Jenkinsfile: 'Jenkinsfile'
+         fromBranch: 'cord-5.0'
+
+      # qct pod 1 test jobs
+      - 'build_pod_test':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'cord-4.0'
+         Jenkinsfile: 'Jenkinsfile-rcord'
+
+      - 'build_pod_test':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'cord-4.1'
+         Jenkinsfile: 'Jenkinsfile-rcord'
+
+      - 'build_pod_test':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'cord-5.0'
+         Jenkinsfile: 'Jenkinsfile-rcord'
+
+      - 'build_pod_test':
+         pod: 'qct-pod1'
+         pod_config: 'qct-pod1.yml'
+         profile: 'rcord'
+         branch: 'master'
+         Jenkinsfile: 'Jenkinsfile-rcord'
diff --git a/jjb/release.yaml b/jjb/release.yaml
new file mode 100644
index 0000000..d3bcff7
--- /dev/null
+++ b/jjb/release.yaml
@@ -0,0 +1,47 @@
+---
+# release and repo manifest related jobs
+
+- job-template:
+    id: verify-repo-manifest
+    name: 'verify_{project}_repo-manifest'
+    description: |
+      <!-- Managed by Jenkins Job Builder -->
+      Created by verify-repo-manifest job-template from ci-management/jjb/release.yaml
+
+    triggers:
+      - cord-infra-gerrit-trigger-patchset:
+          gerrit-server-name: '{gerrit-server-name}'
+          project-regexp: '^{project}$'
+          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}'
+
+    scm:
+      - lf-infra-gerrit-scm:
+          git-url: '$GIT_URL/$GERRIT_PROJECT'
+          refspec: '$GERRIT_REFSPEC'
+          branch: '$GERRIT_BRANCH'
+          submodule-recursive: 'false'
+          choosing-strategy: gerrit
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    node: '{build-node}'
+    project-type: freestyle
+    concurrent: true
+
+    builders:
+      - shell: |
+          #/usr/bin/env bash
+          set -eu -o pipefail
+          ./validate_manifest.sh
+
diff --git a/jjb/sonar.yaml b/jjb/sonar.yaml
index a159abb..d7d3b9b 100644
--- a/jjb/sonar.yaml
+++ b/jjb/sonar.yaml
@@ -115,11 +115,6 @@
     project-type: freestyle
     concurrent: true
 
-# coverage checks with sonarqube
-# module docs: https://docs.openstack.org/infra/jenkins-job-builder/builders.html?highlight=sonar#builders.sonar
-# Sonarqube docs:
-#  https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins
-#  https://docs.sonarqube.org/display/SCAN/Advanced+SonarQube+Scanner+Usages
     builders:
       - sonar:
           sonar-name: 'sonarqube.opencord.org'
diff --git a/jjb/verify/kubernetes-service.yaml b/jjb/verify/kubernetes-service.yaml
new file mode 100644
index 0000000..ee8d3e0
--- /dev/null
+++ b/jjb/verify/kubernetes-service.yaml
@@ -0,0 +1,17 @@
+---
+# verification jobs for 'kubernetes-service' repo
+
+- project:
+    name: kubernetes-service
+    project: '{name}'
+
+    jobs:
+      - 'verify-kubernetes-service-jobs':
+          branch-regexp: '{supported-branches-regexp}'
+
+- job-group:
+    name: 'verify-kubernetes-service-jobs'
+    jobs:
+      - 'verify-licensed'
+      - 'verify-sonarqube':
+          dependency-jobs: 'verify_kubernetes-service_licensed'
diff --git a/jjb/verify/manifest.yaml b/jjb/verify/manifest.yaml
new file mode 100644
index 0000000..b79a915
--- /dev/null
+++ b/jjb/verify/manifest.yaml
@@ -0,0 +1,16 @@
+---
+# verification jobs for 'manifest' repo
+
+- project:
+    name: manifest
+    project: '{name}'
+
+    jobs:
+      - 'verify-manifest-jobs':
+          branch-regexp: '{supported-branches-regexp}'
+
+- job-group:
+    name: 'verify-manifest-jobs'
+    jobs:
+      - 'verify-repo-manifest'
+
diff --git a/jjb/verify/qa-manifest.yaml b/jjb/verify/qa-manifest.yaml
new file mode 100644
index 0000000..09bfbc9
--- /dev/null
+++ b/jjb/verify/qa-manifest.yaml
@@ -0,0 +1,16 @@
+---
+# verification jobs for 'qa-manifest' repo
+
+- project:
+    name: qa-manifest
+    project: '{name}'
+
+    jobs:
+      - 'verify-qa-manifest-jobs':
+          branch-regexp: '{supported-branches-regexp}'
+
+- job-group:
+    name: 'verify-qa-manifest-jobs'
+    jobs:
+      - 'verify-repo-manifest'
+