From 979cebfc6234ce0c73feb4caae6814f5ff7411b8 Mon Sep 17 00:00:00 2001 From: Fatih Degirmenci Date: Thu, 15 Feb 2018 11:58:20 +0100 Subject: 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 --- jjb/xci/xci-set-scenario.sh | 64 +++++++++++++++++++++++++++++++++++++++++++++ jjb/xci/xci-verify-jobs.yml | 30 +++++++++++++++++---- 2 files changed, 89 insertions(+), 5 deletions(-) create mode 100755 jjb/xci/xci-set-scenario.sh (limited to 'jjb/xci') 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,12 +249,18 @@ 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: -- cgit 1.2.3-korg