diff options
Diffstat (limited to 'jjb')
48 files changed, 1486 insertions, 422 deletions
diff --git a/jjb/apex/apex-deploy.sh b/jjb/apex/apex-deploy.sh index b8ae75a1f..123db3e85 100755 --- a/jjb/apex/apex-deploy.sh +++ b/jjb/apex/apex-deploy.sh @@ -31,7 +31,9 @@ elif [[ "$DEPLOY_SCENARIO" == *gate* ]]; then fi # Dev or RPM/ISO build -if [[ "$ARTIFACT_VERSION" =~ dev ]]; then +# For upstream deployments we currently only use git repo and not RPM +# Need to decide after Fraser if we want to use RPM or not for upstream +if [[ "$ARTIFACT_VERSION" =~ dev || "$DEPLOY_SCENARIO" =~ "upstream" ]]; then # Settings for deploying from git workspace DEPLOY_SETTINGS_DIR="${WORKSPACE}/config/deploy" NETWORK_SETTINGS_DIR="${WORKSPACE}/config/network" @@ -134,6 +136,11 @@ else DEPLOY_CMD="${DEPLOY_CMD} -i ${INVENTORY_FILE}" fi +if [[ "$DEPLOY_SCENARIO" =~ "upstream" ]]; then + echo "Upstream deployment detected" + DEPLOY_CMD="${DEPLOY_CMD} --upstream" +fi + if [ "$IPV6_FLAG" == "True" ]; then NETWORK_FILE="${NETWORK_SETTINGS_DIR}/network_settings_v6.yaml" elif echo ${DEPLOY_SCENARIO} | grep fdio; then diff --git a/jjb/apex/apex-download-artifact.sh b/jjb/apex/apex-download-artifact.sh index 68baf59da..c12406cdb 100755 --- a/jjb/apex/apex-download-artifact.sh +++ b/jjb/apex/apex-download-artifact.sh @@ -10,7 +10,10 @@ echo [[ -d $BUILD_DIRECTORY ]] || mkdir -p $BUILD_DIRECTORY -if [[ "$ARTIFACT_VERSION" =~ dev ]]; then +# if upstream we do not need to download anything +if [[ "$DEPLOY_SCENARIO" =~ upstream ]]; then + echo "Upstream deployment detected, skipping download artifact" +elif [[ "$ARTIFACT_VERSION" =~ dev ]]; then # dev build GERRIT_PATCHSET_NUMBER=$(echo $GERRIT_REFSPEC | grep -Eo '[0-9]+$') export OPNFV_ARTIFACT_VERSION="dev${GERRIT_CHANGE_NUMBER}_${GERRIT_PATCHSET_NUMBER}" diff --git a/jjb/apex/apex-jjb-renderer.py b/jjb/apex/apex-jjb-renderer.py index 6fd83afe9..b67784376 100644 --- a/jjb/apex/apex-jjb-renderer.py +++ b/jjb/apex/apex-jjb-renderer.py @@ -12,30 +12,38 @@ import yaml from jinja2 import Environment from jinja2 import FileSystemLoader -gspathname = dict() -branch = dict() -build_slave = dict() -env = Environment(loader=FileSystemLoader('./'), autoescape=True) -with open('scenarios.yaml.hidden') as _: - scenarios = yaml.safe_load(_) +def render_jjb(): + """Render JJB output from scenarios.yaml.hidden file and jinja + template""" -template = env.get_template('apex.yml.j2') + gspathname = dict() + branch = dict() + build_slave = dict() + env = Environment(loader=FileSystemLoader('./'), autoescape=True) -print("Scenarios are: ") -pprint.pprint(scenarios) + with open('scenarios.yaml.hidden') as _: + scenarios = yaml.safe_load(_) -for stream in scenarios: - if stream == 'master': - gspathname['master'] = '' - branch[stream] = stream - else: - gspathname[stream] = '/' + stream - branch[stream] = 'stable/' + stream - build_slave[stream] = 'apex-baremetal-{}'.format(stream) + template = env.get_template('apex.yml.j2') -output = template.render(scenarios=scenarios, gspathname=gspathname, - branch=branch, build_slave=build_slave) + print("Scenarios are: ") + pprint.pprint(scenarios) -with open('./apex.yml', 'w') as fh: - fh.write(output) + for stream in scenarios: + if stream == 'master': + gspathname['master'] = '' + branch[stream] = stream + else: + gspathname[stream] = '/' + stream + branch[stream] = 'stable/' + stream + build_slave[stream] = 'apex-baremetal-{}'.format(stream) + + output = template.render(scenarios=scenarios, gspathname=gspathname, + branch=branch, build_slave=build_slave) + + with open('./apex.yml', 'w') as fh: + fh.write(output) + +if __name__ == "__main__": + render_jjb() diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml index cf29b928c..e19a90e94 100644 --- a/jjb/apex/apex.yml +++ b/jjb/apex/apex.yml @@ -530,7 +530,7 @@ abort-all-job: false git-revision: false - multijob: - name: Dovetail + name: Dovetail-proposed_tests condition: ALWAYS projects: - name: 'dovetail-apex-baremetal-proposed_tests-{scenario_stream}' @@ -539,7 +539,22 @@ predefined-parameters: DEPLOY_SCENARIO=$DEPLOY_SCENARIO kill-phase-on: NEVER - enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/" + enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/ + && $BUILD_NUMBER % 2 == 1" + abort-all-job: false + git-revision: false + - multijob: + name: Dovetail-default + condition: ALWAYS + projects: + - name: 'dovetail-apex-baremetal-default-{scenario_stream}' + node-parameters: true + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO=$DEPLOY_SCENARIO + kill-phase-on: NEVER + enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/ + && $BUILD_NUMBER % 2 == 0" abort-all-job: false git-revision: false - multijob: diff --git a/jjb/apex/apex.yml.j2 b/jjb/apex/apex.yml.j2 index ab65c4e2b..ecc6f270c 100644 --- a/jjb/apex/apex.yml.j2 +++ b/jjb/apex/apex.yml.j2 @@ -408,7 +408,7 @@ abort-all-job: false git-revision: false - multijob: - name: Dovetail + name: Dovetail-proposed_tests condition: ALWAYS projects: - name: 'dovetail-apex-baremetal-proposed_tests-{scenario_stream}' @@ -417,7 +417,22 @@ predefined-parameters: DEPLOY_SCENARIO=$DEPLOY_SCENARIO kill-phase-on: NEVER - enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/" + enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/ + && $BUILD_NUMBER % 2 == 1" + abort-all-job: false + git-revision: false + - multijob: + name: Dovetail-default + condition: ALWAYS + projects: + - name: 'dovetail-apex-baremetal-default-{scenario_stream}' + node-parameters: true + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO=$DEPLOY_SCENARIO + kill-phase-on: NEVER + enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/ + && $BUILD_NUMBER % 2 == 0" abort-all-job: false git-revision: false - multijob: diff --git a/jjb/armband/armband-ci-jobs.yml b/jjb/armband/armband-ci-jobs.yml index 64c138946..1c5f14880 100644 --- a/jjb/armband/armband-ci-jobs.yml +++ b/jjb/armband/armband-ci-jobs.yml @@ -62,6 +62,8 @@ auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' - 'os-odl-nofeature-ha': auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' + - 'os-ovn-nofeature-ha': + auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' - 'os-nosdn-ovs-ha': auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' @@ -69,6 +71,10 @@ - 'os-nosdn-nofeature-noha': auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' + exclude: + - scenario: os-ovn-nofeature-ha + stream: euphrates + jobs: - '{installer}-{scenario}-{pod}-daily-{stream}' - '{installer}-deploy-{pod}-daily-{stream}' @@ -124,42 +130,28 @@ DEPLOY_SCENARIO={scenario} same-node: true block: true - - conditional-step: - condition-kind: not - condition-operand: - condition-kind: regex-match - regex: 'danube' - label: '{stream}' - steps: - - trigger-builds: - - project: 'functest-{installer}-{pod}-arm-daily-{stream}' - current-parameters: false - predefined-parameters: - DEPLOY_SCENARIO={scenario} - block: true - same-node: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' - - conditional-step: - condition-kind: not - condition-operand: - condition-kind: regex-match - regex: 'danube' - label: '{stream}' - steps: - - trigger-builds: - - project: 'yardstick-{installer}-{pod}-daily-{stream}' - current-parameters: false - predefined-parameters: - DEPLOY_SCENARIO={scenario} - block: true - same-node: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' + - trigger-builds: + - project: 'functest-{installer}-{pod}-arm-daily-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + same-node: true + block: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' + - trigger-builds: + - project: 'yardstick-{installer}-{pod}-daily-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + block: true + same-node: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' # 1.here the stream means the SUT stream, dovetail stream is defined in its own job # 2.testsuite proposed_tests here is for new test cases planning to add into OVP # 3.run proposed_tests on Monday, Wednesday and Friday against ha scenario @@ -171,7 +163,7 @@ condition-kind: and condition-operands: - condition-kind: regex-match - regex: '-ha$' + regex: '.*-ha' label: '{scenario}' - condition-kind: day-of-week day-selector: select-days @@ -196,7 +188,7 @@ condition-kind: and condition-operands: - condition-kind: regex-match - regex: '*-ha' + regex: '.*-ha' label: '{scenario}' - condition-kind: day-of-week day-selector: select-days @@ -302,6 +294,10 @@ triggers: - timed: '0 1 * * 2,5,7' - trigger: + name: 'fuel-os-ovn-nofeature-ha-armband-baremetal-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-ovs-ha-armband-baremetal-master-trigger' triggers: - timed: '0 1 * * 1,3' @@ -341,6 +337,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-ovn-nofeature-ha-armband-virtual-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-ovs-ha-armband-virtual-master-trigger' triggers: - timed: '' diff --git a/jjb/bottlenecks/bottlenecks-ci-jobs.yml b/jjb/bottlenecks/bottlenecks-ci-jobs.yml index 1d31f2775..072117ae3 100644 --- a/jjb/bottlenecks/bottlenecks-ci-jobs.yml +++ b/jjb/bottlenecks/bottlenecks-ci-jobs.yml @@ -73,6 +73,12 @@ suite: - 'posca_stress_traffic' - 'posca_stress_ping' + - 'posca_factor_multistack_storage' + - 'posca_factor_multistack_storage_parallel' + - 'posca_feature_moon_resources' + - 'posca_feature_moon_tenants' + - 'posca_feature_vnf_scale_out' + - 'posca_factor_soak_throughputs' jobs: - 'bottlenecks-{installer}-{suite}-{pod}-daily-{stream}' diff --git a/jjb/bottlenecks/bottlenecks-run-suite.sh b/jjb/bottlenecks/bottlenecks-run-suite.sh index ebd905e98..7a3db00c4 100644 --- a/jjb/bottlenecks/bottlenecks-run-suite.sh +++ b/jjb/bottlenecks/bottlenecks-run-suite.sh @@ -136,13 +136,12 @@ if [[ $SUITE_NAME == *posca* ]]; then # Running test cases through Bottlenecks docker if [[ $SUITE_NAME == posca_stress_traffic ]]; then TEST_CASE=posca_factor_system_bandwidth - testcase_cmd="docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT" - echo "BOTTLENECKS INFO: running test case ${TEST_CASE} with report indicator: ${testcase_cmd}" - ${testcase_cmd} >$redirect elif [[ $SUITE_NAME == posca_stress_ping ]]; then TEST_CASE=posca_factor_ping - testcase_cmd="docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT" - echo "BOTTLENECKS INFO: running test case ${TEST_CASE} with report indicator: ${testcase_cmd}" - ${testcase_cmd} >$redirect + else + TEST_CASE=$SUITE_NAME fi + testcase_cmd="docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT" + echo "BOTTLENECKS INFO: running test case ${TEST_CASE} with report indicator: ${testcase_cmd}" + ${testcase_cmd} >$redirect fi diff --git a/jjb/clover/clover-project.yml b/jjb/clover/clover-project.yml new file mode 100644 index 000000000..b31f3deb2 --- /dev/null +++ b/jjb/clover/clover-project.yml @@ -0,0 +1,166 @@ +--- +################################################### +# All the jobs except verify have been removed! +# They will only be enabled on request by projects! +################################################### +- project: + name: clover + + project: '{name}' + + jobs: + - 'clover-verify-{stream}' + - 'clover-daily-upload-{stream}' + - 'clover-daily-deploy-{stream}' + + stream: + - master: + branch: '{stream}' + gs-pathname: '' + disabled: false + +- job-template: + name: 'clover-verify-{stream}' + + disabled: '{obj:disabled}' + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + # yamllint disable rule:line-length + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW." + # yamllint enable rule:line-length + - 'opnfv-build-ubuntu-defaults' + + scm: + - git-scm-gerrit + + 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}' + disable-strict-forbidden-file-verification: 'true' + forbidden-file-paths: + - compare-type: ANT + pattern: 'docs/**|.gitignore' + + builders: + - shell: | + cd $WORKSPACE/ci + ./verify.sh + +- job-template: + name: 'clover-daily-upload-{stream}' + + disabled: '{obj:disabled}' + + concurrent: false + + scm: + - git-scm + + triggers: + - timed: '0 11 * * *' + + wrappers: + - fix-workspace-permissions + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - 'opnfv-build-ubuntu-defaults' + - 'clover-defaults': + gs-pathname: '{gs-pathname}' + + builders: + - shell: | + cd $WORKSPACE/ci + ./upload.sh + +- job-template: + name: 'clover-daily-deploy-{stream}' + + project-type: freestyle + + disabled: '{obj:disabled}' + + concurrent: false + + properties: + - logrotate-default + - throttle: + enabled: true + max-per-node: 1 + option: 'project' + - build-blocker: + use-build-blocker: true + blocking-jobs: + - 'clover-daily-deploy-.*?' + - 'container4nfv-daily-deploy-.*?' + block-level: 'NODE' + + wrappers: + - timeout: + timeout: 180 + abort: true + - fix-workspace-permissions + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + # yamllint disable rule:line-length + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW." + # yamllint enable rule:line-length + - node: + name: SLAVE_NAME + description: 'Slave name on Jenkins' + allowed-slaves: + - huawei-virtual6 + default-slaves: + - huawei-virtual6 + + scm: + - git-scm + + triggers: + - timed: '0 12 * * *' + + builders: + - shell: | + cd $WORKSPACE/ci + ./deploy.sh + +################### +# parameter macros +################### +- parameter: + name: 'clover-defaults' + parameters: + - string: + name: GS_URL + default: artifacts.opnfv.org/$PROJECT{gs-pathname} + description: "URL to Google Storage." diff --git a/jjb/compass4nfv/compass-ci-jobs.yml b/jjb/compass4nfv/compass-ci-jobs.yml index 357f24e37..44cb84d8e 100644 --- a/jjb/compass4nfv/compass-ci-jobs.yml +++ b/jjb/compass4nfv/compass-ci-jobs.yml @@ -289,6 +289,26 @@ build-step-failure-threshold: 'never' failure-threshold: 'never' unstable-threshold: 'FAILURE' + - project: 'bottlenecks-compass-posca_factor_multistack_storage_parallel-{pod}-daily-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + block: true + same-node: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' + - project: 'bottlenecks-compass-posca_factor_soak_throughputs-{pod}-daily-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + block: true + same-node: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' - conditional-step: condition-kind: and condition-operands: diff --git a/jjb/container4nfv/arm64/compass-deploy.sh b/jjb/container4nfv/arm64/compass-deploy.sh index bbbf3f449..a22af09ba 100755 --- a/jjb/container4nfv/arm64/compass-deploy.sh +++ b/jjb/container4nfv/arm64/compass-deploy.sh @@ -5,9 +5,14 @@ cd compass4nfv export ADAPTER_OS_PATTERN='(?i)CentOS-7.*arm.*' export OS_VERSION="centos7" -export KUBERNETES_VERSION="v1.7.3" -export DHA="deploy/conf/vm_environment/k8-nosdn-nofeature-noha.yml" -export NETWORK="deploy/conf/vm_environment/network.yml" -export VIRT_NUMBER=2 VIRT_CPUS=4 VIRT_MEM=8192 VIRT_DISK=50G +export KUBERNETES_VERSION="v1.7.5" +if [[ "$NODE_NAME" =~ "-virtual" ]]; then + export DHA="deploy/conf/vm_environment/k8-nosdn-nofeature-noha.yml" + export NETWORK="deploy/conf/vm_environment/network.yml" + export VIRT_NUMBER=2 VIRT_CPUS=4 VIRT_MEM=8192 VIRT_DISK=50G +else + export DHA="deploy/conf/hardware_environment/huawei-pod8/k8-nosdn-nofeature-noha.yml" + export NETWORK="deploy/conf/hardware_environment/huawei-pod8/network.yml" +fi ./deploy.sh diff --git a/jjb/container4nfv/container4nfv-arm64.yml b/jjb/container4nfv/container4nfv-arm64.yml index b69c21400..324624387 100644 --- a/jjb/container4nfv/container4nfv-arm64.yml +++ b/jjb/container4nfv/container4nfv-arm64.yml @@ -9,15 +9,20 @@ disabled: false - 'k8-sriov-nofeature-noha': disabled: false + pod: + - virtual: + slave-label: arm-packet01 + - baremetal: + slave-label: compass-baremetal-arm jobs: - - 'container4nfv-{scenario}-virtual-daily-master' + - 'container4nfv-{scenario}-{pod}-daily-master' - job-template: - name: 'container4nfv-{scenario}-virtual-daily-master' + name: 'container4nfv-{scenario}-{pod}-daily-master' disabled: '{obj:disabled}' concurrent: false - node: arm-packet01 + node: '{slave-label}' scm: - git: @@ -28,7 +33,7 @@ wipe-workspace: true triggers: - - 'trigger-{scenario}-virtual' + - 'trigger-{scenario}-{pod}' wrappers: - timeout: @@ -46,6 +51,7 @@ same-node: true block: false + - trigger: name: 'trigger-k8-multus-nofeature-noha-virtual' triggers: @@ -54,3 +60,12 @@ name: 'trigger-k8-sriov-nofeature-noha-virtual' triggers: - timed: '0 16 * * *' + +- trigger: + name: 'trigger-k8-multus-nofeature-noha-baremetal' + triggers: + - timed: '0 16 * * *' +- trigger: + name: 'trigger-k8-sriov-nofeature-noha-baremetal' + triggers: + - timed: '0 20 * * *' diff --git a/jjb/container4nfv/container4nfv-project.yml b/jjb/container4nfv/container4nfv-project.yml index 03bbb655e..1ab50ae30 100644 --- a/jjb/container4nfv/container4nfv-project.yml +++ b/jjb/container4nfv/container4nfv-project.yml @@ -109,8 +109,21 @@ properties: - logrotate-default + - throttle: + enabled: true + max-per-node: 1 + option: 'project' + - build-blocker: + use-build-blocker: true + blocking-jobs: + - 'clover-daily-deploy-.*?' + - 'container4nfv-daily-deploy-.*?' + block-level: 'NODE' wrappers: + - timeout: + timeout: 240 + abort: true - fix-workspace-permissions parameters: diff --git a/jjb/container4nfv/yardstick-arm64.yml b/jjb/container4nfv/yardstick-arm64.yml index bd1d8aa85..9b8b271df 100644 --- a/jjb/container4nfv/yardstick-arm64.yml +++ b/jjb/container4nfv/yardstick-arm64.yml @@ -5,7 +5,7 @@ - project: name: yardstick-arm64 - project: '{name}' + project: 'yardstick' # ------------------------------- # BRANCH ANCHORS @@ -84,6 +84,10 @@ name: CI_DEBUG default: 'false' description: "Show debut output information" + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: "Used for overriding the GIT URL coming from Global Jenkins configuration." scm: - git-scm diff --git a/jjb/daisy4nfv/daisy-daily-jobs.yml b/jjb/daisy4nfv/daisy-daily-jobs.yml index fbbb086d7..cc2dc5a2f 100644 --- a/jjb/daisy4nfv/daisy-daily-jobs.yml +++ b/jjb/daisy4nfv/daisy-daily-jobs.yml @@ -117,9 +117,7 @@ - '{installer}-defaults' - '{slave-label}-defaults': installer: '{installer}' - - string: - name: DEPLOY_SCENARIO - default: '{scenario}' + - 'testapi-parameter' - 'daisy-project-parameter': gs-pathname: '{gs-pathname}' @@ -192,8 +190,10 @@ - build-blocker: use-build-blocker: true blocking-jobs: - - 'daisy.*-deploy-({pod})?-daily-.*' - 'daisy-kolla-build-.*' + - '{installer}-(build|deploy|test)-daily-(euphrates|master)' + - '{installer}-deploy-(baremetal|virtual|zte-pod9)-daily-(euphrates|master)' + - '(functest|yardstick)-{installer}-(baremetal|virtual|zte-pod9)-daily-(euphrates|master)' block-level: 'NODE' parameters: @@ -203,9 +203,7 @@ - '{installer}-defaults' - '{slave-label}-defaults': installer: '{installer}' - - string: - name: DEPLOY_SCENARIO - default: 'os-nosdn-nofeature-ha' + - 'testapi-parameter' - 'daisy-project-parameter': gs-pathname: '{gs-pathname}' - string: @@ -337,7 +335,7 @@ - trigger: name: 'daisy-os-nosdn-ovs_dpdk-noha-zte-pod9-daily-master-trigger' triggers: - - timed: '0 10 * * *' + - timed: '0 10,20 * * *' # Basic HA Scenarios - trigger: name: 'daisy-os-nosdn-nofeature-ha-zte-pod9-daily-master-trigger' diff --git a/jjb/daisy4nfv/daisy-project-jobs.yml b/jjb/daisy4nfv/daisy-project-jobs.yml index 006153f6f..c4edd7738 100644 --- a/jjb/daisy4nfv/daisy-project-jobs.yml +++ b/jjb/daisy4nfv/daisy-project-jobs.yml @@ -215,6 +215,13 @@ enabled: true max-total: 6 option: 'project' + - build-blocker: + use-build-blocker: true + blocking-jobs: + - '{installer}-daily-(build|deploy|test)-(euphrates|master)' + - '{installer}-.*-(baremetal|virtual|zte-pod9)-daily-(euphrates|master)' + - '(functest|yardstick)-{installer}-(baremetal|virtual|zte-pod9)-daily-(euphrates|master)' + block-level: 'NODE' scm: - git-scm diff --git a/jjb/doctor/doctor.yml b/jjb/doctor/doctor.yml index ba76b8abb..8c04ffd53 100644 --- a/jjb/doctor/doctor.yml +++ b/jjb/doctor/doctor.yml @@ -19,7 +19,7 @@ installer: - 'apex' - 'fuel' - # - 'joid' + - 'daisy' arch: - 'x86_64' @@ -29,19 +29,17 @@ - 'sample' - 'congress' - task: - - verify: - auto-trigger-name: 'doctor-verify' - exclude: - installer: 'apex' arch: 'aarch64' + - installer: 'daisy' + arch: 'aarch64' jobs: - 'doctor-verify-{stream}' - 'doctor-verify-unit-test-{stream}' - - 'doctor-{task}-{inspector}-{stream}' - - 'doctor-{task}-{installer}-{inspector}-{arch}-{stream}' + - 'doctor-verify-{inspector}-{stream}' + - 'doctor-verify-{installer}-{inspector}-{arch}-{stream}' - job-template: name: 'doctor-verify-{stream}' @@ -76,6 +74,7 @@ file-paths: - compare-type: ANT pattern: 'doctor_tests/**' + builders: - shell: | #!/bin/bash @@ -117,16 +116,17 @@ - 'doctor-verify-unit-test-publishers-macro' - job-template: - name: 'doctor-{task}-{inspector}-{stream}' + name: 'doctor-verify-{inspector}-{stream}' disabled: '{obj:disabled}' project-type: 'multijob' scm: - git-scm-gerrit triggers: - - '{auto-trigger-name}': + - 'doctor-verify': project: '{project}' branch: '{branch}' files: 'doctor_tests/**' + builders: - shell: | #!/bin/bash @@ -137,7 +137,7 @@ name: 'doctor-verify-apex-inspector' execution-type: PARALLEL projects: - - name: 'doctor-{task}-apex-{inspector}-x86_64-{stream}' + - name: 'doctor-verify-apex-{inspector}-x86_64-{stream}' predefined-parameters: | PROJECT=$PROJECT GERRIT_BRANCH=$GERRIT_BRANCH @@ -151,7 +151,7 @@ name: 'doctor-verify-fuel-inspector' execution-type: PARALLEL projects: - - name: 'doctor-{task}-fuel-{inspector}-x86_64-{stream}' + - name: 'doctor-verify-fuel-{inspector}-x86_64-{stream}' predefined-parameters: | PROJECT=$PROJECT GERRIT_BRANCH=$GERRIT_BRANCH @@ -165,7 +165,20 @@ name: 'doctor-verify-fuel-inspector' execution-type: PARALLEL projects: - - name: 'doctor-{task}-fuel-{inspector}-aarch64-{stream}' + - name: 'doctor-verify-fuel-{inspector}-aarch64-{stream}' + predefined-parameters: | + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + kill-phase-on: FAILURE + current-parameters: true + git-revision: true + - multijob: + name: 'doctor-verify-daisy-inspector' + execution-type: PARALLEL + projects: + - name: 'doctor-verify-daisy-{inspector}-x86_64-{stream}' predefined-parameters: | PROJECT=$PROJECT GERRIT_BRANCH=$GERRIT_BRANCH @@ -177,7 +190,7 @@ git-revision: true - job-template: - name: 'doctor-{task}-{installer}-{inspector}-{arch}-{stream}' + name: 'doctor-verify-{installer}-{inspector}-{arch}-{stream}' disabled: '{obj:disabled}' node: 'doctor-{installer}-{arch}' wrappers: diff --git a/jjb/dovetail/dovetail-run.sh b/jjb/dovetail/dovetail-run.sh index ec879e325..1c53dbee4 100755 --- a/jjb/dovetail/dovetail-run.sh +++ b/jjb/dovetail/dovetail-run.sh @@ -24,6 +24,9 @@ mkdir -p ${DOVETAIL_HOME} DOVETAIL_CONFIG=${DOVETAIL_HOME}/pre_config mkdir -p ${DOVETAIL_CONFIG} +DOVETAIL_IMAGES=${DOVETAIL_HOME}/images +mkdir -p ${DOVETAIL_IMAGES} + ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" sshkey="" @@ -90,13 +93,24 @@ fi cat $OPENRC if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == "compass" ]]; then + compass_repo=${WORKSPACE}/compass4nfv/ + git clone https://github.com/opnfv/compass4nfv.git ${compass_repo} >/dev/null + pip install shyaml + scenario_file=${compass_repo}/deploy/conf/hardware_environment/$NODE_NAME/os-nosdn-nofeature-ha.yml + ipmiIp=$(cat ${scenario_file} | shyaml get-value hosts.0.ipmiIp) + ipmiPass=$(cat ${scenario_file} | shyaml get-value hosts.0.ipmiPass) + ipmiUser=root + jumpserver_ip=$(ifconfig | grep -A 5 docker0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1) + cat << EOF >${DOVETAIL_CONFIG}/pod.yaml nodes: -- {ip: 10.1.0.52, name: node1, password: root, role: controller, user: root} +- {ip: ${jumpserver_ip}, name: node0, password: root, role: Jumpserver, user: root} +- {ip: 10.1.0.50, name: node1, password: root, role: controller, user: root, + ipmi_ip: ${ipmiIp}, ipmi_user: ${ipmiUser}, ipmi_password: ${ipmiPass}} - {ip: 10.1.0.51, name: node2, password: root, role: controller, user: root} -- {ip: 10.1.0.50, name: node3, password: root, role: controller, user: root} -- {ip: 10.1.0.54, name: node4, password: root, role: compute, user: root} -- {ip: 10.1.0.53, name: node5, password: root, role: compute, user: root} +- {ip: 10.1.0.52, name: node3, password: root, role: controller, user: root} +- {ip: 10.1.0.53, name: node4, password: root, role: compute, user: root} +- {ip: 10.1.0.54, name: node5, password: root, role: compute, user: root} EOF fi @@ -151,6 +165,14 @@ if [[ ! -f ${DOVETAIL_CONFIG}/pod.yaml ]]; then fi if [ -f ${DOVETAIL_CONFIG}/pod.yaml ]; then + sudo chown jenkins:jenkins ${DOVETAIL_CONFIG}/pod.yaml + echo "Adapt process info for $INSTALLER_TYPE ..." + attack_process='rabbitmq' + cat << EOF >> ${DOVETAIL_CONFIG}/pod.yaml +process_info: +- {testcase_name: dovetail.ha.tc010, attack_process: ${attack_process}} + +EOF echo "file ${DOVETAIL_CONFIG}/pod.yaml:" cat ${DOVETAIL_CONFIG}/pod.yaml else @@ -189,7 +211,7 @@ if [[ ! -f ${ubuntu_image} ]]; then echo "Download image ubuntu-16.04-server-cloudimg-amd64-disk1.img ..." wget -q -nc http://artifacts.opnfv.org/sdnvpn/ubuntu-16.04-server-cloudimg-amd64-disk1.img -P ${image_path} fi -sudo cp ${ubuntu_image} ${DOVETAIL_CONFIG} +sudo cp ${ubuntu_image} ${DOVETAIL_IMAGES} # functest needs to download this image first before running cirros_image=${image_path}/cirros-0.3.5-x86_64-disk.img @@ -197,7 +219,7 @@ if [[ ! -f ${cirros_image} ]]; then echo "Download image cirros-0.3.5-x86_64-disk.img ..." wget -q -nc http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img -P ${image_path} fi -sudo cp ${cirros_image} ${DOVETAIL_CONFIG} +sudo cp ${cirros_image} ${DOVETAIL_IMAGES} # snaps_smoke test case needs to download this image first before running ubuntu14_image=${image_path}/ubuntu-14.04-server-cloudimg-amd64-disk1.img @@ -205,7 +227,7 @@ if [[ ! -f ${ubuntu14_image} ]]; then echo "Download image ubuntu-14.04-server-cloudimg-amd64-disk1.img ..." wget -q -nc https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img -P ${image_path} fi -sudo cp ${ubuntu14_image} ${DOVETAIL_CONFIG} +sudo cp ${ubuntu14_image} ${DOVETAIL_IMAGES} # cloudify_ims test case needs to download these 2 images first before running cloudify_image=${image_path}/cloudify-manager-premium-4.0.1.qcow2 @@ -213,13 +235,13 @@ if [[ ! -f ${cloudify_image} ]]; then echo "Download image cloudify-manager-premium-4.0.1.qcow2 ..." wget -q -nc http://repository.cloudifysource.org/cloudify/4.0.1/sp-release/cloudify-manager-premium-4.0.1.qcow2 -P ${image_path} fi -sudo cp ${cloudify_image} ${DOVETAIL_CONFIG} +sudo cp ${cloudify_image} ${DOVETAIL_IMAGES} trusty_image=${image_path}/trusty-server-cloudimg-amd64-disk1.img if [[ ! -f ${trusty_image} ]]; then echo "Download image trusty-server-cloudimg-amd64-disk1.img ..." wget -q -nc http://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img -P ${image_path} fi -sudo cp ${trusty_image} ${DOVETAIL_CONFIG} +sudo cp ${trusty_image} ${DOVETAIL_IMAGES} opts="--privileged=true -id" @@ -236,10 +258,8 @@ fi echo "Dovetail: Pulling image ${DOCKER_REPO}:${DOCKER_TAG}" docker pull ${DOCKER_REPO}:$DOCKER_TAG >$redirect -env4bgpvpn="-e INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP}" - cmd="docker run ${opts} -e DOVETAIL_HOME=${DOVETAIL_HOME} ${docker_volume} ${dovetail_home_volume} \ - ${sshkey} ${env4bgpvpn} ${DOCKER_REPO}:${DOCKER_TAG} /bin/bash" + ${sshkey} ${DOCKER_REPO}:${DOCKER_TAG} /bin/bash" echo "Dovetail: running docker run command: ${cmd}" ${cmd} >${redirect} sleep 5 @@ -299,8 +319,9 @@ sudo cp -r ${DOVETAIL_HOME}/results ./ # PRIMARY_GROUP=$(id -gn $CURRENT_USER) # sudo chown -R ${CURRENT_USER}:${PRIMARY_GROUP} ${WORKSPACE}/results -#remove useless workspace from yardstick to save disk space +#remove useless files to save disk space sudo rm -rf ./results/workspace +sudo rm -f ./results/yardstick.img echo "Dovetail: done!" diff --git a/jjb/fuel/fuel-daily-jobs.yml b/jjb/fuel/fuel-daily-jobs.yml index f4bcdaa27..a198751a8 100644 --- a/jjb/fuel/fuel-daily-jobs.yml +++ b/jjb/fuel/fuel-daily-jobs.yml @@ -63,6 +63,8 @@ auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-onos-nofeature-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' + - 'os-ovn-nofeature-ha': + auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-kvm-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-ovs-ha': @@ -101,6 +103,14 @@ stream: master - scenario: os-odl_l2-bgpvpn-ha stream: euphrates + - scenario: os-ovn-nofeature-noha + stream: danube + - scenario: os-ovn-nofeature-noha + stream: euphrates + - scenario: os-ovn-nofeature-ha + stream: danube + - scenario: os-ovn-nofeature-ha + stream: euphrates jobs: - 'fuel-{scenario}-{pod}-daily-{stream}' @@ -161,42 +171,28 @@ DEPLOY_SCENARIO={scenario} same-node: true block: true - - conditional-step: - condition-kind: not - condition-operand: - condition-kind: regex-match - regex: 'danube' - label: '{stream}' - steps: - - trigger-builds: - - project: 'functest-fuel-{pod}-daily-{stream}' - current-parameters: false - predefined-parameters: - DEPLOY_SCENARIO={scenario} - same-node: true - block: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' - - conditional-step: - condition-kind: not - condition-operand: - condition-kind: regex-match - regex: 'danube' - label: '{stream}' - steps: - - trigger-builds: - - project: 'yardstick-fuel-{pod}-daily-{stream}' - current-parameters: false - predefined-parameters: - DEPLOY_SCENARIO={scenario} - block: true - same-node: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' + - trigger-builds: + - project: 'functest-fuel-{pod}-daily-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + same-node: true + block: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' + - trigger-builds: + - project: 'yardstick-fuel-{pod}-daily-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + block: true + same-node: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' # 1.here the stream means the SUT stream, dovetail stream is defined in its own job # 2.testsuite proposed_tests here is for new test cases planning to add into OVP # 3.run proposed_tests on Monday, Wednesday and Friday against ha scenario @@ -207,7 +203,7 @@ condition-kind: and condition-operands: - condition-kind: regex-match - regex: '-ha$' + regex: '.*-ha' label: '{scenario}' - condition-kind: day-of-week day-selector: select-days @@ -232,7 +228,7 @@ condition-kind: and condition-operands: - condition-kind: regex-match - regex: '*-ha' + regex: '.*-ha' label: '{scenario}' - condition-kind: day-of-week day-selector: select-days @@ -396,6 +392,10 @@ triggers: - timed: '' # '5 8 * * *' - trigger: + name: 'fuel-os-ovn-nofeature-ha-baremetal-daily-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-ha-baremetal-daily-master-trigger' triggers: - timed: '' # '5 17 * * *' @@ -498,10 +498,6 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-ovn-nofeature-noha-baremetal-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: name: 'fuel-os-nosdn-kvm-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' @@ -537,6 +533,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-ovn-nofeature-ha-virtual-daily-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-ha-virtual-daily-master-trigger' triggers: - timed: '' @@ -642,10 +642,6 @@ triggers: - timed: '' # '0 23 * * *' - trigger: - name: 'fuel-os-ovn-nofeature-noha-virtual-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: name: 'fuel-os-nosdn-kvm-noha-virtual-daily-euphrates-trigger' triggers: - timed: '' # '30 6 * * *' @@ -681,6 +677,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-ovn-nofeature-ha-zte-pod1-daily-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-ha-zte-pod1-daily-master-trigger' triggers: - timed: '' diff --git a/jjb/functest/functest-alpine.sh b/jjb/functest/functest-alpine.sh index 432bbbb8b..bdd79c486 100755 --- a/jjb/functest/functest-alpine.sh +++ b/jjb/functest/functest-alpine.sh @@ -161,28 +161,35 @@ if [ "${INSTALLER_TYPE}" == 'fuel' ]; then envs="${envs} -e POD_ARCH=${COMPUTE_ARCH}" fi -volumes="${images_vol} ${results_vol} ${sshkey_vol} ${rc_file_vol} ${cacert_file_vol}" -set +e +if [[ ${INSTALLER_TYPE} == 'compass' && ${DEPLOY_SCENARIO} =~ 'odl.*sfc' ]]; then + ssh_key="/tmp/id_rsa" + user_config="/tmp/openstack_user_config.yml" + docker cp compass-tasks:/root/.ssh/id_rsa $ssh_key + docker cp compass-tasks:/etc/openstack_deploy/openstack_user_config.yml $user_config + sshkey_vol="-v ${ssh_key}:/root/.ssh/id_rsa" + userconfig_vol="-v ${user_config}:${user_config}" + envs="${envs} -e EXTERNAL_NETWORK=${EXTERNAL_NETWORK}" +fi + + +volumes="${images_vol} ${results_vol} ${sshkey_vol} ${userconfig_vol} ${rc_file_vol} ${cacert_file_vol}" +set +e -if [[ ${DEPLOY_SCENARIO} =~ ^os-.* ]]; then - [[ ${BRANCH##*/} == "master" ]] && check_os_deployment - if [ ${FUNCTEST_MODE} == 'testcase' ]; then - echo "FUNCTEST_MODE=testcase, FUNCTEST_SUITE_NAME=${FUNCTEST_SUITE_NAME}" - run_test ${FUNCTEST_SUITE_NAME} - elif [ ${FUNCTEST_MODE} == 'tier' ]; then - echo "FUNCTEST_MODE=tier, FUNCTEST_TIER=${FUNCTEST_TIER}" - tiers=(${FUNCTEST_TIER}) - run_tiers ${tiers} +[[ ${BRANCH##*/} == "master" ]] && check_os_deployment +if [ ${FUNCTEST_MODE} == 'testcase' ]; then + echo "FUNCTEST_MODE=testcase, FUNCTEST_SUITE_NAME=${FUNCTEST_SUITE_NAME}" + run_test ${FUNCTEST_SUITE_NAME} +elif [ ${FUNCTEST_MODE} == 'tier' ]; then + echo "FUNCTEST_MODE=tier, FUNCTEST_TIER=${FUNCTEST_TIER}" + tiers=(${FUNCTEST_TIER}) + run_tiers ${tiers} +else + if [ ${DEPLOY_TYPE} == 'baremetal' ]; then + tiers=(healthcheck smoke features vnf parser) else - if [ ${DEPLOY_TYPE} == 'baremetal' ]; then - tiers=(healthcheck smoke features vnf parser) - else - tiers=(healthcheck smoke features) - fi - run_tiers ${tiers} + tiers=(healthcheck smoke features) fi -else - echo "k8 deployment has not been supported by functest yet" + run_tiers ${tiers} fi diff --git a/jjb/functest/functest-daily-jobs.yml b/jjb/functest/functest-daily-jobs.yml index 099d01a59..8ffbe9e63 100644 --- a/jjb/functest/functest-daily-jobs.yml +++ b/jjb/functest/functest-daily-jobs.yml @@ -197,9 +197,9 @@ - 'suite': job-timeout: 60 - 'daily': - job-timeout: 300 + job-timeout: 360 - 'arm-daily': - job-timeout: 300 + job-timeout: 480 jobs: - 'functest-{installer}-{pod}-{testsuite}-{stream}' diff --git a/jjb/releng/functest-docker.yml b/jjb/functest/functest-docker.yml index bfeae5eaa..909c7b079 100644 --- a/jjb/releng/functest-docker.yml +++ b/jjb/functest/functest-docker.yml @@ -72,7 +72,7 @@ disabled: '{obj:disabled}' parameters: - - job-parameters: + - functest-job-parameters: project: '{project}' branch: '{branch}' slave_label: 'opnfv-build-ubuntu' @@ -168,7 +168,7 @@ name: 'functest-{image}-docker-build-{arch_tag}-{stream}' disabled: '{obj:disabled}' parameters: - - job-parameters: + - functest-job-parameters: project: '{project}' branch: '{branch}' slave_label: '{slave_label}' @@ -230,7 +230,7 @@ # parameter macro - parameter: - name: job-parameters + name: functest-job-parameters parameters: - project-parameter: project: '{project}' @@ -290,3 +290,4 @@ jalausuch@suse.com morgan.richomme@orange.com cedric.ollivier@orange.com feng.xiaowei@zte.com.cn juha.kosonen@nokia.com wangwulin@huawei.com + valentin.boucher@kontron.com diff --git a/jjb/functest/functest-k8.sh b/jjb/functest/functest-k8.sh index 7c5308d5f..49d7163a9 100755 --- a/jjb/functest/functest-k8.sh +++ b/jjb/functest/functest-k8.sh @@ -19,7 +19,7 @@ if [[ ${INSTALLER_TYPE} == 'compass' ]]; then KUBE_MASTER_IP=$(echo $KUBE_MASTER_URL|awk -F'https://|:[0-9]+' '$0=$2') echo "export KUBE_MASTER_IP=$KUBE_MASTER_IP" >> $rc_file elif [[ ${INSTALLER_TYPE} == 'joid' && ${BRANCH} == 'master' ]]; then - admin_conf_file_vol="-v ${HOME}/joid_config/config:/root/joid_config/config" + admin_conf_file_vol="-v ${HOME}/joid_config/config:/root/.kube/config" rc_file=${HOME}/joid_config/k8config else echo "Not supported by other installers yet" @@ -35,24 +35,25 @@ results_vol="-v ${dir_result}:${FUNCTEST_DIR}/results" volumes="${rc_file_vol} ${results_vol} ${admin_conf_file_vol}" -# Set iptables rule to allow forwarding return traffic for container -if ! sudo iptables -C FORWARD -j RETURN 2> ${redirect} || ! sudo iptables -L FORWARD | awk 'NR==3' | grep RETURN 2> ${redirect}; then - sudo iptables -I FORWARD -j RETURN -fi - envs="-e INSTALLER_TYPE=${INSTALLER_TYPE} \ -e NODE_NAME=${NODE_NAME} -e DEPLOY_SCENARIO=${DEPLOY_SCENARIO} \ -e BUILD_TAG=${BUILD_TAG} -e DEPLOY_TYPE=${DEPLOY_TYPE}" DOCKER_TAG=`[[ ${BRANCH##*/} == "master" ]] && echo "latest" || echo ${BRANCH##*/}` +set +e + FUNCTEST_IMAGE=opnfv/functest-kubernetes:${DOCKER_TAG} +echo "Pulling Docker image ${FUNCTEST_IMAGE} ..." docker pull ${FUNCTEST_IMAGE}>/dev/null cmd_opt="run_tests -r -t all" -cmd="docker run --rm --privileged=true ${volumes} ${FUNCTEST_IMAGE} /bin/bash -c '${cmd_opt}'" +cmd="docker run --rm ${envs} ${volumes} ${FUNCTEST_IMAGE} /bin/bash -c '${cmd_opt}'" echo "Running Functest k8s test cases, CMD: ${cmd}" eval ${cmd} ret_value=$? + +ret_val_file="${HOME}/opnfv/functest/results/${BRANCH##*/}/return_value" +echo 0 > ${ret_val_file} if [ ${ret_value} != 0 ]; then echo ${ret_value} > ${ret_val_file} fi diff --git a/jjb/functest/xtesting-docker.yml b/jjb/functest/xtesting-docker.yml new file mode 100644 index 000000000..dc26344e3 --- /dev/null +++ b/jjb/functest/xtesting-docker.yml @@ -0,0 +1,221 @@ +--- +############################################## +# job configuration for docker build and push +############################################## +- project: + + name: xtesting-docker + + project: functest-xtesting + + stream: + - master: + branch: '{stream}' + disabled: false + + arch_tag: + - 'amd64': + slave_label: 'opnfv-build-ubuntu' + - 'arm64': + slave_label: 'opnfv-build-ubuntu-arm' + + # settings for jobs run in multijob phases + build-job-settings: &build-job-settings + current-parameters: false + git-revision: true + node-parameters: false + predefined-parameters: | + PUSH_IMAGE=$PUSH_IMAGE + COMMIT_ID=$COMMIT_ID + GERRIT_REFNAME=$GERRIT_REFNAME + DOCKERFILE=$DOCKERFILE + kill-phase-on: FAILURE + abort-all-jobs: false + + manifest-job-settings: &manifest-job-settings + current-parameters: false + git-revision: true + node-parameters: false + predefined-parameters: + GERRIT_REFNAME=$GERRIT_REFNAME + kill-phase-on: FAILURE + abort-all-jobs: false + + # yamllint enable rule:key-duplicates + jobs: + - "xtesting-docker-{stream}" + - "xtesting-docker-build-{arch_tag}-{stream}" + - "xtesting-docker-manifest-{stream}" + +######################## +# job templates +######################## +- job-template: + name: 'xtesting-docker-{stream}' + + project-type: multijob + + disabled: '{obj:disabled}' + + parameters: + - xtesting-job-parameters: + project: '{project}' + branch: '{branch}' + slave_label: 'opnfv-build-ubuntu' + arch_tag: 'amd64' + + properties: + - throttle: + max-per-node: 1 + option: 'project' + + scm: + - git-scm + + triggers: + - pollscm: + cron: "*/30 * * * *" + - gerrit-trigger-tag-created: + project: '{project}' + + builders: + - multijob: + name: 'build xtesting images' + execution-type: PARALLEL + projects: + - name: 'xtesting-docker-build-amd64-{stream}' + <<: *build-job-settings + - name: 'xtesting-docker-build-arm64-{stream}' + <<: *build-job-settings + - multijob: + name: 'publish xtesting manifests' + execution-type: PARALLEL + projects: + - name: 'xtesting-docker-manifest-{stream}' + <<: *manifest-job-settings + + publishers: + - 'xtesting-amd64-recipients' + - 'xtesting-arm64-recipients' + +- job-template: + name: 'xtesting-docker-build-{arch_tag}-{stream}' + disabled: '{obj:disabled}' + parameters: + - xtesting-job-parameters: + project: '{project}' + branch: '{branch}' + slave_label: '{slave_label}' + arch_tag: '{arch_tag}' + scm: + - git-scm + builders: + - shell: | + #!/bin/bash -ex + sudo arch={arch_tag} bash ./build.sh + exit $? + +- job-template: + name: 'xtesting-docker-manifest-{stream}' + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - label: + name: SLAVE_LABEL + default: 'opnfv-build-ubuntu' + description: 'Slave label on Jenkins' + - string: + name: PROJECT + default: "{project}" + description: "Project name used to enable job conditions" + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + - string: + name: REPO + default: "opnfv" + description: "Repository name for functest images" + + + disabled: '{obj:disabled}' + + builders: + - shell: | + #!/bin/bash -ex + case "{stream}" in + "master") + tag="latest" ;; + *) + tag="{stream}" ;; + esac + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template $REPO/xtesting:ARCH-$tag \ + --target $REPO/xtesting:$tag + exit $? + +- parameter: + name: xtesting-job-parameters + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - label: + name: SLAVE_LABEL + default: '{slave_label}' + description: 'Slave label on Jenkins' + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + - string: + name: PUSH_IMAGE + default: "true" + description: "To enable/disable pushing the image to Dockerhub." + - string: + name: COMMIT_ID + default: "" + description: "commit id to make a snapshot docker image" + - string: + name: GERRIT_REFNAME + default: "" + description: "Docker tag to be built, e.g. refs/tags/5.0.0, refs/tags/opnfv-5.0.0, refs/tags/5.0.RC1" + - string: + name: DOCKERFILE + default: "Dockerfile" + description: "Dockerfile to use for creating the image." + - string: + name: ARCH_TAG + default: "{arch_tag}" + description: "If set, this value will be added to the docker image tag as a prefix" + - string: + name: PROJECT + default: "{project}" + description: "Project name used to enable job conditions" + - string: + name: REPO + default: "opnfv" + description: "Repository name for functest images" + +# publisher macros +- publisher: + name: 'xtesting-arm64-recipients' + publishers: + - email: + recipients: > + cristina.pauna@enea.com + alexandru.avadanii@enea.com + delia.popescu@enea.com + +- publisher: + name: 'xtesting-amd64-recipients' + publishers: + - email: + recipients: > + jalausuch@suse.com morgan.richomme@orange.com + cedric.ollivier@orange.com feng.xiaowei@zte.com.cn + juha.kosonen@nokia.com wangwulin@huawei.com + valentin.boucher@kontron.com diff --git a/jjb/global-jjb b/jjb/global-jjb new file mode 160000 +Subproject 779110b5cd63f3eabb63598a1be79d9b9ba8546 diff --git a/jjb/global/installer-report.sh b/jjb/global/installer-report.sh index e2fcfd6f6..6cd83f1f1 100755 --- a/jjb/global/installer-report.sh +++ b/jjb/global/installer-report.sh @@ -8,18 +8,39 @@ ############################################################################## source $WORKSPACE/installer_track.sh -echo """ - INSTALLER: $INSTALLER - INSTALLER_VERSION: $INSTALLER_VERSION - JOB_NAME: $JOB_NAME - BUILD_ID: $BUILD_ID - SENARIO: $DEPLOY_SCENARIO - UPSTREAM_JOB_NAME: $UPSTREAM_JOB_NAME: - UPSTREAM_BUILD_ID: $UPSTREAM_BUILD_ID - PROVISION_RESULT: $PROVISION_RESULT - TIMESTAMP_START: $TIMESTAMP_START - TIMESTAMP_END: `date '+%Y-%m-%d %H:%M:%S.%3N'` - POD_NAME: $NODE_NAME -""" -# TODO call TestAPI to report installer provisoin result when API is ready +gen_content() +{ + cat <<EOF +{ + "installer": "$INSTALLER", + "version": "$INSTALLER_VERSION", + "pod_name": "$NODE_NAME", + "job_name": "$JOB_NAME", + "build_id": "$BUILD_ID", + "scenario": "$DEPLOY_SCENARIO", + "upstream_job_name": "$UPSTREAM_JOB_NAME", + "upstream_build_id":"$UPSTREAM_BUILD_ID", + "criteria": "$PROVISION_RESULT", + "start_date": "$TIMESTAMP_START", + "stop_date": "$TIMESTAMP_END", + "details":"" +} +EOF +} + +echo "Installer: $INSTALLER provision result: $PROVISION_RESULT" +echo $(gen_content) + +set -o xtrace +curl -H "Content-Type: application/json" -X POST -v -d "$(gen_content)" \ + $TESTAPI_URL/deployresults || true + +# INFO +# postbuildscript plugin shall always return the original job running status, +# for the result returned from postbuildscript affects the CI pipeline. +if [ "$PROVISION_RESULT" == "PASS" ]; then + exit 0 +else + exit 1 +fi diff --git a/jjb/global/releng-macros.yml b/jjb/global/releng-macros.yml index 3433cee5f..205802fab 100644 --- a/jjb/global/releng-macros.yml +++ b/jjb/global/releng-macros.yml @@ -40,6 +40,30 @@ default: 'refs/heads/{branch}' description: "Default refspec needed for manually triggering." +- parameter: + name: testapi-parameter + parameters: + - string: + name: TESTAPI_URL + default: 'http://testresults.opnfv.org/test/api/v1' + description: "Default TestAPI URL, currently using v1" + - string: + name: DEPLOY_SCENARIO + default: 'os-nosdn-nofeature-ha' + description: "OPNFV deployment scenario" + - string: + name: INSTALLER_VERSION + default: 'master' + description: "Installer release version" + - string: + name: UPSTREAM_JOB_NAME + default: '' + description: "Parent job name in Jenkins" + - string: + name: UPSTREAM_BUILD_ID + default: '' + description: "Parent job build_id in Jenkins" + - property: name: logrotate-default properties: @@ -960,16 +984,18 @@ script-only-if-succeeded: true builders: - shell: | - echo "export PROVISION_RESULT=SUCCEED" >> $WORKSPACE/installer_track.sh - echo "export INSTALLER={installer}" >> $WORKSPACE/installer_track.sh + echo "export PROVISION_RESULT=PASS" >> $WORKSPACE/installer_track.sh + echo "export INSTALLER=$INSTALLER_TYPE" >> $WORKSPACE/installer_track.sh + echo "export TIMESTAMP_END="\'`date '+%Y-%m-%d %H:%M:%S.%3N'`\' >> $WORKSPACE/installer_track.sh - shell: - !include-raw-escape: installer-report.sh + !include-raw: installer-report.sh - postbuildscript: script-only-if-succeeded: false script-only-if-failed: true builders: - shell: | echo "export PROVISION_RESULT=FAIL" >> $WORKSPACE/installer_track.sh - echo "export INSTALLER={installer}" >> $WORKSPACE/installer_track.sh + echo "export INSTALLER=$INSTALLER_TYPE" >> $WORKSPACE/installer_track.sh + echo "export TIMESTAMP_END="\'`date '+%Y-%m-%d %H:%M:%S.%3N'`\' >> $WORKSPACE/installer_track.sh - shell: - !include-raw-escape: installer-report.sh + !include-raw: installer-report.sh diff --git a/jjb/global/slave-params.yml b/jjb/global/slave-params.yml index 86b369bcd..6171a6abd 100644 --- a/jjb/global/slave-params.yml +++ b/jjb/global/slave-params.yml @@ -983,6 +983,7 @@ - 'doctor-fuel-x86_64' - 'doctor-fuel-aarch64' - 'doctor-joid-x86_64' + - 'doctor-daisy-x86_64' - 'not-specified' default-slaves: - 'not-specified' diff --git a/jjb/opnfvdocs/project.cfg b/jjb/opnfvdocs/project.cfg index 0722b4036..598269737 100644 --- a/jjb/opnfvdocs/project.cfg +++ b/jjb/opnfvdocs/project.cfg @@ -2,6 +2,7 @@ apex armband availability bottlenecks +clover compass4nfv copper conductor diff --git a/jjb/pharos/check-jinja2.yml b/jjb/pharos/check-jinja2.yml index 7251d3f61..3ef2f04e5 100644 --- a/jjb/pharos/check-jinja2.yml +++ b/jjb/pharos/check-jinja2.yml @@ -68,11 +68,11 @@ - compare-type: ANT pattern: '**/*.yaml' - compare-type: ANT - pattern: 'config/installers/**/*.j2' + pattern: 'config/utils/*.py' - compare-type: ANT - pattern: 'check-jinja2.sh' + pattern: 'config/installers/**/*.j2' - compare-type: ANT - pattern: 'check-schema.sh' + pattern: 'check-*.sh' skip-vote: successful: false failed: false diff --git a/jjb/qtip/qtip-validate-jobs.yml b/jjb/qtip/qtip-validate-jobs.yml index 5c0bb881b..c5bf58391 100644 --- a/jjb/qtip/qtip-validate-jobs.yml +++ b/jjb/qtip/qtip-validate-jobs.yml @@ -34,12 +34,18 @@ pod: zte-virtual5 sut: '' <<: *master + - network: + installer: apex + pod: zte-virtual5 + sut: '' + <<: *master - compute: installer: fuel pod: zte-virtual6 sut: vnf <<: *master + # ------------------------------- # JOB LIST # ------------------------------- diff --git a/jjb/releng/compass4nfv-docker.yml b/jjb/releng/compass4nfv-docker.yml index 7f142241c..5fbb37ca2 100644 --- a/jjb/releng/compass4nfv-docker.yml +++ b/jjb/releng/compass4nfv-docker.yml @@ -27,6 +27,8 @@ - 'db' - 'deck' - 'tasks-base' + - 'tasks-k8s' + - 'tasks-osa' # settings for jobs run in multijob phases build-job-settings: &build-job-settings @@ -95,6 +97,10 @@ <<: *build-job-settings - name: 'compass-tasks-build-amd64-{stream}' <<: *build-job-settings + - name: 'compass-tasks-k8s-build-amd64-{stream}' + <<: *build-job-settings + - name: 'compass-tasks-osa-build-amd64-{stream}' + <<: *build-job-settings publishers: - 'compass-amd64-recipients' diff --git a/jjb/releng/opnfv-docker.yml b/jjb/releng/opnfv-docker.yml index 93b9a9c51..55cbc5f1d 100644 --- a/jjb/releng/opnfv-docker.yml +++ b/jjb/releng/opnfv-docker.yml @@ -64,6 +64,11 @@ dockerdir: 'docker/barometer-ves' <<: *master <<: *other-receivers + - 'barometer-snmp': + project: 'barometer' + dockerdir: 'docker/barometer-snmp' + <<: *master + <<: *other-receivers - 'bottlenecks': project: 'bottlenecks' <<: *master @@ -86,6 +91,11 @@ dockerfile: 'docker/Dockerfile.local' <<: *master <<: *other-receivers + - 'qtip-nettest': + project: 'qtip' + dockerdir: 'contrib/nettest' + <<: *master + <<: *other-receivers - 'storperf-master': project: 'storperf' dockerdir: 'docker/storperf-master' @@ -171,10 +181,6 @@ project: 'yardstick' <<: *euphrates <<: *other-receivers - - 'xtesting': - project: 'functest-xtesting' - <<: *master - <<: *other-receivers # projects with jobs for danube - 'dovetail': project: 'dovetail' diff --git a/jjb/releng/automate.yml b/jjb/releng/testresults-automate.yml index 6bd952a1d..01fbe0c6d 100644 --- a/jjb/releng/automate.yml +++ b/jjb/releng/testresults-automate.yml @@ -1,6 +1,6 @@ --- - project: - name: utils-automate + name: testresults-automate stream: - master: branch: '{stream}' @@ -17,7 +17,6 @@ jobs: - '{module}-automate-{stream}' - '{module}-automate-{phase}-{stream}' - - '{module}-verify-{stream}' project: 'releng-testresults' @@ -53,53 +52,6 @@ send-to-individuals: true - job-template: - name: '{module}-verify-{stream}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - 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: '{module}/**' - - builders: - - shell: | - cd {module}/ - tox - if [ -e *.xml ];then - cp *.xml $WORKSPACE - fi - - publishers: - - publish-coverage - - email-jenkins-admins-on-failure - -- job-template: name: '{module}-automate-{stream}' project-type: multijob @@ -135,21 +87,10 @@ fail: true triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - change-merged-event - - comment-added-contains-event: - comment-contains-value: 'remerge' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - file-paths: - - compare-type: 'ANT' - pattern: '{module}/**' + - gerrit-trigger-change-merged: + project: '**' + branch: '{branch}' + files: '{module}/**' builders: - description-setter: diff --git a/jjb/releng/testresults-verify.yml b/jjb/releng/testresults-verify.yml new file mode 100644 index 000000000..958833c0f --- /dev/null +++ b/jjb/releng/testresults-verify.yml @@ -0,0 +1,78 @@ +--- +- project: + name: testresults-verify + stream: + - master: + branch: '{stream}' + + module: + - 'testapi' + - 'reporting' + + jobs: + - '{module}-verify-{stream}' + - '{module}-client-verify-{stream}' + + project: 'releng-testresults' + +- job-template: + name: '{module}-verify-{stream}' + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - 'opnfv-build-ubuntu-defaults' + + scm: + - git-scm-gerrit + + triggers: + - gerrit-trigger-patchset-created: + server: 'gerrit.opnfv.org' + project: '**' + branch: '{branch}' + files: '{module}/**' + + builders: + - shell: | + cd {module}/ + tox + if [ -e *.xml ];then + cp *.xml $WORKSPACE + fi + + publishers: + - publish-coverage + - email-jenkins-admins-on-failure + +- job-template: + name: '{module}-client-verify-{stream}' + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - 'opnfv-build-ubuntu-defaults' + + scm: + - git-scm-gerrit + + triggers: + - gerrit-trigger-patchset-created: + server: 'gerrit.opnfv.org' + project: '**' + branch: '{branch}' + files: '{module}/{module}-client/**' + + builders: + - shell: | + cd {module}/{module}-client + tox + if [ -e *.xml ];then + cp *.xml $WORKSPACE + fi + + publishers: + - publish-coverage + - email-jenkins-admins-on-failure diff --git a/jjb/xci/bifrost-verify-jobs.yml b/jjb/xci/bifrost-verify-jobs.yml index 7e0117565..2fb7c2167 100644 --- a/jjb/xci/bifrost-verify-jobs.yml +++ b/jjb/xci/bifrost-verify-jobs.yml @@ -162,6 +162,13 @@ recipients: fatih.degirmenci@ericsson.com yroblamo@redhat.com mchandras@suse.de jack.morgan@intel.com julienjut@gmail.com # yamllint enable rule:line-length - email-jenkins-admins-on-failure + - postbuildscript: + script-only-if-succeeded: false + script-only-if-failed: false + builders: + - shell: + !include-raw: ./xci-cleanup.sh + # ------------------------------- # trigger macros # ------------------------------- diff --git a/jjb/xci/osa-periodic-jobs.yml b/jjb/xci/osa-periodic-jobs.yml index e604a0a03..6c2d165a4 100644 --- a/jjb/xci/osa-periodic-jobs.yml +++ b/jjb/xci/osa-periodic-jobs.yml @@ -216,6 +216,7 @@ export FUNCTEST_MODE=$FUNCTEST_MODE export FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME export XCI_FLAVOR=$XCI_FLAVOR + export CORE_OPENSTACK_INSTALL=true export CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES export OPNFV_RELENG_DEV_PATH=/home/devuser/releng-xci/ export INSTALLER_TYPE=$INSTALLER_TYPE diff --git a/jjb/xci/xci-cleanup.sh b/jjb/xci/xci-cleanup.sh index ce84830aa..51a863da2 100755 --- a/jjb/xci/xci-cleanup.sh +++ b/jjb/xci/xci-cleanup.sh @@ -14,11 +14,15 @@ # what you are doing. #---------------------------------------------------------------------- +# Need to cover macros with and without parameters +VM_NAME=$DISTRO +VM_NAME+=_xci_vm + # skip the deployment if the patch doesn't impact the deployment if [[ "$GERRIT_TOPIC" =~ 'skip-verify' ]]; then echo "Skipping the deployment!" exit 0 fi -sudo virsh destroy ${DISTRO}_xci_vm || true -sudo virsh undefine ${DISTRO}_xci_vm || true +sudo virsh destroy $VM_NAME || true +sudo virsh undefine $VM_NAME || true diff --git a/jjb/xci/xci-daily-jobs.yml b/jjb/xci/xci-daily-jobs.yml index a92e49085..11db4e168 100644 --- a/jjb/xci/xci-daily-jobs.yml +++ b/jjb/xci/xci-daily-jobs.yml @@ -154,6 +154,12 @@ recipients: fatih.degirmenci@ericsson.com yroblamo@redhat.com mchandras@suse.de jack.morgan@intel.com julienjut@gmail.com # yamllint enable rule:line-length - email-jenkins-admins-on-failure + - postbuildscript: + script-only-if-succeeded: false + script-only-if-failed: false + builders: + - shell: + !include-raw: ./xci-cleanup.sh - job-template: name: 'xci-{phase}-{pod}-{distro}-daily-{stream}' diff --git a/jjb/xci/xci-merge-jobs.yml b/jjb/xci/xci-merge-jobs.yml index 492348d63..d6442a976 100644 --- a/jjb/xci/xci-merge-jobs.yml +++ b/jjb/xci/xci-merge-jobs.yml @@ -2,51 +2,49 @@ - project: name: 'opnfv-xci-merge' + project: releng-xci # ------------------------------- # branches # ------------------------------- stream: - master: branch: '{stream}' + disabled: false # ------------------------------- # distros # ------------------------------- distro: - ubuntu: disabled: false + kill-phase-on: FAILURE + abort-all-job: true - centos: - disabled: false + disabled: true + kill-phase-on: NEVER + abort-all-job: false - opensuse: disabled: false + kill-phase-on: FAILURE + abort-all-job: true # ------------------------------- - # type - # ------------------------------- - type: - - virtual - # ------------------------------- - # patch verification phases + # postmerge promotion phases # ------------------------------- phase: - 'deploy' - 'healthcheck' - - 'promote' - # ------------------------------- - # scenarios - # ------------------------------- - scenario: - - 'os-odl-sfc': - project: sfc # ------------------------------- # jobs # ------------------------------- jobs: - - 'xci-{scenario}-{type}-{distro}-merge-{stream}' - - 'xci-{phase}-{type}-{distro}-merge-{stream}' + - 'xci-merge-virtual-{stream}' + - 'xci-merge-promote-virtual-{stream}' + - 'xci-merge-{distro}-virtual-{stream}' + - 'xci-merge-{distro}-{phase}-virtual-{stream}' # ------------------------------- # job templates # ------------------------------- - job-template: - name: 'xci-{scenario}-{type}-{distro}-merge-{stream}' + name: 'xci-merge-virtual-{stream}' project-type: multijob @@ -56,22 +54,6 @@ properties: - logrotate-default - - build-blocker: - use-build-blocker: true - blocking-jobs: - - 'xci-verify-{distro}-.*' - - 'xci-.*-{distro}-merge-.*' - - 'openstack-bifrost-verify-{distro}-.*' - - 'xci-osa-verify-{distro}-.*' - - 'xci-osa-periodic-{distro}-.*' - - 'xci-(os|k8s).*?-virtual-{distro}-.*' - block-level: 'NODE' - - throttle: - max-per-node: 2 - max-total: 10 - categories: - - xci-verify-virtual - option: category wrappers: - ssh-agent-wrapper @@ -80,12 +62,7 @@ - fix-workspace-permissions scm: - - git: - credentials-id: '$SSH_CREDENTIAL_ID' - url: 'https://gerrit.opnfv.org/gerrit/releng-xci' - branches: - - 'origin/master' - timeout: 15 + - git-scm-gerrit triggers: - gerrit: @@ -96,7 +73,22 @@ comment-contains-value: 'remerge' projects: - project-compare-type: 'ANT' - project-pattern: '{obj:project}' + project-pattern: 'releng-xci' + branches: + - branch-compare-type: 'ANT' + branch-pattern: '**/{branch}' + disable-strict-forbidden-file-verification: 'false' + forbidden-file-paths: + - compare-type: ANT + pattern: 'xci/scripts/vm/**' + - compare-type: ANT + pattern: 'docs/**' + - compare-type: ANT + pattern: 'prototypes/**' + - compare-type: ANT + pattern: 'upstream/**' + - project-compare-type: 'REG_EXP' + project-pattern: 'sfc|sdnvpn' branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' @@ -109,14 +101,23 @@ parameters: - project-parameter: - project: '{obj:project}' + project: $GERRIT_PROJECT branch: '{branch}' - label: name: SLAVE_LABEL default: 'xci-virtual' - string: - name: DEPLOY_SCENARIO - default: '{scenario}' + name: CI_LOOP + default: 'merge' + - string: + name: FUNCTEST_MODE + default: 'tier' + - string: + name: FUNCTEST_SUITE_NAME + default: 'healthcheck' + - string: + name: DISTRO + default: 'all' - string: name: CLEAN_DIB_IMAGES default: 'true' @@ -126,53 +127,205 @@ description: 'Git URL to use on this Jenkins Slave' builders: + - 'xci-merge-set-scenario-macro' + - inject: + properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties" - description-setter: - description: "Built on $NODE_NAME" + description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME" + - multijob: + name: deploy and test + condition: SUCCESSFUL + projects: + - name: 'xci-merge-opensuse-virtual-{stream}' + current-parameters: false + predefined-parameters: | + DISTRO=opensuse + CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES + GERRIT_PROJECT=$GERRIT_PROJECT + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + CI_LOOP=$CI_LOOP + FUNCTEST_MODE=$FUNCTEST_MODE + FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME + node-parameters: false + kill-phase-on: FAILURE + abort-all-job: true + - name: 'xci-merge-ubuntu-virtual-{stream}' + current-parameters: false + predefined-parameters: | + DISTRO=ubuntu + CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES + GERRIT_PROJECT=$GERRIT_PROJECT + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + CI_LOOP=$CI_LOOP + FUNCTEST_MODE=$FUNCTEST_MODE + FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME + node-parameters: false + kill-phase-on: FAILURE + abort-all-job: true + - name: 'xci-merge-centos-virtual-{stream}' + current-parameters: false + predefined-parameters: | + DISTRO=centos + CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES + GERRIT_PROJECT=$GERRIT_PROJECT + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + CI_LOOP=$CI_LOOP + FUNCTEST_MODE=$FUNCTEST_MODE + FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME + node-parameters: false + kill-phase-on: NEVER + abort-all-job: false + - inject: + properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties" + - multijob: + name: promote + condition: SUCCESSFUL + projects: + - name: 'xci-merge-promote-virtual-{stream}' + current-parameters: true + predefined-parameters: | + GERRIT_PROJECT=$GERRIT_PROJECT + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + CI_LOOP=$CI_LOOP + FUNCTEST_MODE=$FUNCTEST_MODE + FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME + node-parameters: true + kill-phase-on: NEVER + abort-all-job: true + +- job-template: + name: 'xci-merge-{distro}-virtual-{stream}' + + project-type: multijob + + disabled: '{obj:disabled}' + + concurrent: false + + properties: + - logrotate-default + - build-blocker: + use-build-blocker: true + blocking-jobs: + - 'xci-verify-{distro}-.*' + - 'xci-merge-{distro}-.*' + - 'openstack-bifrost-verify-{distro}-.*' + - 'xci-osa-verify-{distro}-.*' + - 'xci-osa-periodic-{distro}-.*' + block-level: 'NODE' + - throttle: + max-per-node: 1 + max-total: 3 + categories: + - xci-verify-virtual + option: category + + wrappers: + - ssh-agent-wrapper + - build-timeout: + timeout: 240 + - fix-workspace-permissions + + scm: + - git-scm-gerrit + + parameters: + - project-parameter: + project: $GERRIT_PROJECT + branch: '{branch}' + - label: + name: SLAVE_LABEL + default: 'xci-virtual' + - string: + name: CI_LOOP + default: 'merge' + - string: + name: FUNCTEST_MODE + default: 'tier' + - string: + name: FUNCTEST_SUITE_NAME + default: 'healthcheck' + - string: + name: DISTRO + default: '{distro}' + - string: + name: CLEAN_DIB_IMAGES + default: 'true' + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + + builders: + - 'xci-merge-set-scenario-macro' + - inject: + properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties" + - description-setter: + description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME" - multijob: name: deploy condition: SUCCESSFUL projects: - - name: 'xci-deploy-{type}-{distro}-merge-{stream}' + - name: 'xci-merge-{distro}-deploy-virtual-{stream}' current-parameters: true predefined-parameters: | - PROJECT=$PROJECT DISTRO={distro} - DEPLOY_SCENARIO={scenario} CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES + GERRIT_PROJECT=$GERRIT_PROJECT GERRIT_BRANCH=$GERRIT_BRANCH GERRIT_REFSPEC=$GERRIT_REFSPEC GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE node-parameters: true - kill-phase-on: FAILURE - abort-all-job: true + kill-phase-on: '{kill-phase-on}' + abort-all-job: '{abort-all-job}' - multijob: name: healthcheck condition: SUCCESSFUL projects: - - name: 'xci-healthcheck-{type}-{distro}-merge-{stream}' + - name: 'xci-merge-{distro}-healthcheck-virtual-{stream}' current-parameters: true predefined-parameters: | - PROJECT=$PROJECT DISTRO={distro} - DEPLOY_SCENARIO={scenario} CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES - FUNCTEST_MODE=tier - FUNCTEST_TIER=healthcheck + GERRIT_PROJECT=$GERRIT_PROJECT GERRIT_BRANCH=$GERRIT_BRANCH GERRIT_REFSPEC=$GERRIT_REFSPEC GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + CI_LOOP=$CI_LOOP + FUNCTEST_MODE=$FUNCTEST_MODE + FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME node-parameters: true - kill-phase-on: NEVER - abort-all-job: true + kill-phase-on: '{kill-phase-on}' + abort-all-job: '{abort-all-job}' + + publishers: + - postbuildscript: + script-only-if-succeeded: false + script-only-if-failed: false + builders: + - shell: + !include-raw: ./xci-cleanup.sh - job-template: - name: 'xci-{phase}-{type}-{distro}-merge-{stream}' + name: 'xci-merge-{distro}-{phase}-virtual-{stream}' disabled: false - concurrent: true + concurrent: false properties: - logrotate-default @@ -188,13 +341,13 @@ parameters: - string: name: PROJECT - default: 'releng-xci' + default: $GERRIT_PROJECT - string: name: DISTRO default: 'ubuntu' - string: - name: DEPLOY_SCENARIO - default: 'os-nosdn-nofeature-noha' + name: CI_LOOP + default: 'merge' - string: name: FUNCTEST_MODE default: 'tier' @@ -211,40 +364,94 @@ name: OPNFV_RELENG_DEV_PATH default: $WORKSPACE/ - string: - name: INSTALLER_TYPE - default: 'osa' - - string: name: GIT_BASE default: https://gerrit.opnfv.org/gerrit/$PROJECT description: 'Git URL to use on this Jenkins Slave' wrappers: + - inject: + properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties" - ssh-agent-wrapper - build-timeout: timeout: 240 - fix-workspace-permissions scm: - - git: - credentials-id: '$SSH_CREDENTIAL_ID' - url: 'https://gerrit.opnfv.org/gerrit/releng-xci' - branches: - - 'origin/master' - timeout: 15 + - git-scm-gerrit builders: - description-setter: - description: "Built on $NODE_NAME" + description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME" - 'xci-merge-{phase}-macro' +- job-template: + name: 'xci-merge-promote-virtual-{stream}' + + disabled: false + + concurrent: false + + properties: + - logrotate-default + + parameters: + - string: + name: PROJECT + default: $GERRIT_PROJECT + - string: + name: CI_LOOP + default: 'merge' + - string: + name: FUNCTEST_MODE + default: 'tier' + - string: + name: FUNCTEST_SUITE_NAME + default: 'healthcheck' + - string: + name: DISTRO + default: 'all' + - string: + name: OPNFV_RELENG_DEV_PATH + default: $WORKSPACE/ + - string: + name: LOCAL_PROMOTION_METADATA_FILE + default: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties" + - string: + name: REMOTE_PROMOTION_METADATA_FILE + default: "gs://artifacts.opnfv.org/xci/pipeline/merge/$DEPLOY_SCENARIO.properties" + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + + wrappers: + - inject: + properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties" + - ssh-agent-wrapper + - build-timeout: + timeout: 240 + - fix-workspace-permissions + + builders: + - description-setter: + description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME" + - 'xci-merge-promote-macro' + # ------------------------------- # builder macros # ------------------------------- - builder: + name: 'xci-merge-set-scenario-macro' + builders: + - shell: + !include-raw: ./xci-set-scenario.sh + +- builder: name: 'xci-merge-deploy-macro' builders: - shell: !include-raw: ./xci-start-new-vm.sh + - shell: !include-raw: ./xci-start-deployment.sh @@ -253,8 +460,6 @@ builders: - shell: !include-raw: ./xci-run-functest.sh - - shell: - !include-raw: ./xci-cleanup.sh - builder: name: 'xci-merge-promote-macro' diff --git a/jjb/xci/xci-promote.sh b/jjb/xci/xci-promote.sh index 98ad7ff4a..fb7e0e6fa 100755 --- a/jjb/xci/xci-promote.sh +++ b/jjb/xci/xci-promote.sh @@ -14,17 +14,33 @@ # what you are doing. #---------------------------------------------------------------------- +# ensure GERRIT_TOPIC is set +GERRIT_TOPIC="${GERRIT_TOPIC:-''}" + # 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 +# fail if promotion metadata file doesn't exist +if [ ! -f $LOCAL_PROMOTION_METADATA_FILE ]; then + echo "Unable to find promotion metadata file $LOCAL_PROMOTION_METADATA_FILE" + echo "Skipping promotion!" + exit 1 fi -echo "Hello World!" +# upload promotion metadata file to OPNFV artifact repo +echo "Storing promotion metadata as $REMOTE_PROMOTION_METADATA_FILE" +gsutil cp $LOCAL_PROMOTION_METADATA_FILE $REMOTE_PROMOTION_METADATA_FILE > /dev/null 2>&1 + +# update the file metadata on gs to prevent the use of cached version of the file +gsutil -m setmeta -r -h "Cache-Control:private, max-age=0, no-transform" \ + $REMOTE_PROMOTION_METADATA_FILE > /dev/null 2>&1 + +# log the metadata to console +echo "Stored the metadata for $DEPLOY_SCENARIO" +echo "---------------------------------------------------------------------------------" +gsutil cat $REMOTE_PROMOTION_METADATA_FILE +echo "---------------------------------------------------------------------------------" +echo "Scenario $DEPLOY_SCENARIO has successfully been promoted!" diff --git a/jjb/xci/xci-run-functest.sh b/jjb/xci/xci-run-functest.sh index 238a833d0..2e343631b 100755 --- a/jjb/xci/xci-run-functest.sh +++ b/jjb/xci/xci-run-functest.sh @@ -7,6 +7,7 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +set -o nounset #---------------------------------------------------------------------- # This script is used by CI and executed by Jenkins jobs. @@ -14,12 +15,21 @@ # what you are doing. #---------------------------------------------------------------------- +# ensure GERRIT_TOPIC is set +GERRIT_TOPIC="${GERRIT_TOPIC:-''}" + # 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 healthcheck if the scenario is Kubernetes scenario +if [[ "$DEPLOY_SCENARIO" =~ k8 ]]; then + echo "Skipping the healthcheck!" + exit 0 +fi + # if the scenario is external, we need to wipe WORKSPACE to place releng-xci there since # the project where the scenario is coming from is cloned and the patch checked out to the # xci/scenarios/$DEPLOY_SCENARIO to be synched on clean VM @@ -42,3 +52,12 @@ fi ssh -F $HOME/.ssh/${DISTRO}-xci-vm-config ${DISTRO}_xci_vm "cd releng-xci/xci && PATH=/home/devuser/.local/bin:$PATH ansible-playbook -i installer/osa/files/$XCI_FLAVOR/inventory playbooks/prepare-functest.yml" echo "Running functest" ssh -F $HOME/.ssh/${DISTRO}-xci-vm-config ${DISTRO}_xci_vm_opnfv "/root/run-functest.sh" +echo "Functest log" +echo "---------------------------------------------------------------------------------" +ssh -F $HOME/.ssh/${DISTRO}-xci-vm-config ${DISTRO}_xci_vm_opnfv "cat /root/results/functest.log" +echo "---------------------------------------------------------------------------------" +# check the log to see if we have any error +if ssh -F $HOME/.ssh/${DISTRO}-xci-vm-config ${DISTRO}_xci_vm_opnfv "grep -q 'FAIL' /root/results/functest.log"; then + echo "Error: Functest failed!" + exit 1 +fi diff --git a/jjb/xci/xci-set-scenario.sh b/jjb/xci/xci-set-scenario.sh index 764857ba4..c3012cd88 100755 --- a/jjb/xci/xci-set-scenario.sh +++ b/jjb/xci/xci-set-scenario.sh @@ -8,7 +8,6 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## set -o errexit -set -o nounset set -o pipefail #---------------------------------------------------------------------- @@ -17,64 +16,201 @@ set -o pipefail # what you are doing. #---------------------------------------------------------------------- -WORK_DIRECTORY=/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO -/bin/rm -rf $WORK_DIRECTORY && mkdir -p $WORK_DIRECTORY +# This function allows developers to specify the impacted scenario by adding +# the info about installer and scenario into the commit message or using +# the topic branch names. This results in either skipping the real verification +# totally or skipping the determining the installer and scenario programmatically. +# It is important to note that this feature is only available to generic scenarios +# and only single installer/scenario pair is allowed. +# The input in commit message should be placed at the end of the commit message body, +# before the signed-off and change-id lines. +# +# Pattern to be searched in Commit Message +# deploy-scenario:<scenario-name> +# installer-type:<installer-type> +# Examples: +# deploy-scenario:os-odl-nofeature +# installer-type:osa +# +# deploy-scenario:k8-nosdn-nofeature +# installer-type:kubespray +# +# Patterns to be searched in topic branch name +# skip-verify +# skip-deployment +# force-verify +function override_generic_scenario() { + echo "Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC" -# ensure GERRIT_TOPIC is set -GERRIT_TOPIC="${GERRIT_TOPIC:-''}" + # ensure the metadata we record is consistent for all types of patches including skipped ones + # extract releng-xci sha + XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD) -# skip the healthcheck if the patch doesn't impact the deployment -if [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment ]]; then - echo "Skipping verify!" - echo "DEPLOY_SCENARIO=os-nosdn-nofeature" > $WORK_DIRECTORY/scenario.properties - exit 0 -fi + # extract scenario sha which is same as releng-xci sha for generic scenarios + SCENARIO_SHA=$XCI_SHA + + # process topic branch names + if [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment|force-verify ]]; then + [[ "$GERRIT_TOPIC" =~ force-verify ]] && echo "Forcing CI verification using default scenario and installer!" + [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment ]] && echo "Skipping verification!" + echo "INSTALLER_TYPE=osa" > $WORK_DIRECTORY/scenario.properties + echo "DEPLOY_SCENARIO=os-nosdn-nofeature" >> $WORK_DIRECTORY/scenario.properties + echo "XCI_SHA=$XCI_SHA" >> $WORK_DIRECTORY/scenario.properties + echo "SCENARIO_SHA=$SCENARIO_SHA" >> $WORK_DIRECTORY/scenario.properties + echo "PROJECT_NAME=$GERRIT_PROJECT" >> $WORK_DIRECTORY/scenario.properties + exit 0 + fi + + # process commit message + if [[ "$GERRIT_CHANGE_COMMIT_MESSAGE" =~ "installer-type:" && "$GERRIT_CHANGE_COMMIT_MESSAGE" =~ "deploy-scenario:" ]]; then + INSTALLER_TYPE=$(echo $GERRIT_CHANGE_COMMIT_MESSAGE | awk '/installer-type:/' RS=" " | cut -d":" -f2) + DEPLOY_SCENARIO=$(echo $GERRIT_CHANGE_COMMIT_MESSAGE | awk '/deploy-scenario:/' RS=" " | cut -d":" -f2) + + if [[ -z "$INSTALLER_TYPE" || -z "$DEPLOY_SCENARIO" ]]; then + echo "Installer type or deploy scenario is not specified. Falling back to programmatically determining them." + else + echo "Recording the installer '$INSTALLER_TYPE' and scenario '$DEPLOY_SCENARIO' for downstream jobs" + echo "INSTALLER_TYPE=$INSTALLER_TYPE" > $WORK_DIRECTORY/scenario.properties + echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> $WORK_DIRECTORY/scenario.properties + echo "XCI_SHA=$XCI_SHA" >> $WORK_DIRECTORY/scenario.properties + echo "SCENARIO_SHA=$SCENARIO_SHA" >> $WORK_DIRECTORY/scenario.properties + echo "PROJECT_NAME=$GERRIT_PROJECT" >> $WORK_DIRECTORY/scenario.properties + exit 0 + fi + else + echo "Installer type or deploy scenario is not specified. Falling back to programmatically determining them." + fi +} -# if the scenario is external, we need to wipe WORKSPACE to place releng-xci there since -# the project where the scenario is coming from is cloned and the patch checked out to the -# xci/scenarios/$DEPLOY_SCENARIO to be synched on clean VM -# apart from that, we need releng-xci stuff in WORKSPACE for things to function correctly on Jenkins. -# if the change is coming to releng-xci, we don't need to do anything since the patch is checked -# out to the WORKSPACE anyways -if [[ $GERRIT_PROJECT != "releng-xci" ]]; then +# This function determines the impacted generic scenario by processing the +# change and using diff to see what changed. If changed files belong to a scenario +# its name gets recorded for deploying and testing the right scenario. +# +# Pattern to be searched in Changeset +# releng-xci/scenarios/<scenario>/<impacted files>: <scenario> +# releng-xci/xci/installer/osa/<impacted files>: os-nosdn-nofeature +# releng-xci/xci/installer/kubespray/<impacted files>: k8-nosdn-nofeature +# the rest: os-nosdn-nofeature +function determine_generic_scenario() { + echo "Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC" + + # get the changeset + cd $WORKSPACE + CHANGESET=$(git diff HEAD^..HEAD --name-only) + for CHANGED_FILE in $CHANGESET; do + case $CHANGED_FILE in + *k8-nosdn*|*kubespray*) + [[ ${DEPLOY_SCENARIO[@]} =~ "k8-nosdn-nofeature" ]] || DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]='k8-nosdn-nofeature' + ;; + *os-odl*) + [[ ${DEPLOY_SCENARIO[@]} =~ "os-odl-nofeature" ]] || DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]='os-odl-nofeature' + ;; + *os-nosdn*|*osa*) + [[ ${DEPLOY_SCENARIO[@]} =~ "os-nosdn-nofeature" ]] || DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]='os-nosdn-nofeature' + ;; + *) + [[ ${DEPLOY_SCENARIO[@]} =~ "os-nosdn-nofeature" ]] || DEPLOY_SCENARIO[${#DEPLOY_SCENARIO[@]}]='os-nosdn-nofeature' + ;; + esac + done + + # extract releng-xci sha + XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD) + + # extract scenario sha which is same as releng-xci sha for generic scenarios + SCENARIO_SHA=$XCI_SHA +} + +# This function determines the impacted external scenario by processing the Gerrit +# change and using diff to see what changed. If changed files belong to a scenario +# its name gets recorded for deploying and testing the right scenario. +# +# Pattern +# <project-repo>/scenarios/<scenario>/<impacted files>: <scenario> +function determine_external_scenario() { + echo "Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC" + + # remove the clone that is done via jenkins and place releng-xci there so the + # things continue functioning properly cd $HOME && /bin/rm -rf $WORKSPACE - git clone https://gerrit.opnfv.org/gerrit/releng-xci $WORKSPACE && cd $WORKSPACE + git clone -q https://gerrit.opnfv.org/gerrit/releng-xci $WORKSPACE && cd $WORKSPACE + + # fix the permissions so ssh doesn't complain due to having world-readable keyfiles chmod -R go-rwx $WORKSPACE/xci/scripts/vm -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" - echo "DEPLOY_SCENARIO=os-nosdn-nofeature" > $WORK_DIRECTORY/scenario.properties - exit 0 -fi + # clone the project repo and fetch the patchset to process for further processing + git clone -q https://gerrit.opnfv.org/gerrit/$GERRIT_PROJECT $WORK_DIRECTORY/$GERRIT_PROJECT + cd $WORK_DIRECTORY/$GERRIT_PROJECT + git fetch -q https://gerrit.opnfv.org/gerrit/$GERRIT_PROJECT $GERRIT_REFSPEC && git checkout -q FETCH_HEAD + + # process the diff to find out what scenario(s) are impacted - there should only be 1 + DEPLOY_SCENARIO+=$(git diff HEAD^..HEAD --name-only | grep scenarios | awk -F '[/|/]' '{print $2}' | uniq) + + # extract releng-xci sha + XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD) -# 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. + # extract scenario sha + SCENARIO_SHA=$(cd $WORK_DIRECTORY/$GERRIT_PROJECT && git rev-parse HEAD) +} -git clone https://gerrit.opnfv.org/gerrit/$GERRIT_PROJECT $WORK_DIRECTORY/$GERRIT_PROJECT -cd $WORK_DIRECTORY/$GERRIT_PROJECT -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 | awk -F '[/|/]' '{print $2}' | uniq) +echo "Determining the impacted scenario" + +declare -a DEPLOY_SCENARIO + +# ensure GERRIT_TOPIC is set +GERRIT_TOPIC="${GERRIT_TOPIC:-''}" + +# this directory is where the temporary clones and files are created +# while extracting the impacted scenario +WORK_DIRECTORY=/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO +/bin/rm -rf $WORK_DIRECTORY && mkdir -p $WORK_DIRECTORY + +if [[ $GERRIT_PROJECT == "releng-xci" ]]; then + override_generic_scenario + determine_generic_scenario +else + determine_external_scenario +fi # ensure single scenario is impacted -if [[ $(echo $DEPLOY_SCENARIO | wc -w) != 1 ]]; then + if [[ $(IFS=$'\n' 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 '$DEPLOY_SCENARIO' for downstream jobs" -echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" > $WORK_DIRECTORY/scenario.properties +# set the installer +case ${DEPLOY_SCENARIO[0]} in + os-*) + INSTALLER_TYPE=osa + ;; + k8-*) + INSTALLER_TYPE=kubespray + ;; + *) + echo "Unable to determine the installer. Exiting!" + exit 1 + ;; +esac + +# save the installer and scenario names into java properties file +# so they can be injected to downstream jobs via envInject +echo "Recording the installer '$INSTALLER_TYPE' and scenario '${DEPLOY_SCENARIO[0]}' and SHAs for downstream jobs" +echo "INSTALLER_TYPE=$INSTALLER_TYPE" > $WORK_DIRECTORY/scenario.properties +echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> $WORK_DIRECTORY/scenario.properties +echo "XCI_SHA=$XCI_SHA" >> $WORK_DIRECTORY/scenario.properties +echo "SCENARIO_SHA=$SCENARIO_SHA" >> $WORK_DIRECTORY/scenario.properties +echo "PROJECT_NAME=$GERRIT_PROJECT" >> $WORK_DIRECTORY/scenario.properties + +# skip scenario support check if the job is promotion job +if [[ "$JOB_NAME" =~ (os|k8) ]]; then + 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" +if ! sed -n "/^- scenario: ${DEPLOY_SCENARIO[0]}$/,/^$/p" $OPNFV_SCENARIO_REQUIREMENTS | grep -q $DISTRO; then + echo "# SKIPPED: Scenario ${DEPLOY_SCENARIO[0]} is NOT supported on $DISTRO" exit 0 fi diff --git a/jjb/xci/xci-start-deployment.sh b/jjb/xci/xci-start-deployment.sh index 0628829ea..102ca41c3 100755 --- a/jjb/xci/xci-start-deployment.sh +++ b/jjb/xci/xci-start-deployment.sh @@ -14,6 +14,9 @@ # what you are doing. #---------------------------------------------------------------------- +# ensure GERRIT_TOPIC is set +GERRIT_TOPIC="${GERRIT_TOPIC:-''}" + # skip the deployment if the patch doesn't impact the deployment if [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment ]]; then echo "Skipping the deployment!" diff --git a/jjb/xci/xci-start-new-vm.sh b/jjb/xci/xci-start-new-vm.sh index d676e2662..7874e6776 100755 --- a/jjb/xci/xci-start-new-vm.sh +++ b/jjb/xci/xci-start-new-vm.sh @@ -14,6 +14,9 @@ # what you are doing. #---------------------------------------------------------------------- +# ensure GERRIT_TOPIC is set +GERRIT_TOPIC="${GERRIT_TOPIC:-''}" + # skip the deployment if the patch doesn't impact the deployment if [[ "$GERRIT_TOPIC" =~ 'skip-verify' ]]; then echo "Skipping the deployment!" @@ -53,6 +56,8 @@ export DEPLOY_SCENARIO=$DEPLOY_SCENARIO export FUNCTEST_MODE=$FUNCTEST_MODE export FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME export XCI_FLAVOR=$XCI_FLAVOR +export CORE_OPENSTACK_INSTALL=true +export BIFROST_USE_PREBUILT_IMAGES=true export CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES export OPNFV_RELENG_DEV_PATH=/home/devuser/releng-xci/ export INSTALLER_TYPE=$INSTALLER_TYPE diff --git a/jjb/xci/xci-verify-jobs.yml b/jjb/xci/xci-verify-jobs.yml index c54a1b941..e5c1a9394 100644 --- a/jjb/xci/xci-verify-jobs.yml +++ b/jjb/xci/xci-verify-jobs.yml @@ -66,7 +66,7 @@ use-build-blocker: true blocking-jobs: - 'xci-verify-{distro}-.*' - - 'xci-.*-{distro}-merge-.*' + - 'xci-merge-{distro}-.*' - 'openstack-bifrost-verify-{distro}-.*' - 'xci-osa-verify-{distro}-.*' - 'xci-osa-periodic-{distro}-.*' @@ -110,6 +110,12 @@ forbidden-file-paths: - compare-type: ANT pattern: 'xci/scripts/vm/**' + - compare-type: ANT + pattern: 'docs/**' + - compare-type: ANT + pattern: 'prototypes/**' + - compare-type: ANT + pattern: 'upstream/**' - project-compare-type: 'REG_EXP' project-pattern: 'sfc|sdnvpn' branches: @@ -141,6 +147,15 @@ name: CLEAN_DIB_IMAGES default: 'true' - string: + name: CI_LOOP + default: 'verify' + - string: + name: FUNCTEST_MODE + default: 'tier' + - string: + name: FUNCTEST_SUITE_NAME + default: 'healthcheck' + - string: name: GIT_BASE default: https://gerrit.opnfv.org/gerrit/$PROJECT description: 'Git URL to use on this Jenkins Slave' @@ -165,6 +180,7 @@ GERRIT_REFSPEC=$GERRIT_REFSPEC GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + CI_LOOP=$CI_LOOP node-parameters: true kill-phase-on: FAILURE abort-all-job: true @@ -182,12 +198,22 @@ GERRIT_REFSPEC=$GERRIT_REFSPEC GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE - FUNCTEST_MODE=tier - FUNCTEST_TIER=healthcheck + CI_LOOP=$CI_LOOP + FUNCTEST_MODE=$FUNCTEST_MODE + FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME node-parameters: true kill-phase-on: NEVER abort-all-job: true + publishers: + - postbuildscript: + script-only-if-succeeded: false + script-only-if-failed: false + builders: + - shell: + !include-raw: ./xci-cleanup.sh + + - job-template: name: 'xci-verify-{distro}-{phase}-{type}-{stream}' @@ -214,6 +240,9 @@ name: DISTRO default: 'ubuntu' - string: + name: CI_LOOP + default: 'verify' + - string: name: FUNCTEST_MODE default: 'tier' - string: @@ -229,9 +258,6 @@ name: OPNFV_RELENG_DEV_PATH default: $WORKSPACE/ - string: - name: INSTALLER_TYPE - default: 'osa' - - string: name: GIT_BASE default: https://gerrit.opnfv.org/gerrit/$PROJECT description: 'Git URL to use on this Jenkins Slave' @@ -275,5 +301,3 @@ builders: - shell: !include-raw: ./xci-run-functest.sh - - shell: - !include-raw: ./xci-cleanup.sh diff --git a/jjb/yardstick/yardstick-daily-jobs.yml b/jjb/yardstick/yardstick-daily-jobs.yml index 20890fa13..24c7f319b 100644 --- a/jjb/yardstick/yardstick-daily-jobs.yml +++ b/jjb/yardstick/yardstick-daily-jobs.yml @@ -262,8 +262,7 @@ - description-setter: description: "POD: $NODE_NAME" - 'yardstick-cleanup' - - 'yardstick-fetch-os-creds' - - 'yardstick-fetch-k8s-conf' + - 'yardstick-fetch-creds' - 'yardstick-{testsuite}' - 'yardstick-store-results' @@ -282,16 +281,23 @@ !include-raw: ./yardstick-daily.sh - builder: - name: yardstick-fetch-os-creds + name: yardstick-fetch-creds builders: - - shell: - !include-raw: ../../utils/fetch_os_creds.sh - -- builder: - name: yardstick-fetch-k8s-conf - builders: - - shell: - !include-raw: ./yardstick-get-k8s-conf.sh + # yamllint disable rule:indentation + - conditional-step: + condition-kind: regex-match + regex: "os-.*" + label: '$DEPLOY_SCENARIO' + steps: + - shell: + !include-raw: ../../utils/fetch_os_creds.sh + - conditional-step: + condition-kind: regex-match + regex: "k8-.*" + label: '$DEPLOY_SCENARIO' + steps: + - shell: + !include-raw: ./yardstick-get-k8s-conf.sh - builder: name: yardstick-store-results diff --git a/jjb/yardstick/yardstick-get-k8s-conf.sh b/jjb/yardstick/yardstick-get-k8s-conf.sh index 22a6aa4e6..116d2f0d0 100755 --- a/jjb/yardstick/yardstick-get-k8s-conf.sh +++ b/jjb/yardstick/yardstick-get-k8s-conf.sh @@ -7,6 +7,7 @@ if [[ "${DEPLOY_SCENARIO:0:2}" == "k8" ]];then if [[ ${INSTALLER_TYPE} == 'joid' ]];then juju scp kubernetes-master/0:config "${dest_path}" elif [[ ${INSTALLER_TYPE} == 'compass' ]];then + echo "Copy admin.conf to ${dest_path}" docker cp compass-tasks:/opt/admin.conf "${dest_path}" fi fi |