diff options
author | Fatih Degirmenci <fdegir@gmail.com> | 2018-02-15 11:58:20 +0100 |
---|---|---|
committer | Fatih Degirmenci <fdegir@gmail.com> | 2018-02-15 12:07:34 +0100 |
commit | 979cebfc6234ce0c73feb4caae6814f5ff7411b8 (patch) | |
tree | 63ff742c402cf2b52aef15f4760b768f19bb6c3f | |
parent | 8b2d00b74b608242afbdbf46796d45a5189327f2 (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-x | jjb/xci/xci-set-scenario.sh | 64 | ||||
-rw-r--r-- | jjb/xci/xci-verify-jobs.yml | 30 |
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: |