1386 lines
41 KiB
YAML
1386 lines
41 KiB
YAML
- builder:
|
|
name: contact
|
|
builders:
|
|
- shell: |
|
|
#!/bin/sh
|
|
echo "For problems with this job, contact {name} <{email}> freenode: {irc}"
|
|
|
|
- builder:
|
|
name: print-template-name
|
|
builders:
|
|
- shell: 'echo JJB template: {template-name}'
|
|
|
|
- builder:
|
|
name: gerrit-git-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash
|
|
count=0
|
|
until /usr/local/jenkins/slave_scripts/gerrit-git-prep.sh https://review.openstack.org git://git.openstack.org ; do
|
|
echo "git failed, retrying"
|
|
count=$(($count + 1))
|
|
if [ $count -eq 3 ]; then
|
|
echo "Maximum of 3 git retries reached"
|
|
exit 1
|
|
fi
|
|
sleep 5
|
|
done
|
|
|
|
- builder:
|
|
name: zuul-git-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
CLONEMAP=`mktemp`
|
|
function cleanup {
|
|
# In cases where zuul-cloner is aborted during a git
|
|
# clone operation, git will remove the git work tree in
|
|
# its cleanup. The work tree in these jobs is the
|
|
# workspace directory, which means that subsequent
|
|
# jenkins post-build actions can not run because the
|
|
# workspace has been removed.
|
|
# To reduce the likelyhood of this having an impact,
|
|
# recreate the workspace directory if needed
|
|
mkdir -p $WORKSPACE
|
|
rm -f $CLONEMAP
|
|
}
|
|
trap cleanup EXIT
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: $ZUUL_PROJECT
|
|
dest: .
|
|
EOF
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
git://git.openstack.org $ZUUL_PROJECT
|
|
|
|
- builder:
|
|
name: zuul-git-prep-upper-constraints
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
CLONEMAP=`mktemp`
|
|
REQS_DIR=`mktemp -d`
|
|
function cleanup {
|
|
mkdir -p $WORKSPACE
|
|
rm -rf $CLONEMAP $REQS_DIR
|
|
}
|
|
trap cleanup EXIT
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: $ZUUL_PROJECT
|
|
dest: .
|
|
EOF
|
|
# zuul cloner works poorly if there are 2 names that are the
|
|
# same in here.
|
|
if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
|
|
cat >> $CLONEMAP << EOF
|
|
- name: openstack/requirements
|
|
dest: $REQS_DIR
|
|
EOF
|
|
fi
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
git://git.openstack.org $ZUUL_PROJECT openstack/requirements
|
|
# REQS_DIR is not set for openstack/requirements and there's also
|
|
# no need to copy in this case.
|
|
if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
|
|
cp $REQS_DIR/upper-constraints.txt ./
|
|
fi
|
|
|
|
- builder:
|
|
name: zuul-git-branch-prep-upper-constraints
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
export BRANCH={branch}
|
|
CLONEMAP=`mktemp`
|
|
REQS_DIR=`mktemp -d`
|
|
function cleanup {{
|
|
mkdir -p $WORKSPACE
|
|
rm -rf $CLONEMAP $REQS_DIR
|
|
}}
|
|
trap cleanup EXIT
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: $ZUUL_PROJECT
|
|
dest: .
|
|
EOF
|
|
# zuul cloner works poorly if there are 2 names that are the
|
|
# same in here.
|
|
if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
|
|
cat >> $CLONEMAP << EOF
|
|
- name: openstack/requirements
|
|
dest: $REQS_DIR
|
|
EOF
|
|
fi
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
--branch=$BRANCH \
|
|
git://git.openstack.org $ZUUL_PROJECT openstack/requirements
|
|
# REQS_DIR is not set for openstack/requirements and there's also
|
|
# no need to copy in this case.
|
|
if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
|
|
cp $REQS_DIR/upper-constraints.txt ./
|
|
fi
|
|
|
|
- builder:
|
|
name: zuul-git-prep-upper-constraints-cross
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
CLONEMAP=`mktemp`
|
|
REQS_DIR=`mktemp -d`
|
|
function cleanup {{
|
|
mkdir -p $WORKSPACE
|
|
rm -rf $CLONEMAP $REQS_DIR
|
|
}}
|
|
trap cleanup EXIT
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: '{project}'
|
|
dest: .
|
|
EOF
|
|
# zuul cloner works poorly if there are 2 names that are the
|
|
# same in here.
|
|
if [[ "{project}" != "openstack/requirements" ]]; then
|
|
cat >> $CLONEMAP << EOF
|
|
- name: openstack/requirements
|
|
dest: $REQS_DIR
|
|
EOF
|
|
fi
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
git://git.openstack.org {project} openstack/requirements
|
|
# REQS_DIR is not set for openstack/requirements and there's also
|
|
# no need to copy in this case.
|
|
if [[ "{project}" != "openstack/requirements" ]]; then
|
|
cp $REQS_DIR/upper-constraints.txt ./
|
|
fi
|
|
|
|
- builder:
|
|
name: zuul-git-prep-upper-constraints-api-ref
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
CLONEMAP=`mktemp`
|
|
REQS_DIR=`mktemp -d`
|
|
function cleanup {{
|
|
mkdir -p $WORKSPACE
|
|
rm -rf $CLONEMAP $REQS_DIR
|
|
}}
|
|
trap cleanup EXIT
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: '{project}'
|
|
dest: .
|
|
EOF
|
|
# clone os-api-ref into a subdir of the main project, makes
|
|
# it easy to find later for installing.
|
|
cat >> $CLONEMAP << EOF
|
|
- name: openstack/os-api-ref
|
|
dest: os-api-ref
|
|
- name: openstack/requirements
|
|
dest: $REQS_DIR
|
|
EOF
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
git://git.openstack.org '{project}' openstack/os-api-ref openstack/requirements
|
|
cp $REQS_DIR/upper-constraints.txt ./
|
|
|
|
- builder:
|
|
name: zuul-git-branch-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
CLONEMAP=`mktemp`
|
|
function cleanup {{
|
|
mkdir -p $WORKSPACE
|
|
rm -f $CLONEMAP
|
|
}}
|
|
trap cleanup EXIT
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: $ZUUL_PROJECT
|
|
dest: .
|
|
EOF
|
|
# If this is called in a periodic job, these will not be set
|
|
export ZUUL_BRANCH=${{ZUUL_BRANCH:-master}}
|
|
export ZUUL_REF=${{ZUUL_REF:-None}}
|
|
export BRANCH_OVERRIDE={branch-override}
|
|
if [ "$BRANCH_OVERRIDE" != "default" ] ; then
|
|
BRANCH_ARG="--branch $BRANCH_OVERRIDE"
|
|
fi
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
$BRANCH_ARG git://git.openstack.org $ZUUL_PROJECT
|
|
|
|
- builder:
|
|
# Use this macro in the release pipeline to get a tagged repo with
|
|
# tag checked out and requirements repo with the branch the tag is
|
|
# on.
|
|
# The macro also works in other pipelines.
|
|
name: zuul-release-git-prep-upper-constraints
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
function get_branch_tag {
|
|
|
|
BRANCHES=`git branch -a --contains $ZUUL_REFNAME`
|
|
|
|
TARGET_BRANCH=`echo "$BRANCHES"|grep '^ remotes/origin/stable'|cut -d/ -f3-|sort|head -n1`
|
|
|
|
if [ -z $TARGET_BRANCH ] ; then
|
|
TARGET_BRANCH=`echo "$BRANCHES"|grep '^ remotes/origin/'|cut -d/ -f3-|sort|grep -v ^HEAD|head -n1`
|
|
fi
|
|
# Nothing found.
|
|
# Note that zuul-cloner will also fallback to master if
|
|
# the TARGET_BRANCH does not exist.
|
|
if [ -z $TARGET_BRANCH ] ; then
|
|
echo "Tag not found, falling back to master"
|
|
TARGET_BRANCH=master
|
|
fi
|
|
}
|
|
|
|
CLONEMAP=`mktemp`
|
|
REQS_DIR=`mktemp -d`
|
|
function cleanup {
|
|
mkdir -p $WORKSPACE
|
|
rm -rf $CLONEMAP $REQS_DIR
|
|
}
|
|
trap cleanup EXIT
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: $ZUUL_PROJECT
|
|
dest: .
|
|
EOF
|
|
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
git://git.openstack.org $ZUUL_PROJECT
|
|
|
|
if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
|
|
# Figure out branch for requirements checkout
|
|
if [[ "$ZUUL_REFNAME" =~ ^refs/tags/ ]] ; then
|
|
get_branch_tag
|
|
else
|
|
# ZUUL_REFNAME is only available in post jobs
|
|
TARGET_BRANCH=${ZUUL_REFNAME:-$ZUUL_REF}
|
|
fi
|
|
|
|
cat > $CLONEMAP << EOF
|
|
clonemap:
|
|
- name: openstack/requirements
|
|
dest: $REQS_DIR
|
|
EOF
|
|
/usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
|
|
--branch $TARGET_BRANCH \
|
|
git://git.openstack.org openstack/requirements
|
|
cp $REQS_DIR/upper-constraints.txt ./
|
|
fi
|
|
|
|
|
|
- builder:
|
|
name: branch-git-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash
|
|
export BRANCH={branch}
|
|
/usr/local/jenkins/slave_scripts/gerrit-git-prep.sh https://review.openstack.org git://git.openstack.org
|
|
|
|
- builder:
|
|
name: constraints-branch-git-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
|
|
# No need to copy for openstack/requirements
|
|
if [[ "$ZUUL_PROJECT" == "openstack/requirements" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Check out requirements repository for coresponding branch
|
|
REQS_DIR=`mktemp -d`
|
|
function cleanup {{
|
|
rm -rf $REQS_DIR
|
|
}}
|
|
trap cleanup EXIT
|
|
export BRANCH={branch}
|
|
# TODO(jaegerandi): Remove once stable/newton branch for
|
|
# requirements repo is created.
|
|
if [[ "$BRANCH" == "stable/newton" ]] ; then
|
|
BRANCH="master"
|
|
fi
|
|
export ZUUL_REF=""
|
|
export ZUUL_NEWREV=""
|
|
export ZUUL_CHANGE=""
|
|
export ZUUL_PROJECT="openstack/requirements"
|
|
pushd $REQS_DIR
|
|
/usr/local/jenkins/slave_scripts/gerrit-git-prep.sh https://review.openstack.org git://git.openstack.org
|
|
popd
|
|
cp $REQS_DIR/upper-constraints.txt ./
|
|
|
|
- builder:
|
|
name: zuul-clone
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash
|
|
/usr/zuul-env/bin/zuul-cloner --cache-dir /opt/git \
|
|
git://git.openstack.org {project}
|
|
|
|
- builder:
|
|
name: revoke-sudo
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
sudo rm -f /etc/sudoers.d/jenkins-sudo
|
|
# Prove that general sudo access is actually revoked
|
|
! sudo -n true
|
|
|
|
- builder:
|
|
name: coverage
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-cover.sh {env}"
|
|
|
|
- builder:
|
|
name: docs-env
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-docs.sh {env}"
|
|
|
|
- builder:
|
|
name: docs-tags-only-env
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-docs.sh {env} tags-only"
|
|
|
|
- builder:
|
|
name: docs
|
|
builders:
|
|
- docs-env:
|
|
env: venv
|
|
|
|
- builder:
|
|
name: add-docs-root-marker
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
MARKER_TEXT="Project: $ZUUL_PROJECT Ref: $ZUUL_REFNAME Build: $ZUUL_UUID Revision: $ZUUL_NEWREV"
|
|
echo $MARKER_TEXT > {docsrootdir}/.root-marker
|
|
|
|
- builder:
|
|
name: gerrit-package
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/package-gerrit.sh"
|
|
|
|
- builder:
|
|
name: linters
|
|
builders:
|
|
- run-tox:
|
|
envlist: linters
|
|
|
|
- builder:
|
|
name: bashate
|
|
builders:
|
|
- run-tox:
|
|
envlist: bashate
|
|
|
|
- builder:
|
|
name: pep8
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-pep8.sh {env}"
|
|
|
|
- builder:
|
|
name: pylint
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-pylint.sh {env}"
|
|
|
|
- builder:
|
|
name: nodejs-install
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -eux
|
|
# Prerequisites
|
|
sudo apt-get update
|
|
sudo apt-get install -y apt-transport-https lsb-release curl
|
|
|
|
DISTRO=$(lsb_release -c -s)
|
|
|
|
# Install via nodesource
|
|
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
|
|
|
|
echo "deb https://deb.nodesource.com/node_{version}.x $DISTRO main" | sudo tee /etc/apt/sources.list.d/nodesource.list
|
|
echo "deb-src https://deb.nodesource.com/node_{version}.x $DISTRO main" | sudo tee -a /etc/apt/sources.list.d/nodesource.list
|
|
|
|
sudo apt-get update
|
|
sudo apt-get install -y nodejs
|
|
|
|
# Output to the log for debugging's sake.
|
|
node --version
|
|
npm --version
|
|
npm config set registry https://registry.npmjs.org/
|
|
|
|
- builder:
|
|
name: npm-run
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -eux
|
|
export DISPLAY=:99
|
|
npm install
|
|
|
|
# Try running as a standard lifecycle script, otherwise try custom.
|
|
npm_lifecycle_phases="publish install version test stop start restart pack"
|
|
|
|
if [[ $npm_lifecycle_phases =~ (^| ){command}($| ) ]]; then
|
|
npm {command} --silent
|
|
else
|
|
npm run {command} --silent
|
|
fi
|
|
|
|
# If no shrinkwrap exists, generate it.
|
|
if [ ! -f ./npm-shrinkwrap.json ]; then
|
|
npm prune # https://github.com/npm/npm/issues/6298
|
|
npm shrinkwrap
|
|
fi
|
|
|
|
- builder:
|
|
name: npm-dsvm-run
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -eux
|
|
export PYTHONUNBUFFERED=true
|
|
export DEVSTACK_GATE_TEMPEST=0
|
|
export DEVSTACK_GATE_EXERCISES=0
|
|
export DEVSTACK_GATE_INSTALL_TESTONLY=1
|
|
export DEVSTACK_GATE_NEUTRON=1
|
|
|
|
# Xvfb Buffer...
|
|
export DISPLAY=:99
|
|
npm install
|
|
npm_lifecycle_phases="publish install version test stop start restart pack"
|
|
|
|
# Run any custom devstack configuration required by the project
|
|
function pre_test_hook {{
|
|
# Try running as a standard lifecycle script, otherwise try custom.
|
|
if [[ $npm_lifecycle_phases =~ (^| ){pre_test_command}($| ) ]]; then
|
|
npm {pre_test_command} --silent
|
|
else
|
|
npm run {pre_test_command} --silent
|
|
fi
|
|
}}
|
|
export -f pre_test_hook
|
|
|
|
function post_test_hook {{
|
|
# If you need access to devstack's clouds.yaml file, it is available
|
|
# at its canonical location at /etc/openstack/clouds.yaml
|
|
|
|
# Try running as a standard lifecycle script, otherwise try custom.
|
|
if [[ $npm_lifecycle_phases =~ (^| ){post_test_command}($| ) ]]; then
|
|
npm {post_test_command} --silent
|
|
else
|
|
npm run {post_test_command} --silent
|
|
fi
|
|
}}
|
|
export -f post_test_hook
|
|
|
|
cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
|
|
./safe-devstack-vm-gate-wrap.sh
|
|
|
|
- builder:
|
|
name: xvfb-start
|
|
builders:
|
|
- shell: |
|
|
DIMENSIONS='1280x1024x24'
|
|
/usr/bin/Xvfb :99 -screen 0 ${DIMENSIONS} -ac +extension GLX +render -noreset 2>&1 > /dev/null &
|
|
|
|
- builder:
|
|
name: xvfb-install
|
|
builders:
|
|
- shell: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y xvfb
|
|
|
|
- builder:
|
|
name: firefox-install
|
|
builders:
|
|
- shell: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y firefox dbus
|
|
|
|
- builder:
|
|
name: chrome-install
|
|
builders:
|
|
- shell: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y chromium-browser
|
|
|
|
- builder:
|
|
name: diskimage-builder-install
|
|
builders:
|
|
- shell: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y qemu kpartx debootstrap
|
|
sudo -H pip install dib-utils
|
|
sudo -H pip install diskimage-builder
|
|
|
|
- builder:
|
|
name: proposal-slave-cleanup
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash
|
|
cd /
|
|
rm -rf `dirname $WORKSPACE`/*
|
|
mkdir $WORKSPACE
|
|
cd $WORKSPACE
|
|
|
|
- builder:
|
|
name: puppet-prepare-node
|
|
builders:
|
|
- shell: |
|
|
if [ -f /usr/bin/yum ]; then
|
|
sudo yum -y remove facter puppet hiera rdo-release
|
|
sudo yum -y install libxml2-devel libxslt-devel ruby-devel zlib-devel
|
|
sudo yum -y groupinstall "Development Tools"
|
|
# Uninstall python-requests from pip, since we install it in
|
|
# system-config/install_puppet.sh
|
|
sudo pip uninstall requests -y || true
|
|
elif [ -f /usr/bin/apt-get ]; then
|
|
sudo apt-get remove -y --purge facter puppet puppet-common hiera
|
|
sudo apt-get update
|
|
sudo apt-get install -y libxml2-dev libxslt-dev zlib1g-dev
|
|
# /etc/default/puppet is not purged when removing Puppet
|
|
# but need to be dropped if we want to re-install puppet-agent on Xenial
|
|
sudo rm -rf /etc/default/puppet
|
|
fi
|
|
|
|
- builder:
|
|
name: puppet-lint
|
|
builders:
|
|
- shell: |
|
|
if [ -f Modulefile -o -f metadata.json ]; then
|
|
if [ -f Modulefile ]; then
|
|
MODULE=$(awk '/^name/ {print $NF}' Modulefile |tr -d \"\')
|
|
elif [ -f metadata.json ]; then
|
|
MODULE=$(python -c 'import json;print json.load(open("metadata.json"))["name"]')
|
|
fi
|
|
if [ -z "$MODULE" ]; then
|
|
echo "Module name not defined in Modulefile or metadata.json"
|
|
else
|
|
mkdir -p "$MODULE"
|
|
rsync -a --exclude="$MODULE" --exclude ".*" . "$MODULE"
|
|
cd "$MODULE"
|
|
fi
|
|
fi
|
|
mkdir .bundled_gems
|
|
export GEM_HOME=`pwd`/.bundled_gems
|
|
if [ -f Gemfile ]; then
|
|
gem install bundler --no-rdoc --no-ri --verbose
|
|
$GEM_HOME/bin/bundle install --without system_tests
|
|
$GEM_HOME/bin/bundle exec rake lint 2>&1
|
|
else
|
|
gem install rake -n ./.bundled_gems/
|
|
gem install puppet-lint
|
|
gem install puppetlabs_spec_helper
|
|
./.bundled_gems/rake lint 2>&1
|
|
fi
|
|
|
|
- builder:
|
|
name: puppet-syntax
|
|
builders:
|
|
- shell: |
|
|
export LANG=en_US.utf8
|
|
find . -iname *.pp | xargs puppet parser validate --modulepath=`pwd`/modules
|
|
for f in `find . -iname *.erb` ; do
|
|
erb -x -T '-' $f | ruby -c
|
|
done
|
|
|
|
- builder:
|
|
name: pin-pip
|
|
builders:
|
|
- shell: sudo pip install "pip<8" "virtualenv<14"
|
|
|
|
- builder:
|
|
name: ansible-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
sudo -H pip install -U ansible
|
|
|
|
- builder:
|
|
name: ansible-syntax
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
cd tests
|
|
ansible-playbook --syntax-check -i inventory test.yml -e rolename=$(basename $(dirname $(pwd)))
|
|
|
|
- builder:
|
|
name: ansible-lint-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
sudo -H pip install ansible-lint
|
|
|
|
- builder:
|
|
name: ansible-lint
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
ansible-lint **/*.yml
|
|
|
|
- builder:
|
|
name: salt-check-commit
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
scripts/gate-check-commit.sh
|
|
|
|
- builder:
|
|
name: salt-formula-test
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
[[ $SALT_VERSION == "latest" ]] && export SALT_VERSION=""
|
|
cd tests
|
|
./run_tests.sh
|
|
|
|
- builder:
|
|
name: ruby-191-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
# Set 1.9.1 ruby and gem as default
|
|
sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 20
|
|
sudo update-alternatives --set ruby /usr/bin/ruby1.9.1
|
|
sudo update-alternatives --install /usr/bin/gem gem /usr/bin/gem1.9.1 10
|
|
sudo update-alternatives --set gem /usr/bin/gem1.9.1
|
|
sudo gem install bundler --no-rdoc --no-ri --verbose
|
|
sudo gem install rake --no-rdoc --no-ri --verbose
|
|
|
|
- builder:
|
|
name: chef-bundler-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
mkdir -p .bundle
|
|
grep -E .*berkshelf.*3\.\d*\.\d*.* Gemfile
|
|
if [ $? -eq 0 ]; then
|
|
# For Berkshelf 3.x use the system gecode 3.x libraries
|
|
sudo apt-get update
|
|
sudo apt-get install -y libgecode-dev libxml2-dev libxml2 libxslt-dev build-essential
|
|
USE_SYSTEM_GECODE=1 bundle install --path=.bundle --jobs 1 --retry 3 --verbose
|
|
else
|
|
bundle install --path=.bundle --jobs 1 --retry 3 --verbose
|
|
fi
|
|
|
|
- builder:
|
|
name: chef-bootstrap
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
./bootstrap.sh
|
|
|
|
- builder:
|
|
name: chef-rake-test
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
chef exec rake
|
|
|
|
- builder:
|
|
name: chef-rake-integration
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
chef exec rake integration
|
|
|
|
- builder:
|
|
name: chef-berkshelf-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
grep -E .*berkshelf.*3\.\d*\.\d*.* Gemfile
|
|
if [ $? -eq 0 ]; then
|
|
bundle exec berks vendor .cookbooks
|
|
else
|
|
mkdir -p .cookbooks
|
|
bundle exec berks install --path=.cookbooks
|
|
fi
|
|
|
|
- builder:
|
|
name: chef-cookbook-rubocop
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
if grep rubocop: Strainerfile; then
|
|
bundle exec strainer test --cookbooks-path=.cookbooks --only=rubocop
|
|
else
|
|
bundle exec rubocop
|
|
fi
|
|
|
|
- builder:
|
|
name: chef-cookbook-foodcritic
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
if grep foodcritic: Strainerfile; then
|
|
bundle exec strainer test --cookbooks-path=.cookbooks --only=foodcritic
|
|
else
|
|
bundle exec foodcritic -f any -t ~FC003 -t ~FC023 .
|
|
fi
|
|
|
|
- builder:
|
|
name: chef-cookbook-chefspec
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
if grep chefspec: Strainerfile; then
|
|
bundle exec strainer test --cookbooks-path=.cookbooks --only=chefspec
|
|
else
|
|
bundle exec rspec --format documentation
|
|
fi
|
|
|
|
- builder:
|
|
name: run-tests
|
|
builders:
|
|
- shell: "./run-tests.sh"
|
|
|
|
- builder:
|
|
name: selenium
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-selenium.sh"
|
|
|
|
- builder:
|
|
name: js-build
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-jsbuild.sh {command}"
|
|
|
|
- builder:
|
|
name: python27
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-tox.sh py27"
|
|
|
|
- builder:
|
|
name: python33
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-tox.sh py33"
|
|
|
|
- builder:
|
|
name: python34
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-tox.sh py34"
|
|
|
|
- builder:
|
|
name: python35
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-tox.sh py35"
|
|
|
|
- builder:
|
|
name: pypy
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-tox.sh pypy"
|
|
|
|
- builder:
|
|
name: run-tox
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-tox.sh {envlist}"
|
|
|
|
- builder:
|
|
name: tox-with-tmpdir-passed-in
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
export TMPDIR={new_tmpdir_loc}
|
|
/usr/local/jenkins/slave_scripts/run-tox.sh {envlist}
|
|
|
|
- builder:
|
|
name: assert-no-extra-files
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash
|
|
OUT=`git ls-files --other --exclude-standard --directory`
|
|
if [ -z "$OUT" ]; then
|
|
echo "No extra files created during test."
|
|
exit 0
|
|
else
|
|
echo "The following un-ignored files were created during the test:"
|
|
echo "$OUT"
|
|
exit 0 # TODO: change to 1 to fail tests.
|
|
fi
|
|
|
|
- builder:
|
|
name: tarball
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
/usr/local/jenkins/slave_scripts/run-tarball.sh {env}
|
|
/usr/local/jenkins/slave_scripts/run-wheel.sh {env}
|
|
|
|
- builder:
|
|
name: devstack-checkout
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
cat > clonemap.yaml << EOF
|
|
clonemap:
|
|
- name: openstack-infra/devstack-gate
|
|
dest: devstack-gate
|
|
EOF
|
|
/usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
|
|
git://git.openstack.org \
|
|
openstack-infra/devstack-gate
|
|
|
|
- builder:
|
|
name: link-logs
|
|
builders:
|
|
- shell: |
|
|
#!/bin/sh
|
|
echo "Detailed logs: http://logs.openstack.org/$LOG_PATH/"
|
|
|
|
|
|
- builder:
|
|
name: net-info
|
|
builders:
|
|
- shell: |
|
|
#!/bin/sh
|
|
export PATH=$PATH:/sbin
|
|
if [ -f /etc/dib-builddate.txt ]; then
|
|
echo "Image build date"
|
|
echo "================"
|
|
cat /etc/dib-builddate.txt
|
|
fi
|
|
echo "Host & kernel"
|
|
echo "============="
|
|
uname -a
|
|
echo "Network interface addresses..."
|
|
echo "=============================="
|
|
ip address show
|
|
echo "Network routing tables..."
|
|
echo "========================="
|
|
ip route show
|
|
ip -6 route show
|
|
echo "Network neighbors..."
|
|
echo "===================="
|
|
ip neighbor show
|
|
echo "Route to Git mirror..."
|
|
echo "======================"
|
|
traceroute6 -n git.openstack.org \
|
|
|| traceroute -n git.openstack.org \
|
|
|| true
|
|
|
|
- builder:
|
|
name: install-distro-packages
|
|
builders:
|
|
- shell: /usr/local/jenkins/slave_scripts/install-distro-packages.sh
|
|
|
|
- builder:
|
|
name: install-distro-packages-fallback-test
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
# use the fallback list instead of existing other-requirements.txt
|
|
export PACKAGES=/usr/local/jenkins/common_data/bindep-fallback.txt
|
|
if [ "$ZUUL_PROJECT" == "openstack-infra/bindep" ] ; then
|
|
# if testing a change to bindep, use its entrypoint
|
|
virtualenv bindep-env
|
|
bindep-env/bin/pip install -U .
|
|
export BINDEP=bindep-env/bin/bindep
|
|
elif [ "$ZUUL_PROJECT" == "openstack-infra/project-config" ] ; then
|
|
# if testing a change to project-config, use its fallback list
|
|
export PACKAGES=jenkins/data/bindep-fallback.txt
|
|
fi
|
|
/usr/local/jenkins/slave_scripts/install-distro-packages.sh
|
|
|
|
- builder:
|
|
name: mysql-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
DB_ROOT_PW=insecure_slave
|
|
DB_USER=openstack_citest
|
|
DB_PW=openstack_citest
|
|
sudo -H mysqladmin -u root password $DB_ROOT_PW
|
|
# note; we remove anonymous users first
|
|
sudo -H mysql -u root -p$DB_ROOT_PW -h localhost -e "
|
|
DELETE FROM mysql.user WHERE User='';
|
|
FLUSH PRIVILEGES;
|
|
GRANT ALL PRIVILEGES ON *.*
|
|
TO '$DB_USER'@'%' identified by '$DB_PW' WITH GRANT OPTION;"
|
|
|
|
- builder:
|
|
name: pgsql-prep
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
DB_ROOT_PW=insecure_slave
|
|
DB_USER=openstack_citest
|
|
DB_PW=openstack_citest
|
|
root_roles=$(sudo -H -u postgres psql -t -c "
|
|
SELECT 'HERE' from pg_roles where rolname='$DB_USER'")
|
|
if [[ ${root_roles} == *HERE ]];then
|
|
sudo -H -u postgres psql -c "
|
|
ALTER ROLE $DB_USER WITH SUPERUSER LOGIN PASSWORD '$DB_PW'"
|
|
else
|
|
sudo -H -u postgres psql -c "
|
|
CREATE ROLE $DB_USER WITH SUPERUSER LOGIN PASSWORD '$DB_PW'"
|
|
fi
|
|
cat << EOF > $HOME/.pgpass
|
|
*:*:*:$DB_USER:$DB_PW
|
|
EOF
|
|
chmod 0600 $HOME/.pgpass
|
|
|
|
- builder:
|
|
name: mysql-db
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
DB_USER=openstack_citest
|
|
DB_PW=openstack_citest
|
|
mysql -u $DB_USER -p$DB_PW -h 127.0.0.1 -e "
|
|
SET default_storage_engine=MYISAM;
|
|
DROP DATABASE IF EXISTS {db_name};
|
|
CREATE DATABASE {db_name} CHARACTER SET utf8;"
|
|
|
|
- builder:
|
|
name: pgsql-db
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
DB_USER=openstack_citest
|
|
DB_PW=openstack_citest
|
|
psql -h 127.0.0.1 -U $DB_USER -d template1 -c "
|
|
DROP DATABASE IF EXISTS {db_name}"
|
|
createdb -h 127.0.0.1 -U $DB_USER -l C -T template0 -E utf8 {db_name}
|
|
|
|
- builder:
|
|
name: static-publish-prep
|
|
|
|
# We want to publish to the docroot but the scp publisher cannot remove
|
|
# paths, so use a shell builder to move the content in the right place and
|
|
# publish from there.
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
rm -rf ,content
|
|
mv {source} ,content
|
|
rm -rf .[^.]* [^,]*
|
|
# Disable errexit here because there might not be any dotfiles.
|
|
set +e
|
|
mv ,content/.[^.]* ./
|
|
set -e
|
|
mv ,content/* ./
|
|
rm -r ,content
|
|
|
|
- builder:
|
|
name: install-buck
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
if [[ ! -d "buck" ]]
|
|
then
|
|
git clone https://gerrit.googlesource.com/buck
|
|
cd buck
|
|
ant
|
|
fi
|
|
|
|
|
|
- builder:
|
|
name: zuul-swift-upload
|
|
builders:
|
|
- shell: "/usr/zuul-swift-logs-env/bin/python /usr/local/jenkins/slave_scripts/zuul_swift_upload.py --name {zuul_log_instruction_set} {upload_source}"
|
|
|
|
|
|
- builder:
|
|
name: zuul-swift-upload-logs
|
|
builders:
|
|
- zuul-swift-upload:
|
|
zuul_log_instruction_set: logs
|
|
upload_source: '{upload_source}'
|
|
|
|
|
|
- builder:
|
|
name: zuul-swift-upload-console-log
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/grab_console_log.sh"
|
|
- zuul-swift-upload-logs:
|
|
upload_source: '/tmp/console.html'
|
|
|
|
|
|
- builder:
|
|
name: zuul-swift-upload-logs-with-console
|
|
builders:
|
|
- shell: "/usr/local/jenkins/slave_scripts/grab_console_log.sh"
|
|
- zuul-swift-upload-logs:
|
|
upload_source: '{upload_source} /tmp/console.html'
|
|
|
|
|
|
- builder:
|
|
name: print-node-uuid
|
|
builders:
|
|
- shell: |
|
|
#!/bin/sh
|
|
[ -f /etc/nodepool/uuid ] && echo "Node UUID: $(cat /etc/nodepool/uuid)"
|
|
|
|
- builder:
|
|
name: bundle-install
|
|
builders:
|
|
- shell: |
|
|
mkdir .bundled_gems
|
|
export GEM_HOME=`pwd`/.bundled_gems
|
|
bundle install
|
|
|
|
- builder:
|
|
name: exec-rake
|
|
builders:
|
|
- shell: |
|
|
mkdir -p .bundled_gems
|
|
export GEM_HOME=`pwd`/.bundled_gems
|
|
bundle exec rake
|
|
|
|
|
|
# This builder runs tools/test-setup.sh if its exists. This allows
|
|
# projects to setup unit tests in a specific way.
|
|
- builder:
|
|
name: extra-test-setup
|
|
builders:
|
|
- shell: |
|
|
if [ -x tools/test-setup.sh ] ; then
|
|
tools/test-setup.sh
|
|
fi
|
|
|
|
- builder:
|
|
name: allow-local-ssh-root
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash
|
|
echo "" | sudo tee -a /etc/ssh/sshd_config
|
|
echo "Match address 127.0.0.1" | sudo tee -a /etc/ssh/sshd_config
|
|
echo " PermitRootLogin without-password" | sudo tee -a /etc/ssh/sshd_config
|
|
echo "" | sudo tee -a /etc/ssh/sshd_config
|
|
echo "Match address ::1" | sudo tee -a /etc/ssh/sshd_config
|
|
echo " PermitRootLogin without-password" | sudo tee -a /etc/ssh/sshd_config
|
|
mkdir -p .ssh
|
|
ssh-keygen -f ~/.ssh/id_rsa -b 2048 -P ""
|
|
sudo mkdir -p /root/.ssh
|
|
cat ~/.ssh/id_rsa.pub | sudo tee -a /root/.ssh/authorized_keys
|
|
if [ -f /usr/bin/yum ]; then
|
|
sudo systemctl restart sshd
|
|
elif [ -f /usr/bin/apt-get ]; then
|
|
sudo service ssh restart
|
|
fi
|
|
|
|
|
|
# Install specific elasticsearch version(1.7.5) as needed for searchlight.
|
|
- builder:
|
|
name: elasticsearch-install-1
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
sudo apt-get update
|
|
sudo apt-get install -y default-jre
|
|
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.5.deb
|
|
sudo dpkg -i elasticsearch-1.7.5.deb
|
|
#Make 'elasticsearch' binary callable from within functional tests
|
|
sudo ln -s /usr/share/elasticsearch/bin/elasticsearch /usr/local/bin/elasticsearch
|
|
|
|
# Install specific elasticsearch version(2.x) as needed for searchlight.
|
|
- builder:
|
|
name: elasticsearch-install
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
sudo apt-get update
|
|
sudo apt-get install -y default-jre
|
|
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.2/elasticsearch-2.3.2.deb
|
|
sudo dpkg -i elasticsearch-2.3.2.deb
|
|
#Make 'elasticsearch' binary callable from within functional tests
|
|
sudo ln -s /usr/share/elasticsearch/bin/elasticsearch /usr/local/bin/elasticsearch
|
|
|
|
- builder:
|
|
name: mount-xfs-tmp-space
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
# create a large-ish file that we'll mount as a loopback
|
|
truncate -s 1GB {xfs_file}
|
|
# format the new file as xfs
|
|
mkfs.xfs {xfs_file}
|
|
# loopback mount the file
|
|
mkdir -p {xfs_mount_point}
|
|
sudo mount -o loop,noatime,nodiratime {xfs_file} {xfs_mount_point}
|
|
sudo chmod 777 {xfs_mount_point}
|
|
|
|
# ======================================================================
|
|
|
|
- wrapper:
|
|
name: build-timeout
|
|
wrappers:
|
|
- timeout:
|
|
timeout: '{timeout}'
|
|
timeout-var: 'BUILD_TIMEOUT'
|
|
fail: true
|
|
|
|
# ======================================================================
|
|
|
|
- publisher:
|
|
name: tarball
|
|
publishers:
|
|
- scp:
|
|
site: '{site}'
|
|
files:
|
|
- target: 'tarballs/{project}/'
|
|
source: 'dist/*.tar.gz'
|
|
|
|
- publisher:
|
|
name: deb-pkgs
|
|
publishers:
|
|
- scp:
|
|
site: 'tarballs.openstack.org'
|
|
files:
|
|
- target: 'tarballs/packaging-deb/{project}/'
|
|
source: 'uploads/**'
|
|
keep-hierarchy: true
|
|
|
|
- publisher:
|
|
name: wheel
|
|
publishers:
|
|
- scp:
|
|
site: '{site}'
|
|
files:
|
|
- target: 'tarballs/{project}/'
|
|
source: 'dist/*.whl'
|
|
|
|
- publisher:
|
|
name: war
|
|
publishers:
|
|
- scp:
|
|
site: '{site}'
|
|
files:
|
|
- target: '{target}'
|
|
source: '{warfile}'
|
|
|
|
- publisher:
|
|
name: console-log
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
copy-console: true
|
|
copy-after-failure: true
|
|
|
|
|
|
- publisher:
|
|
name: devstack-logs
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: 'logs/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
|
|
- publisher:
|
|
name: coverage-log
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: 'cover/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: coverage-log-ruby
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: 'coverage/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: test-results
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: '**/*nose_results.html'
|
|
keep-hierarchy: false
|
|
copy-after-failure: true
|
|
- target: 'logs/$LOG_PATH'
|
|
source: '**/*testr_results.html.gz'
|
|
keep-hierarchy: false
|
|
copy-after-failure: true
|
|
- target: 'logs/$LOG_PATH'
|
|
source: '.testrepository/tmp*'
|
|
keep-hierarchy: false
|
|
copy-after-failure: true
|
|
- target: 'logs/$LOG_PATH'
|
|
source: '**/*testrepository.subunit.gz'
|
|
keep-hierarchy: false
|
|
copy-after-failure: true
|
|
- target: 'logs/$LOG_PATH/tox'
|
|
source: '.tox/*/log/*'
|
|
keep-hierarchy: false
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: upload-sphinx-draft
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'docs-draft/$LOG_PATH'
|
|
source: 'doc/build/html/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: upload-api-guide-draft
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'docs-draft/$LOG_PATH'
|
|
source: 'api-guide/build/html/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: upload-api-ref-draft
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'docs-draft/$LOG_PATH'
|
|
source: 'api-ref/build/html/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: upload-docs-draft
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'docs-draft/$LOG_PATH/'
|
|
source: 'publish-docs/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: upload-swagger-draft
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'docs-draft/$LOG_PATH'
|
|
source: 'swagger/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: upload-releasenotes-draft
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'docs-draft/$LOG_PATH'
|
|
source: 'releasenotes/build/html/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: upload-to-docs-site
|
|
publishers:
|
|
- ftp:
|
|
site: docs.openstack.org
|
|
source: 'publish-docs/**'
|
|
target: '/'
|
|
remove-prefix: 'publish-docs/'
|
|
- afs:
|
|
site: afs-docs
|
|
source: 'publish-docs/**'
|
|
target: '/'
|
|
remove-prefix: 'publish-docs/'
|
|
|
|
- publisher:
|
|
name: upload-doc-build-results
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: 'build-*.log.gz'
|
|
keep-hierarchy: false
|
|
copy-after-failure: true
|
|
|
|
- publisher:
|
|
name: zuul-swift-upload
|
|
publishers:
|
|
- postbuildscript:
|
|
builders:
|
|
- zuul-swift-upload:
|
|
zuul_log_instruction_set: '{zuul_log_instruction_set}'
|
|
upload_source: '{upload_source}'
|
|
# These flags really mean only if on * when
|
|
# checked. When both set to false the post script
|
|
# should run on every job regardless of status.
|
|
onfailure: False
|
|
onsuccess: False
|
|
|
|
- publisher:
|
|
name: zuul-swift-upload-logs
|
|
publishers:
|
|
- postbuildscript:
|
|
builders:
|
|
- zuul-swift-upload-logs:
|
|
upload_source: '{upload_source}'
|
|
# These flags really mean only if on * when
|
|
# checked. When both set to false the post script
|
|
# should run on every job regardless of status.
|
|
onfailure: False
|
|
onsuccess: False
|
|
|
|
- publisher:
|
|
name: zuul-swift-upload-console-log
|
|
publishers:
|
|
- postbuildscript:
|
|
builders:
|
|
- zuul-swift-upload-console-log
|
|
# These flags really mean only if on * when
|
|
# checked. When both set to false the post script
|
|
# should run on every job regardless of status.
|
|
onfailure: False
|
|
onsuccess: False
|
|
|
|
- publisher:
|
|
name: zuul-swift-upload-logs-with-console
|
|
publishers:
|
|
- postbuildscript:
|
|
builders:
|
|
- zuul-swift-upload-logs-with-console:
|
|
upload_source: '{upload_source}'
|
|
# These flags really mean only if on * when
|
|
# checked. When both set to false the post script
|
|
# should run on every job regardless of status.
|
|
onfailure: False
|
|
onsuccess: False
|
|
|
|
- publisher:
|
|
name: zuul-swift-devstack-logs-with-console
|
|
publishers:
|
|
- postbuildscript:
|
|
builders:
|
|
- shell: |
|
|
#!/bin/bash -x
|
|
cp devstack-gate/help/tempest-logs.html logs/index_footer.html
|
|
mkdir zuul_swift_devstack_logs_extra
|
|
cp devstack-gate/help/tempest-overview.html zuul_swift_devstack_logs_extra/index_footer.html
|
|
- zuul-swift-upload-logs-with-console:
|
|
upload_source: 'logs zuul_swift_devstack_logs_extra/index_footer.html'
|
|
|
|
- publisher:
|
|
name: zuul-swift-test-results-with-console
|
|
publishers:
|
|
- zuul-swift-upload-logs-with-console:
|
|
upload_source: '"**/*nose_results.html" "**/*testr_results.html.gz" ".testrepository/tmp*" "**/*testrepository.subunit.gz" ".tox/*/log/*"'
|