summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFatih Degirmenci <fdegir@gmail.com>2018-02-15 11:58:20 +0100
committerFatih Degirmenci <fdegir@gmail.com>2018-02-15 12:07:34 +0100
commit979cebfc6234ce0c73feb4caae6814f5ff7411b8 (patch)
tree63ff742c402cf2b52aef15f4760b768f19bb6c3f
parent8b2d00b74b608242afbdbf46796d45a5189327f2 (diff)
Enable verify jobs for external scenarios
This change extracts the scenario that is impacted by the patch which triggered the verify jobs and saves the scenario name into java properties file. This file will then be used by envInject plugin to inject the scenario name into the build environment. If the triggering change impacts multiple scenarios, the build will result in failure and the developer will be informed about a possible way to rectify the issue. Support for generic scenarios will be introduced in subsequent changes. Change-Id: I6406299c1352b6e9b8a9297c5441adf03445be33 Signed-off-by: Fatih Degirmenci <fdegir@gmail.com>
-rwxr-xr-xjjb/xci/xci-set-scenario.sh64
-rw-r--r--jjb/xci/xci-verify-jobs.yml30
2 files changed, 89 insertions, 5 deletions
diff --git a/jjb/xci/xci-set-scenario.sh b/jjb/xci/xci-set-scenario.sh
new file mode 100755
index 000000000..25f904b69
--- /dev/null
+++ b/jjb/xci/xci-set-scenario.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2018 SUSE 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 errexit
+set -o nounset
+set -o pipefail
+
+#----------------------------------------------------------------------
+# This script is used by CI and executed by Jenkins jobs.
+# You are not supposed to use this script manually if you don't know
+# what you are doing.
+#----------------------------------------------------------------------
+
+# skip the healthcheck if the patch doesn't impact the deployment
+if [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment ]]; then
+ echo "Skipping the healthcheck!"
+ exit 0
+fi
+
+# skip the deployment if the scenario is not supported on this distro
+OPNFV_SCENARIO_REQUIREMENTS=$WORKSPACE/xci/opnfv-scenario-requirements.yml
+if ! sed -n "/^- scenario: $DEPLOY_SCENARIO$/,/^$/p" $OPNFV_SCENARIO_REQUIREMENTS | grep -q $DISTRO; then
+ echo "# SKIPPED: Scenario $DEPLOY_SCENARIO is NOT supported on $DISTRO"
+ exit 0
+fi
+
+# if change is coming to releng-xci, continue as usual until that part is fixed as well
+if [[ $GERRIT_PROJECT == "releng-xci" ]]; then
+ # save the scenario name into java properties file to be injected to downstream jobs via envInject
+ echo "Recording scenario name for downstream jobs"
+ rm /tmp/$GERRIT_CHANGE_NUMBER/scenario.properties
+ echo "DEPLOY_SCENARIO=os-nosdn-nofeature" > /tmp/$GERRIT_CHANGE_NUMBER/scenario.properties
+ exit 0
+fi
+
+# projects develop different scenarios and jobs need to know which scenario got the
+# change under test so the jobs can deploy and test the right scenario.
+# we need to fetch the change and look at the changeset to find out the scenario instead
+# of hardcoding scenario per project.
+PROJECT_CLONE_LOCATION=/tmp/${GERRIT_PROJECT}_${GERRIT_CHANGE_NUMBER}
+rm -rf $PROJECT_CLONE_LOCATION
+git clone https://gerrit.opnfv.org/gerrit/$GERRIT_PROJECT $PROJECT_CLONE_LOCATION
+cd $PROJECT_CLONE_LOCATION
+git fetch https://gerrit.opnfv.org/gerrit/$GERRIT_PROJECT $GERRIT_REFSPEC && git checkout FETCH_HEAD
+DEPLOY_SCENARIO=$(git diff HEAD^..HEAD --name-only | grep scenarios | sed -r 's/scenarios\/(.*?)\/role.*/\1/' | uniq)
+
+# ensure single scenario is impacted
+if [[ $(echo $DEPLOY_SCENARIO | wc -w) != 1 ]]; then
+ echo "Change impacts multiple scenarios!"
+ echo "XCI doesn't support testing of changes that impact multiple scenarios currently."
+ echo "Please split your change into multiple different/dependent changes, each modifying single scenario."
+ exit 1
+fi
+
+# save the scenario name into java properties file to be injected to downstream jobs via envInject
+echo "Recording scenario name for downstream jobs"
+rm /tmp/$GERRIT_CHANGE_NUMBER/scenario.properties
+echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" > /tmp/$GERRIT_CHANGE_NUMBER/scenario.properties
diff --git a/jjb/xci/xci-verify-jobs.yml b/jjb/xci/xci-verify-jobs.yml
index 3c314568f..2423f90da 100644
--- a/jjb/xci/xci-verify-jobs.yml
+++ b/jjb/xci/xci-verify-jobs.yml
@@ -102,7 +102,7 @@
comment-contains-value: 'reverify'
projects:
- project-compare-type: 'ANT'
- project-pattern: '{project}'
+ project-pattern: 'releng-xci'
branches:
- branch-compare-type: 'ANT'
branch-pattern: '**/{branch}'
@@ -110,6 +110,15 @@
forbidden-file-paths:
- compare-type: ANT
pattern: 'xci/scripts/vm/**'
+ - project-compare-type: 'ANT'
+ project-pattern: 'sfc|bgpvpn'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ disable-strict-forbidden-file-verification: 'true'
+ file-paths:
+ - compare-type: ANT
+ pattern: 'scenarios/**'
readable-message: true
custom-url: '* $JOB_NAME $BUILD_URL'
skip-vote:
@@ -130,12 +139,15 @@
default: 'true'
- string:
name: GIT_BASE
- default: https://gerrit.opnfv.org/gerrit/$PROJECT
+ default: https://gerrit.opnfv.org/gerrit/releng-xci
description: 'Git URL to use on this Jenkins Slave'
builders:
+ - 'xci-verify-set-scenario-macro'
+ - inject:
+ properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/scenario.properties"
- description-setter:
- description: "Built on $NODE_NAME"
+ description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME"
- multijob:
name: deploy
condition: SUCCESSFUL
@@ -221,10 +233,12 @@
default: 'osa'
- string:
name: GIT_BASE
- default: https://gerrit.opnfv.org/gerrit/$PROJECT
+ default: https://gerrit.opnfv.org/gerrit/releng-xci
description: 'Git URL to use on this Jenkins Slave'
wrappers:
+ - inject:
+ properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/scenario.properties"
- ssh-agent-wrapper
- build-timeout:
timeout: 240
@@ -235,13 +249,19 @@
builders:
- description-setter:
- description: "Built on $NODE_NAME"
+ description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME"
- 'xci-verify-{phase}-macro'
# -------------------------------
# builder macros
# -------------------------------
- builder:
+ name: 'xci-verify-set-scenario-macro'
+ builders:
+ - shell:
+ !include-raw: ./xci-set-scenario.sh
+
+- builder:
name: 'xci-verify-deploy-macro'
builders:
- shell: