summaryrefslogtreecommitdiffstats
path: root/jjb
diff options
context:
space:
mode:
Diffstat (limited to 'jjb')
-rw-r--r--jjb/apex/apex.yml161
-rwxr-xr-xjjb/dovetail/dovetail-artifacts-upload.sh71
-rw-r--r--jjb/dovetail/dovetail-artifacts-upload.yml130
-rw-r--r--jjb/dovetail/dovetail-ci-jobs.yml8
-rw-r--r--jjb/dovetail/dovetail-project-jobs.yml24
-rwxr-xr-xjjb/functest/functest-cleanup.sh37
-rw-r--r--jjb/global/slave-params.yml13
-rw-r--r--jjb/infra/bifrost-verify-jobs.yml4
-rw-r--r--jjb/kvmfornfv/kvmfornfv.yml28
-rw-r--r--jjb/opera/opera-daily-jobs.yml143
-rw-r--r--jjb/opera/opera-project-jobs.yml57
-rw-r--r--jjb/opera/opera-verify-jobs.yml155
12 files changed, 794 insertions, 37 deletions
diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml
index 20a7dbcdd..70731b568 100644
--- a/jjb/apex/apex.yml
+++ b/jjb/apex/apex.yml
@@ -9,6 +9,9 @@
- 'apex-deploy-virtual-{scenario}-{stream}'
- 'apex-deploy-baremetal-{scenario}-{stream}'
- 'apex-daily-{stream}'
+ - 'apex-daily-colorado'
+ - 'apex-build-colorado'
+ - 'apex-deploy-baremetal-os-odl_l2-fdio-ha-colorado'
# stream: branch with - in place of / (eg. stable-arno)
# branch: branch (eg. stable/arno)
@@ -548,6 +551,160 @@
failure-threshold: 'never'
unstable-threshold: 'FAILURE'
+
+# Colorado Build
+- job-template:
+ name: 'apex-build-colorado'
+
+ # Job template for builds
+ #
+ # Required Variables:
+ # stream: branch with - in place of / (eg. stable)
+ # branch: branch (eg. stable)
+ node: 'apex-daily-colorado'
+
+ disabled: false
+
+ concurrent: true
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - apex-parameter:
+ gs-pathname: '/colorado'
+ - gerrit-parameter:
+ branch: 'stable/colorado'
+ - string:
+ name: GIT_BASE
+ default: https://gerrit.opnfv.org/gerrit/$PROJECT
+ description: "Used for overriding the GIT URL coming from parameters macro."
+
+ scm:
+ - git-scm
+
+ properties:
+ - build-blocker:
+ use-build-blocker: true
+ block-level: 'NODE'
+ blocking-jobs:
+ - 'apex-deploy.*'
+ - throttle:
+ max-per-node: 1
+ max-total: 10
+ option: 'project'
+
+ builders:
+ - 'apex-build'
+ - 'apex-upload-artifact'
+
+
+# Colorado FDIO Deploy
+- job-template:
+ name: 'apex-deploy-baremetal-os-odl_l2-fdio-ha-colorado'
+
+ # Job template for baremetal deployment
+ #
+ # Required Variables:
+ # stream: branch with - in place of / (eg. stable)
+ # branch: branch (eg. stable)
+ node: 'lf-pod1'
+
+ disabled: false
+
+ scm:
+ - git-scm
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: 'stable/colorado'
+ - apex-parameter:
+ gs-pathname: '/colorado'
+ - string:
+ name: DEPLOY_SCENARIO
+ default: 'os-odl_l2-fdio-ha'
+ description: "Scenario to deploy with."
+
+ properties:
+ - build-blocker:
+ use-build-blocker: true
+ block-level: 'NODE'
+ blocking-jobs:
+ - 'apex-verify.*'
+ - 'apex-deploy.*'
+ - 'apex-build.*'
+
+
+ builders:
+ - 'apex-deploy'
+ - 'apex-workspace-cleanup'
+
+# Colorado FDIO Daily
+- job-template:
+ name: 'apex-daily-colorado'
+
+ # Job template for daily build
+ #
+ # Required Variables:
+ # stream: branch with - in place of / (eg. stable)
+ # branch: branch (eg. stable)
+ node: 'apex-daily-colorado'
+
+ disabled: false
+
+ scm:
+ - git-scm
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: 'stable/colorado'
+ - apex-parameter:
+ gs-pathname: '/colorado'
+
+ properties:
+ - build-blocker:
+ use-build-blocker: true
+ block-level: 'NODE'
+ blocking-jobs:
+ - 'apex-verify.*'
+ - 'apex-deploy.*'
+ - 'apex-build.*'
+ - 'apex-runner.*'
+
+ triggers:
+ - 'apex-colorado'
+
+ builders:
+ - trigger-builds:
+ - project: 'apex-build-colorado'
+ git-revision: true
+ current-parameters: true
+ same-node: true
+ block: true
+ - trigger-builds:
+ - project: 'apex-deploy-baremetal-os-odl_l2-fdio-ha-colorado'
+ predefined-parameters: |
+ BUILD_DIRECTORY=apex-build-colorado/.build
+ OPNFV_CLEAN=yes
+ git-revision: true
+ same-node: true
+ block-thresholds:
+ build-step-failure-threshold: 'never'
+ block: true
+ - trigger-builds:
+ - project: 'functest-apex-apex-daily-colorado-daily-colorado'
+ predefined-parameters:
+ DEPLOY_SCENARIO=os-odl_l2-fdio-ha
+ block: true
+ same-node: true
+ block-thresholds:
+ build-step-failure-threshold: 'never'
+ failure-threshold: 'never'
+ unstable-threshold: 'FAILURE'
+
- job-template:
name: 'apex-gs-clean-{stream}'
@@ -655,6 +812,10 @@
triggers:
- timed: '0 3 * * *'
- trigger:
+ name: 'apex-colorado'
+ triggers:
+ - timed: '0 12 * * *'
+- trigger:
name: 'apex-gs-clean-{stream}'
triggers:
- timed: '0 2 * * *'
diff --git a/jjb/dovetail/dovetail-artifacts-upload.sh b/jjb/dovetail/dovetail-artifacts-upload.sh
new file mode 100755
index 000000000..94e4129fc
--- /dev/null
+++ b/jjb/dovetail/dovetail-artifacts-upload.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+set -o pipefail
+
+echo "dovetail: pull and save the images"
+
+[[ -d ${CACHE_DIR} ]] || mkdir -p ${CACHE_DIR}
+
+cd ${CACHE_DIR}
+sudo docker pull ${DOCKER_REPO_NAME}:${DOCKER_TAG}
+sudo docker save -o ${STORE_FILE_NAME} ${DOCKER_REPO_NAME}:${DOCKER_TAG}
+
+importkey () {
+# clone releng repository
+echo "Cloning releng repository..."
+[ -d releng ] && rm -rf releng
+git clone https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/releng/ &> /dev/null
+#this is where we import the siging key
+if [ -f $WORKSPACE/releng/utils/gpg_import_key.sh ]; then
+ source $WORKSPACE/releng/utils/gpg_import_key.sh
+fi
+}
+
+sign () {
+gpg2 -vvv --batch --yes --no-tty \
+ --default-key opnfv-helpdesk@rt.linuxfoundation.org \
+ --passphrase besteffort \
+ --detach-sig ${CACHE_DIR}/${STORE_FILE_NAME}
+
+gsutil cp ${CACHE_DIR}/${STORE_FILE_NAME}.sig ${STORE_URL}/${STORE_FILE_NAME}.sig
+echo "signature Upload Complete!"
+}
+
+upload () {
+# log info to console
+echo "Uploading to artifact. This could take some time..."
+echo
+
+cd $WORKSPACE
+# upload artifact and additional files to google storage
+gsutil cp ${CACHE_DIR}/${STORE_FILE_NAME} ${STORE_URL}/${STORE_FILE_NAME}
+
+gsutil -m setmeta \
+ -h "Cache-Control:private, max-age=0, no-transform" \
+ ${STORE_URL}/${STORE_FILE_NAME} > /dev/null 2>&1
+
+# disabled errexit due to gsutil setmeta complaints
+# BadRequestException: 400 Invalid argument
+# check if we uploaded the file successfully to see if things are fine
+gsutil ls ${STORE_URL}/${STORE_FILE_NAME} > /dev/null 2>&1
+if [[ $? -ne 0 ]]; then
+ echo "Problem while uploading artifact!"
+ exit 1
+fi
+
+echo "dovetail: uploading Done!"
+echo
+echo "--------------------------------------------------------"
+echo
+}
+
+importkey
+sign
+upload
diff --git a/jjb/dovetail/dovetail-artifacts-upload.yml b/jjb/dovetail/dovetail-artifacts-upload.yml
new file mode 100644
index 000000000..dc2ae5aa2
--- /dev/null
+++ b/jjb/dovetail/dovetail-artifacts-upload.yml
@@ -0,0 +1,130 @@
+############################################
+# dovetail upload artifacts job
+############################################
+- project:
+ name: dovetail-artifacts-upload
+
+ project: 'dovetail'
+
+ jobs:
+ - 'dovetail-{image}-artifacts-upload-{stream}'
+
+ stream:
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+ disabled: false
+
+ image:
+ - 'dovetail'
+ - 'functest'
+ - 'yardstick'
+
+#############################################
+# job template
+#############################################
+
+- job-template:
+ name: 'dovetail-{image}-artifacts-upload-{stream}'
+
+
+ disabled: '{obj:disabled}'
+
+ concurrent: true
+
+ properties:
+ - throttle:
+ enabled: true
+ max-total: 1
+ max-per-node: 1
+ option: 'project'
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: '{branch}'
+ - 'opnfv-build-ubuntu-defaults'
+ - dovetail-parameter:
+ gs-pathname: '{gs-pathname}'
+ image: '{image}'
+ branch: '{branch}'
+
+ scm:
+ - git-scm
+
+ builders:
+ - 'dovetail-builder-artifacts-upload'
+ - 'dovetail-workspace-cleanup'
+
+####################
+# parameter macros
+####################
+- parameter:
+ name: dovetail-parameter
+ parameters:
+ - string:
+ name: CACHE_DIR
+ default: $WORKSPACE/cache{gs-pathname}
+ description: "the cache to store packages downloaded"
+ - string:
+ name: STORE_URL
+ default: gs://artifacts.opnfv.org/dovetail{gs-pathname}
+ description: "LF artifacts url for storage of dovetail packages"
+ - string:
+ name: DOCKER_REPO_NAME
+ default: opnfv/{image}
+ description: "docker repo name"
+ - string:
+ name: DOCKER_TAG
+ default: latest
+ description: "docker image tag of which will be uploaded to artifacts"
+ - string:
+ name: STORE_FILE_NAME
+ default: image_{image}_{branch}_$BUILD_ID.docker
+ description: "stored file name"
+
+####################################
+#builders for dovetail project
+####################################
+- builder:
+ name: dovetail-builder-artifacts-upload
+ builders:
+ - shell:
+ !include-raw: ./dovetail-artifacts-upload.sh
+
+- builder:
+ name: dovetail-workspace-cleanup
+ builders:
+ - shell: |
+ #!/bin/bash
+ set -o errexit
+
+ echo "Dovetail: cleanup cache used for storage downloaded packages"
+
+ /bin/rm -rf $CACHE_DIR
+
+ # Remove previous running containers if exist
+ if [[ -n "$(docker ps -a | grep $DOCKER_REPO_NAME)" ]]; then
+ echo "Removing existing $DOCKER_REPO_NAME containers..."
+ docker ps -a | grep $DOCKER_REPO_NAME | awk '{print $1}' | xargs docker rm -f
+ t=60
+ # Wait max 60 sec for containers to be removed
+ while [[ $t -gt 0 ]] && [[ -n "$(docker ps| grep $DOCKER_REPO_NAME)" ]]; do
+ sleep 1
+ let t=t-1
+ done
+ fi
+
+ # Remove existing images if exist
+ if [[ -n "$(docker images | grep $DOCKER_REPO_NAME)" ]]; then
+ echo "Docker images to remove:"
+ docker images | head -1 && docker images | grep $DOCKER_REPO_NAME
+ image_tags=($(docker images | grep $DOCKER_REPO_NAME | awk '{print $2}'))
+ for tag in "${image_tags[@]}"; do
+ if [[ -n "$(docker images|grep $DOCKER_REPO_NAME|grep $tag)" ]]; then
+ echo "Removing docker image $DOCKER_REPO_NAME:$tag..."
+ docker rmi -f $DOCKER_REPO_NAME:$tag
+ fi
+ done
+ fi
diff --git a/jjb/dovetail/dovetail-ci-jobs.yml b/jjb/dovetail/dovetail-ci-jobs.yml
index f41325020..2b6ab7621 100644
--- a/jjb/dovetail/dovetail-ci-jobs.yml
+++ b/jjb/dovetail/dovetail-ci-jobs.yml
@@ -103,22 +103,22 @@
auto-trigger-name: 'daily-trigger-disabled'
<<: *colorado
#armband CI PODs
- - armband_baremetal:
+ - armband-baremetal:
slave-label: armband-baremetal
SUT: fuel
auto-trigger-name: 'daily-trigger-disabled'
<<: *master
- - armband_virtual:
+ - armband-virtual:
slave-label: armband-virtual
SUT: fuel
auto-trigger-name: 'daily-trigger-disabled'
<<: *master
- - armband_baremetal:
+ - armband-baremetal:
slave-label: armband-baremetal
SUT: fuel
auto-trigger-name: 'daily-trigger-disabled'
<<: *colorado
- - armband_virtual:
+ - armband-virtual:
slave-label: armband-virtual
SUT: fuel
auto-trigger-name: 'daily-trigger-disabled'
diff --git a/jjb/dovetail/dovetail-project-jobs.yml b/jjb/dovetail/dovetail-project-jobs.yml
index 826684919..904841396 100644
--- a/jjb/dovetail/dovetail-project-jobs.yml
+++ b/jjb/dovetail/dovetail-project-jobs.yml
@@ -93,25 +93,21 @@
#builders for dovetail project
###############################
- builder:
- name: dovetail-unit-tests
+ name: dovetail-hello-world
builders:
- shell: |
#!/bin/bash
set -o errexit
- set -o pipefail
- echo "Running unit tests..."
- cd $WORKSPACE
- virtualenv $WORKSPACE/dovetail_venv
- source $WORKSPACE/dovetail_venv/bin/activate
+ echo "hello world"
- #packages installation
- easy_install -U setuptools
- easy_install -U pip
- pip install -r unittests/requirements.txt
- pip install -e .
- #unit tests
- /bin/bash $WORKSPACE/unittests/unittest.sh
+- builder:
+ name: dovetail-unit-tests
+ builders:
+ - shell: |
+ #!/bin/bash
+ set -o errexit
+ set -o pipefail
- deactivate
+ tox
diff --git a/jjb/functest/functest-cleanup.sh b/jjb/functest/functest-cleanup.sh
index a1ae67d99..f8140e058 100755
--- a/jjb/functest/functest-cleanup.sh
+++ b/jjb/functest/functest-cleanup.sh
@@ -3,19 +3,34 @@
[[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null"
echo "Cleaning up docker containers/images..."
+FUNCTEST_IMAGE=opnfv/functest
+# Remove containers along with image opnfv/functest:<none>
+dangling_images=($(docker images -f "dangling=true" | grep $FUNCTEST_IMAGE | awk '{print $1}'))
+if [[ -n ${dangling_images} ]]; then
+ echo " Removing $FUNCTEST_IMAGE:<none> images and their containers..."
+ for image_id in "${dangling_images[@]}"; do
+ echo " Removing image_id: $image_id and its containers"
+ docker ps -a | grep $image_id | awk '{print $1}'| xargs docker rm -f >${redirect}
+ docker rmi $image_id >${redirect}
+ done
+fi
+
# Remove previous running containers if exist
-if [[ ! -z $(docker ps -a | grep opnfv/functest) ]]; then
- echo "Removing existing opnfv/functest containers..."
- docker ps -a | grep opnfv/functest | awk '{print $1}' | xargs docker rm -f >${redirect}
+functest_containers=$(docker ps -a | grep $FUNCTEST_IMAGE | awk '{print $1}')
+if [[ -n ${functest_containers} ]]; then
+ echo " Removing existing $FUNCTEST_IMAGE containers..."
+ docker rm -f $functest_containers >${redirect}
fi
# Remove existing images if exist
-if [[ $CLEAN_DOCKER_IMAGES == true ]] && [[ ! -z $(docker images | grep opnfv/functest) ]]; then
- echo "Docker images to remove:"
- docker images | head -1 && docker images | grep opnfv/functest >${redirect}
- image_tags=($(docker images | grep opnfv/functest | awk '{print $2}'))
- for tag in "${image_tags[@]}"; do
- echo "Removing docker image opnfv/functest:$tag..."
- docker rmi opnfv/functest:$tag >/dev/null
- done
+if [[ $CLEAN_DOCKER_IMAGES == true ]]; then
+ functest_image_tags=($(docker images | grep $FUNCTEST_IMAGE | awk '{print $2}'))
+ if [[ -n ${functest_image_tags} ]]; then
+ echo " Docker images to be removed:" >${redirect}
+ (docker images | head -1 && docker images | grep $FUNCTEST_IMAGE) >${redirect}
+ for tag in "${functest_image_tags[@]}"; do
+ echo " Removing docker image $FUNCTEST_IMAGE:$tag..."
+ docker rmi $FUNCTEST_IMAGE:$tag >${redirect}
+ done
+ fi
fi
diff --git a/jjb/global/slave-params.yml b/jjb/global/slave-params.yml
index 7eec70918..30ebb950f 100644
--- a/jjb/global/slave-params.yml
+++ b/jjb/global/slave-params.yml
@@ -425,6 +425,19 @@
name: GIT_BASE
default: https://gerrit.opnfv.org/gerrit/$PROJECT
- parameter:
+ name: 'huawei-pod7-defaults'
+ parameters:
+ - node:
+ name: SLAVE_NAME
+ description: 'Slave name on Jenkins'
+ allowed-slaves:
+ - huawei-pod7
+ default-slaves:
+ - huawei-pod7
+ - string:
+ name: GIT_BASE
+ default: https://gerrit.opnfv.org/gerrit/$PROJECT
+- parameter:
name: 'zte-pod1-defaults'
parameters:
- node:
diff --git a/jjb/infra/bifrost-verify-jobs.yml b/jjb/infra/bifrost-verify-jobs.yml
index 422a42274..baf33ea3a 100644
--- a/jjb/infra/bifrost-verify-jobs.yml
+++ b/jjb/infra/bifrost-verify-jobs.yml
@@ -132,10 +132,6 @@
timeout: 10
wipe-workspace: true
- triggers:
- - '{project}-gerrit-trigger':
- branch: '{branch}'
-
builders:
- description-setter:
description: "Built on $NODE_NAME"
diff --git a/jjb/kvmfornfv/kvmfornfv.yml b/jjb/kvmfornfv/kvmfornfv.yml
index a708c8af2..33c73f9a7 100644
--- a/jjb/kvmfornfv/kvmfornfv.yml
+++ b/jjb/kvmfornfv/kvmfornfv.yml
@@ -201,20 +201,40 @@
- description-setter:
description: "Built on $NODE_NAME"
- multijob:
- name: build
+ name: cyclictest-build
condition: SUCCESSFUL
projects:
- - name: 'kvmfornfv-{testname}-daily-build-{stream}'
+ - name: 'kvmfornfv-cyclictest-daily-build-{stream}'
current-parameters: false
node-parameters: false
git-revision: true
kill-phase-on: FAILURE
abort-all-job: true
- multijob:
- name: build
+ name: cyclictest-test
+ condition: SUCCESSFUL
+ projects:
+ - name: 'kvmfornfv-cyclictest-daily-test-{stream}'
+ current-parameters: false
+ node-parameters: false
+ git-revision: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: packetforward-build
+ condition: SUCCESSFUL
+ projects:
+ - name: 'kvmfornfv-packet_forward-daily-build-{stream}'
+ current-parameters: false
+ node-parameters: false
+ git-revision: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: packetforward-test
condition: SUCCESSFUL
projects:
- - name: 'kvmfornfv-{testname}-daily-test-{stream}'
+ - name: 'kvmfornfv-packet_forward-daily-test-{stream}'
current-parameters: false
node-parameters: false
git-revision: true
diff --git a/jjb/opera/opera-daily-jobs.yml b/jjb/opera/opera-daily-jobs.yml
new file mode 100644
index 000000000..556d59fcb
--- /dev/null
+++ b/jjb/opera/opera-daily-jobs.yml
@@ -0,0 +1,143 @@
+- project:
+ name: 'opera-daily-jobs'
+
+ project: 'opera'
+
+#####################################
+# branch definitions
+#####################################
+ stream:
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+ disabled: false
+
+#####################################
+# patch verification phases
+#####################################
+ phase:
+ - 'basic'
+ - 'deploy'
+
+#####################################
+# jobs
+#####################################
+ jobs:
+ - 'opera-daily-{stream}'
+ - 'opera-daily-{phase}-{stream}'
+#####################################
+# job templates
+#####################################
+- job-template:
+ name: 'opera-daily-{stream}'
+
+ project-type: multijob
+
+ disabled: '{obj:disabled}'
+
+ concurrent: false
+
+ properties:
+ - throttle:
+ enabled: true
+ max-total: 1
+ max-per-node: 1
+ option: 'project'
+
+ scm:
+ - git-scm
+
+ wrappers:
+ - ssh-agent-wrapper
+
+ - timeout:
+ timeout: 120
+ fail: true
+
+ triggers:
+ - timed: '@midnight'
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: '{branch}'
+ - 'huawei-pod7-defaults'
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - multijob:
+ name: basic
+ condition: SUCCESSFUL
+ projects:
+ - name: 'opera-daily-basic-{stream}'
+ current-parameters: true
+ node-parameters: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: deploy
+ condition: SUCCESSFUL
+ projects:
+ - name: 'opera-daily-deploy-{stream}'
+ current-parameters: true
+ node-parameters: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+# - multijob:
+# name: functest
+# condition: SUCCESSFUL
+# projects:
+# - name: 'functest-compass-baremetal-suite-{stream}'
+# current-parameters: true
+# predefined-parameters:
+# FUNCTEST_SUITE_NAME=opera
+# node-parameters: true
+# kill-phase-on: NEVER
+# abort-all-job: true
+
+- job-template:
+ name: 'opera-daily-{phase}-{stream}'
+
+ disabled: '{obj:disabled}'
+
+ concurrent: true
+
+ properties:
+ - throttle:
+ enabled: true
+ max-per-node: 1
+ option: 'project'
+
+ scm:
+ - git-scm
+
+ wrappers:
+ - ssh-agent-wrapper
+ - timeout:
+ timeout: 120
+ fail: true
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - '{project}-daily-{phase}-macro'
+
+#####################################
+# builder macros
+#####################################
+- builder:
+ name: 'opera-daily-basic-macro'
+ builders:
+ - shell: |
+ #!/bin/bash
+ echo "Hello world!"
+
+- builder:
+ name: 'opera-daily-deploy-macro'
+ builders:
+ - shell: |
+ #!/bin/bash
+ echo "Hello world!"
+
diff --git a/jjb/opera/opera-project-jobs.yml b/jjb/opera/opera-project-jobs.yml
new file mode 100644
index 000000000..19f066b5f
--- /dev/null
+++ b/jjb/opera/opera-project-jobs.yml
@@ -0,0 +1,57 @@
+- project:
+
+ name: opera-project
+
+ project: 'opera'
+
+ stream:
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+
+ jobs:
+ - 'opera-build-{stream}'
+
+########################
+# job templates
+########################
+- job-template:
+ name: 'opera-build-{stream}'
+
+ concurrent: true
+
+ properties:
+ - throttle:
+ enabled: true
+ max-total: 1
+ max-per-node: 1
+ option: 'project'
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - 'opnfv-build-ubuntu-defaults'
+ - gerrit-parameter:
+ branch: '{branch}'
+
+ scm:
+ - git-scm
+
+ triggers:
+ - timed: 'H 23 * * *'
+
+ builders:
+ - 'opera-build-macro'
+
+#####################################
+# builder macros
+#####################################
+- builder:
+ name: 'opera-build-macro'
+ builders:
+ - shell: |
+ #!/bin/bash
+
+ echo "Hello world!"
+
+
diff --git a/jjb/opera/opera-verify-jobs.yml b/jjb/opera/opera-verify-jobs.yml
new file mode 100644
index 000000000..0e9dba01d
--- /dev/null
+++ b/jjb/opera/opera-verify-jobs.yml
@@ -0,0 +1,155 @@
+- project:
+ name: 'opera-verify-jobs'
+
+ project: 'opera'
+
+#####################################
+# branch definitions
+#####################################
+ stream:
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+ disabled: false
+
+#####################################
+# patch verification phases
+#####################################
+ phase:
+ - 'basic'
+ - 'deploy'
+
+#####################################
+# jobs
+#####################################
+ jobs:
+ - 'opera-verify-{stream}'
+ - 'opera-verify-{phase}-{stream}'
+#####################################
+# job templates
+#####################################
+- job-template:
+ name: 'opera-verify-{stream}'
+
+ project-type: multijob
+
+ disabled: '{obj:disabled}'
+
+ concurrent: true
+
+ properties:
+ - throttle:
+ enabled: true
+ max-total: 1
+ max-per-node: 1
+ option: 'project'
+
+ scm:
+ - git-scm-gerrit
+
+ wrappers:
+ - ssh-agent-wrapper
+ - timeout:
+ timeout: 120
+ fail: true
+
+ triggers:
+ - gerrit:
+ server-name: 'gerrit.opnfv.org'
+ 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: '{project}'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ file-paths:
+ - compare-type: ANT
+ pattern: '**/*'
+ forbidden-file-paths:
+ - compare-type: ANT
+ pattern: 'docs/**'
+ readable-message: true
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: '{branch}'
+ - 'huawei-pod7-defaults'
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - multijob:
+ name: basic
+ condition: SUCCESSFUL
+ projects:
+ - name: 'opera-verify-basic-{stream}'
+ current-parameters: true
+ node-parameters: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: deploy
+ condition: SUCCESSFUL
+ projects:
+ - name: 'opera-verify-deploy-{stream}'
+ current-parameters: true
+ node-parameters: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+
+- job-template:
+ name: 'opera-verify-{phase}-{stream}'
+
+ disabled: '{obj:disabled}'
+
+ concurrent: true
+
+ properties:
+ - throttle:
+ enabled: true
+ max-per-node: 1
+ option: 'project'
+
+ scm:
+ - git-scm-gerrit
+
+ wrappers:
+ - ssh-agent-wrapper
+ - timeout:
+ timeout: 120
+ fail: true
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - '{project}-verify-{phase}-macro'
+
+#####################################
+# builder macros
+#####################################
+- builder:
+ name: 'opera-verify-basic-macro'
+ builders:
+ - shell: |
+ #!/bin/bash
+ echo "Hello world!"
+
+- builder:
+ name: 'opera-verify-deploy-macro'
+ builders:
+ - shell: |
+ #!/bin/bash
+ echo "Hello world!"
+