diff options
-rw-r--r-- | jjb/dovetail/dovetail-ci-jobs.yml | 171 | ||||
-rwxr-xr-x | jjb/dovetail/dovetail-cleanup.sh | 20 | ||||
-rwxr-xr-x | jjb/dovetail/dovetail-run.sh | 46 |
3 files changed, 237 insertions, 0 deletions
diff --git a/jjb/dovetail/dovetail-ci-jobs.yml b/jjb/dovetail/dovetail-ci-jobs.yml new file mode 100644 index 000000000..015c416fc --- /dev/null +++ b/jjb/dovetail/dovetail-ci-jobs.yml @@ -0,0 +1,171 @@ +################################### +# job configuration for dovetail +################################### +- project: + name: dovetail + + project: '{name}' + +#--------------------------------------- +# BRANCH ANCHORS +#--------------------------------------- +# 1)the stream/branch here represents the SUT(System Under Test) stream/branch +# 2)docker-tag is the docker tag of dovetail(only master by now, then all latest used) +# the dovetail stream is one-to-one mapping with dovetail docker-tag +# the dovetail is not sync with A/B/C release +# + master: &master + stream: master + branch: '{stream}' + gs-pathname: '' + docker-tag: 'latest' + colorado: &colorado + stream: colorado + branch: 'stable/{stream}' + gs-pathname: '{stream}' + docker-tag: 'latest' + +#----------------------------------- +# POD, PLATFORM, AND BRANCH MAPPING +#----------------------------------- +# CI PODs +# This section should only contain the SUTs +# that have been switched using labels for slaves +#------------------------------------------------ +# the pods, SUTs listed here are just examples to +# let the dovetail tool run, there can be more ways beside CI to +# run the dovetail tool. +# pods, SUTs will be added/adjusted when needed + pod: +# fuel CI PODs + - baremetal: + slave-label: fuel-baremetal + SUT: fuel + auto-trigger-name: 'daily-trigger-disabled' + <<: *master + - virtual: + slave-label: fuel-virtual + SUT: fuel + auto-trigger-name: 'daily-trigger-disabled' + <<: *master + - baremetal: + slave-label: fuel-baremetal + SUT: fuel + auto-trigger-name: 'daily-trigger-disabled' + <<: *colorado + - virtual: + slave-label: fuel-virtual + SUT: fuel + auto-trigger-name: 'daily-trigger-disabled' + <<: *colorado +#compass CI PODs + - baremetal: + slave-label: compass-baremetal + SUT: compass + auto-trigger-name: 'daily-trigger-disabled' + <<: *master + - virtual: + slave-label: compass-virtual + SUT: compass + auto-trigger-name: 'daily-trigger-disabled' + <<: *master + - baremetal: + slave-label: compass-baremetal + SUT: compass + auto-trigger-name: 'daily-trigger-disabled' + <<: *colorado + - virtual: + slave-label: compass-virtual + SUT: compass + auto-trigger-name: 'daily-trigger-disabled' + <<: *colorado +#-------------------------------- +# None-CI PODs +#-------------------------------- + - huawei-pod5: + slave-label: '{pod}' + SUT: compass + auto-trigger-name: 'daily-trigger-disabled' + <<: *master +#-------------------------------- + testsuite: + - 'basic' + + jobs: + - 'dovetail-{SUT}-{pod}-{testsuite}-{stream}' + +################################ +# job templates +################################ +- job-template: + name: 'dovetail-{SUT}-{pod}-{testsuite}-{stream}' + + disabled: false + + concurrent: true + + properties: + - throttle: + enabled: true + max-per-node: 1 + option: 'project' + + wrappers: + - build-name: + name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' + - timeout: + timeout: 180 + abort: true + + triggers: + - '{auto-trigger-name}' + + parameters: + - project-parameter: + project: '{project}' + - '{SUT}-defaults' + - '{slave-label}-defaults' + - string: + name: DEPLOY_SCENARIO + default: 'os-nosdn-nofeature-ha' + - string: + name: DOCKER_TAG + default: '{docker-tag}' + description: 'Tag to pull docker image' + - string: + name: CI_DEBUG + default: 'false' + description: "Show debug output information" + + scm: + - git-scm: + credentials-id: '{ssh-credentials}' + refspec: '' + branch: '{branch}' + + builders: + - description-setter: + description: "POD: $NODE_NAME" + - 'dovetail-cleanup' + - 'dovetail-{testsuite}' + +######################## +# builder macros +######################## +- builder: + name: dovetail-basic + builders: + - shell: + !include-raw: ./dovetail-run.sh + +- builder: + name: dovetail-fetch-os-creds + builders: + - shell: + !include-raw: ../../utils/fetch_os_creds.sh + +- builder: + name: dovetail-cleanup + builders: + - shell: + !include-raw: ./dovetail-cleanup.sh diff --git a/jjb/dovetail/dovetail-cleanup.sh b/jjb/dovetail/dovetail-cleanup.sh new file mode 100755 index 000000000..297222bb3 --- /dev/null +++ b/jjb/dovetail/dovetail-cleanup.sh @@ -0,0 +1,20 @@ +#!/bin/bash +[[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null" + +echo "Cleaning up docker containers/images..." +# Remove previous running containers if exist +if [[ ! -z $(docker ps -a | grep opnfv/dovetail) ]]; then + echo "Removing existing opnfv/dovetail containers..." + docker ps -a | grep opnfv/dovetail | awk '{print $1}' | xargs docker rm -f >$redirect +fi + +# Remove existing images if exist +if [[ ! -z $(docker images | grep opnfv/dovetail) ]]; then + echo "Docker images to remove:" + docker images | head -1 && docker images | grep opnfv/dovetail + image_tags=($(docker images | grep opnfv/dovetail | awk '{print $2}')) + for tag in "${image_tags[@]}"; do + echo "Removing docker image opnfv/dovetail:$tag..." + docker rmi opnfv/dovetail:$tag >$redirect + done +fi diff --git a/jjb/dovetail/dovetail-run.sh b/jjb/dovetail/dovetail-run.sh new file mode 100755 index 000000000..c0176506f --- /dev/null +++ b/jjb/dovetail/dovetail-run.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +#the noun INSTALLER is used in community, here is just the example to run. +#multi-platforms are supported. + +set -e +[[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null" + +# labconfig is used only for joid +labconfig="" +sshkey="" +if [[ ${INSTALLER_TYPE} == 'apex' ]]; then + instack_mac=$(sudo virsh domiflist undercloud | grep default | \ + grep -Eo "[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+") + INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk {'print $1'}) + sshkey="-v /root/.ssh/id_rsa:/root/.ssh/id_rsa" + if [[ -n $(sudo iptables -L FORWARD |grep "REJECT"|grep "reject-with icmp-port-unreachable") ]]; then + #note: this happens only in opnfv-lf-pod1 + sudo iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable + sudo iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable + fi +elif [[ ${INSTALLER_TYPE} == 'joid' ]]; then + # If production lab then creds may be retrieved dynamically + # creds are on the jumphost, always in the same folder + labconfig="-v $LAB_CONFIG/admin-openrc:/home/opnfv/openrc" + # If dev lab, credentials may not be the default ones, just provide a path to put them into docker + # replace the default one by the customized one provided by jenkins config +fi + +# 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 + +opts="--privileged=true --rm" +envs="-v /var/run/docker.sock:/var/run/docker.sock" + +# Pull the image with correct tag +echo "Dovetail: Pulling image opnfv/dovetail:${DOCKER_TAG}" +docker pull opnfv/dovetail:$DOCKER_TAG >$redirect + +# Run docker +sudo docker run ${opts} ${envs} ${labconfig} ${sshkey} opnfv/dovetail:${DOCKER_TAG} \ +"/home/opnfv/dovetail/scripts/run.py" + +echo "Dovetail: done!" |