- 'smoke'
- 'cnf'
- 'security'
+ - 'benchmarking'
# settings for jobs run in multijob phases
build-job-settings: &build-job-settings
projects:
- name: 'functest-kubernetes-smoke-docker-manifest-{stream}'
<<: *manifest-job-settings
+ - multijob:
+ name: 'build functest-kubernetes-benchmarking image'
+ condition: SUCCESSFUL
+ execution-type: PARALLEL
+ projects:
+ - name: 'functest-kubernetes-benchmarking-docker-build-amd64-{stream}'
+ <<: *build-job-settings
+ - name: 'functest-kubernetes-benchmarking-docker-build-arm64-{stream}'
+ <<: *build-job-settings
+ - multijob:
+ name: 'publish functest-kubernetes-benchmarking manifests'
+ condition: SUCCESSFUL
+ execution-type: PARALLEL
+ projects:
+ - name: 'functest-kubernetes-benchmarking-docker-manifest-{stream}'
+ <<: *manifest-job-settings
publishers:
- 'functest-kubernetes-amd64-recipients'
jobs:
- 'functest-kubernetes-pi-{repo}-{container}-{tag}-pull'
+- project:
+ name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-benchmarking-pull'
+ <<: *functest-kubernetes-pi-params
+ container: 'functest-kubernetes-benchmarking'
+ exclude:
+ - tag: arm-hunter
+ - tag: arm64-hunter
+ jobs:
+ - 'functest-kubernetes-pi-{repo}-{container}-{tag}-pull'
+
- project:
name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-cnf-pull'
<<: *functest-kubernetes-pi-params
jobs:
- 'functest-kubernetes-pi-{repo}-{container}-{tag}-rmi'
+- project:
+ name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-benchmarking-rmi'
+ <<: *functest-kubernetes-pi-params
+ container: 'functest-kubernetes-benchmarking'
+ exclude:
+ - tag: arm-hunter
+ - tag: arm64-hunter
+ jobs:
+ - 'functest-kubernetes-pi-{repo}-{container}-{tag}-rmi'
+
- project:
name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-cnf-rmi'
<<: *functest-kubernetes-pi-params
- functest-kubernetes-pi-run-containers:
<<: *functest-kubernetes-pi-run-containers
-- job-template:
- name: 'functest-kubernetes-pi-{repo}-functest-kubernetes-cnf-{tag}-k8s_vims-run'
- properties:
- - build-blocker:
- use-build-blocker: true
- blocking-level: 'GLOBAL'
- blocking-jobs:
- - '^functest-kubernetes(-pi)?-*-k8s_vims-run$'
- parameters:
- - functest-kubernetes-pi-slave:
- slave: '{slave}'
- - functest-kubernetes-pi-build_tag:
- build_tag: ''
- - functest-kubernetes-pi-DEPLOY_SCENARIO:
- DEPLOY_SCENARIO: k8-nosdn-nofeature-noha
- - functest-kubernetes-pi-DEBUG:
- DEBUG: 'true'
- builders:
- - functest-kubernetes-pi-run-containers:
- <<: *functest-kubernetes-pi-run-containers
-
- project:
name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-healthcheck'
<<: *functest-kubernetes-pi-params
jobs:
- 'functest-kubernetes-pi-{repo}-{container}-{tag}-{test}-run'
+- project:
+ name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-benchmarking'
+ <<: *functest-kubernetes-pi-params
+ container: 'functest-kubernetes-benchmarking'
+ test:
+ - xrally_kubernetes_full
+ exclude:
+ - tag: arm-hunter
+ - tag: arm64-hunter
+ privileged: 'false'
+ network: bridge
+ jobs:
+ - 'functest-kubernetes-pi-{repo}-{container}-{tag}-{test}-run'
+
- project:
name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-cnf'
<<: *functest-kubernetes-pi-params
privileged: 'false'
network: bridge
jobs:
- - 'functest-kubernetes-pi-{repo}-functest-kubernetes-cnf-{tag}-k8s_vims-run'
+ - 'functest-kubernetes-pi-{repo}-{container}-{tag}-{test}-run'
- builder:
name: 'functest-kubernetes-pi-{tag}-daily'
project-type: multijob
triggers:
- - timed: '@daily'
+ - timed: '@weekly'
parameters:
- functest-kubernetes-pi-slave:
slave: '{slave}'
properties:
- build-blocker:
use-build-blocker: true
- blocking-level: 'NODE'
+ blocking-level: 'GLOBAL'
blocking-jobs:
- '^functest-kubernetes(-pi)?-(arm.*-|amd64-)*[a-z]+-(daily|gate|check)$'
builders:
<<: *functest-kubernetes-pi-jobs
- name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-security-{tag}-rmi'
<<: *functest-kubernetes-pi-jobs
+ - name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-benchmarking-{tag}-rmi'
+ <<: *functest-kubernetes-pi-jobs
- name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-cnf-{tag}-rmi'
<<: *functest-kubernetes-pi-jobs
- multijob:
<<: *functest-kubernetes-pi-jobs
- name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-security-{tag}-pull'
<<: *functest-kubernetes-pi-jobs
+ - name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-benchmarking-{tag}-pull'
+ <<: *functest-kubernetes-pi-jobs
- name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-cnf-{tag}-pull'
<<: *functest-kubernetes-pi-jobs
- multijob:
<<: *functest-kubernetes-pi-jobs
- name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-security-{tag}-kube_bench-run'
<<: *functest-kubernetes-pi-jobs
+ - multijob:
+ name: ollivier/functest-kubernetes-benchmarking:{tag}
+ projects:
+ - name: 'functest-kubernetes-pi-ollivier-functest-kubernetes-benchmarking-{tag}-xrally_kubernetes_full-run'
+ <<: *functest-kubernetes-pi-jobs
- multijob:
name: ollivier/functest-kubernetes-cnf:{tag}
projects:
jobs:
- 'functest-kubernetes-{repo}-{container}-{tag}-pull'
+- project:
+ name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-pull'
+ <<: *functest-kubernetes-params
+ container: 'functest-kubernetes-benchmarking'
+ jobs:
+ - 'functest-kubernetes-{repo}-{container}-{tag}-pull'
+
- project:
name: 'functest-kubernetes-opnfv-functest-kubernetes-cnf-pull'
<<: *functest-kubernetes-params
jobs:
- 'functest-kubernetes-{repo}-{container}-{tag}-rmi'
+- project:
+ name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-rmi'
+ <<: *functest-kubernetes-params
+ container: 'functest-kubernetes-benchmarking'
+ jobs:
+ - 'functest-kubernetes-{repo}-{container}-{tag}-rmi'
+
- project:
name: 'functest-kubernetes-opnfv-functest-kubernetes-cnf-rmi'
<<: *functest-kubernetes-params
- functest-kubernetes-run-containers:
<<: *functest-kubernetes-run-containers
-- job-template:
- name: 'functest-kubernetes-{repo}-functest-kubernetes-cnf-{tag}-k8s_vims-run'
- properties:
- - build-blocker:
- use-build-blocker: true
- blocking-level: 'GLOBAL'
- blocking-jobs:
- - '^functest-kubernetes(-pi)?-*-k8s_vims-run$'
- parameters:
- - functest-kubernetes-slave:
- slave: '{slave}'
- - functest-kubernetes-build_tag:
- build_tag: ''
- - functest-kubernetes-DEPLOY_SCENARIO:
- DEPLOY_SCENARIO: k8-nosdn-nofeature-noha
- - functest-kubernetes-DEBUG:
- DEBUG: 'true'
- builders:
- - functest-kubernetes-run-containers:
- <<: *functest-kubernetes-run-containers
-
- project:
name: 'functest-kubernetes-opnfv-functest-kubernetes-healthcheck'
<<: *functest-kubernetes-params
jobs:
- 'functest-kubernetes-{repo}-{container}-{tag}-{test}-run'
+- project:
+ name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking'
+ <<: *functest-kubernetes-params
+ container: 'functest-kubernetes-benchmarking'
+ test:
+ - xrally_kubernetes_full
+ privileged: 'false'
+ network: bridge
+ jobs:
+ - 'functest-kubernetes-{repo}-{container}-{tag}-{test}-run'
+
- project:
name: 'functest-kubernetes-opnfv-functest-kubernetes-cnf'
<<: *functest-kubernetes-params
privileged: 'false'
network: bridge
jobs:
- - 'functest-kubernetes-{repo}-functest-kubernetes-cnf-{tag}-k8s_vims-run'
+ - 'functest-kubernetes-{repo}-{container}-{tag}-{test}-run'
- builder:
name: 'functest-kubernetes-{tag}-daily'
project-type: multijob
triggers:
- - timed: '@daily'
+ - timed: '@weekly'
parameters:
- functest-kubernetes-slave:
slave: '{slave}'
properties:
- build-blocker:
use-build-blocker: true
- blocking-level: 'NODE'
+ blocking-level: 'GLOBAL'
blocking-jobs:
- '^functest-kubernetes(-pi)?-(arm.*-|amd64-)*[a-z]+-(daily|gate|check)$'
builders:
<<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-security-{tag}-rmi'
<<: *functest-kubernetes-jobs
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-pull'
+ <<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-cnf-{tag}-rmi'
<<: *functest-kubernetes-jobs
- multijob:
<<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-security-{tag}-pull'
<<: *functest-kubernetes-jobs
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-pull'
+ <<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-cnf-{tag}-pull'
<<: *functest-kubernetes-jobs
- multijob:
<<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-security-{tag}-kube_bench-run'
<<: *functest-kubernetes-jobs
+ - multijob:
+ name: opnfv/functest-kubernetes-benchmarking:{tag}
+ projects:
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-xrally_kubernetes_full-run'
+ <<: *functest-kubernetes-jobs
- multijob:
name: opnfv/functest-kubernetes-cnf:{tag}
projects:
- 'functest-kubernetes-{repo}-{container}-{tag}-gate'
- 'functest-kubernetes-{repo}-{container}-{tag}-check'
+- project:
+ name: functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-build
+ <<: *functest-kubernetes-params
+ container: functest-kubernetes-benchmarking
+ ref_arg:
+ path: docker/benchmarking
+ exclude:
+ - tag: arm64-latest
+ - tag: arm64-kali
+ - tag: arm64-jerma
+ - tag: arm64-iruya
+ - tag: arm64-hunter
+ jobs:
+ - 'functest-kubernetes-{repo}-{container}-{tag}-gate'
+ - 'functest-kubernetes-{repo}-{container}-{tag}-check'
+
- job-template:
name: 'functest-kubernetes-{tag}-check'
project-type: multijob
properties:
- build-blocker:
use-build-blocker: true
- blocking-level: 'NODE'
+ blocking-level: 'GLOBAL'
blocking-jobs:
- '^functest-kubernetes(-pi)?-(arm.*-|amd64-)*[a-z]+-(daily|gate|check)$'
builders:
<<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-security-{tag}-rmi'
<<: *functest-kubernetes-jobs
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-rmi'
+ <<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-cnf-{tag}-rmi'
<<: *functest-kubernetes-jobs
- multijob:
projects:
- name: 'functest-kubernetes-opnfv-functest-kubernetes-smoke-{tag}-check'
<<: *functest-kubernetes-jobs
+ - multijob:
+ name: build opnfv/functest-kubernetes-benchmarking
+ projects:
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-check'
+ <<: *functest-kubernetes-jobs
- multijob:
name: opnfv/functest-kubernetes-healthcheck:{tag}
projects:
<<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-smoke-{tag}-k8s_conformance-run'
<<: *functest-kubernetes-jobs
+ - multijob:
+ name: opnfv/functest-kubernetes-benchmarking:{tag}
+ projects:
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-xrally_kubernetes_full-run'
+ <<: *functest-kubernetes-jobs
- multijob:
name: opnfv/functest-kubernetes-security:{tag}
projects:
properties:
- build-blocker:
use-build-blocker: true
- blocking-level: 'NODE'
+ blocking-level: 'GLOBAL'
blocking-jobs:
- '^functest-kubernetes(-pi)?-(arm.*-|amd64-)*[a-z]+-(daily|gate|check)$'
builders:
<<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-security-{tag}-rmi'
<<: *functest-kubernetes-jobs
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-rmi'
+ <<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-cnf-{tag}-rmi'
<<: *functest-kubernetes-jobs
- multijob:
projects:
- name: 'functest-kubernetes-opnfv-functest-kubernetes-smoke-{tag}-gate'
<<: *functest-kubernetes-jobs
+ - multijob:
+ name: build opnfv/functest-kubernetes-benchmarking
+ projects:
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-gate'
+ <<: *functest-kubernetes-jobs
- multijob:
name: opnfv/functest-kubernetes-healthcheck:{tag}
projects:
<<: *functest-kubernetes-jobs
- name: 'functest-kubernetes-opnfv-functest-kubernetes-security-{tag}-kube_bench-run'
<<: *functest-kubernetes-jobs
+ - multijob:
+ name: opnfv/functest-kubernetes-benchmarking:{tag}
+ projects:
+ - name: 'functest-kubernetes-opnfv-functest-kubernetes-benchmarking-{tag}-xrally_kubernetes_full-run'
+ <<: *functest-kubernetes-jobs
- multijob:
name: opnfv/functest-kubernetes-cnf:{tag}
projects:
--- /dev/null
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+##############################################################################
+# Copyright (c) 2020 Samsung Electronics
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+$no_proxy = ENV['NO_PROXY'] || ENV['no_proxy'] || "127.0.0.1,localhost"
+# NOTE: This range is based on vagrant-libvirt network definition CIDR 192.168.121.0/24
+(1..254).each do |i|
+ $no_proxy += ",192.168.121.#{i}"
+end
+$no_proxy += ",10.0.2.15"
+
+distros = {
+"centos_7" => "generic/centos7",
+"ubuntu_xenial" => "generic/ubuntu1604",
+"ubuntu_bionic" => "generic/ubuntu1804",
+"ubuntu_focal" => "generic/ubuntu2004",
+"opensuse" => "opensuse/Tumbleweed.x86_64"
+}
+
+Vagrant.configure("2") do |config|
+ config.vm.provider :libvirt
+ config.vm.provider :virtualbox
+
+ config.vm.synced_folder './', '/vagrant', type: "rsync",
+ rsync__args: ["--verbose", "--archive", "--delete", "-z"]
+ distros.each do |key,box|
+ config.vm.define key do |node|
+ node.vm.box = box
+ node.vm.box_check_update = false
+ end
+ end
+
+ config.vm.provision 'shell', privileged: false, inline: <<-SHELL
+ set -o errexit
+
+ cd /vagrant
+ ./kuberef-run-linting.sh
+ SHELL
+
+ [:virtualbox, :libvirt].each do |provider|
+ config.vm.provider provider do |p|
+ p.cpus = 1
+ p.memory = ENV['MEMORY'] || 512
+ end
+ end
+
+ config.vm.provider "virtualbox" do |v|
+ v.gui = false
+ end
+
+ config.vm.provider :libvirt do |v|
+ v.random_hostname = true
+ v.management_network_address = "192.168.121.0/24"
+ end
+
+ if ENV['http_proxy'] != nil and ENV['https_proxy'] != nil
+ if Vagrant.has_plugin?('vagrant-proxyconf')
+ config.proxy.http = ENV['http_proxy'] || ENV['HTTP_PROXY'] || ""
+ config.proxy.https = ENV['https_proxy'] || ENV['HTTPS_PROXY'] || ""
+ config.proxy.no_proxy = $no_proxy
+ config.proxy.enabled = { docker: false, git: false }
+ end
+ end
+end
set -o pipefail
set -o xtrace
+# _vercmp() - Function that compares two versions
+function _vercmp {
+ local v1=$1
+ local op=$2
+ local v2=$3
+ local result
+
+ # sort the two numbers with sort's "-V" argument. Based on if v2
+ # swapped places with v1, we can determine ordering.
+ result=$(echo -e "$v1\n$v2" | sort -V | head -1)
+
+ case $op in
+ "==")
+ [ "$v1" = "$v2" ]
+ return
+ ;;
+ ">")
+ [ "$v1" != "$v2" ] && [ "$result" = "$v2" ]
+ return
+ ;;
+ "<")
+ [ "$v1" != "$v2" ] && [ "$result" = "$v1" ]
+ return
+ ;;
+ ">=")
+ [ "$result" = "$v2" ]
+ return
+ ;;
+ "<=")
+ [ "$result" = "$v1" ]
+ return
+ ;;
+ *)
+ die $LINENO "unrecognised op: $op"
+ ;;
+ esac
+}
+
+echo "Requirements validation"
# shellcheck disable=SC1091
source /etc/os-release || source /usr/lib/os-release
+min_shellcheck_version=0.4.0
+min_tox_version=3.5
+
pkgs=""
if ! command -v shellcheck; then
case ${ID,,} in
;;
esac
fi
-
if ! command -v pip; then
- pkgs+=" python-pip"
+ case ${ID,,} in
+ *suse*|rhel|centos|fedora)
+ pkgs+=" python3-pip python3-setuptools"
+ ;;
+ ubuntu|debian)
+ if _vercmp "${VERSION_ID}" '<=' "18.04"; then
+ pkgs+=" python-pip python-setuptools"
+ else
+ pkgs+=" python3-pip python3-setuptools"
+ fi
+ ;;
+ esac
fi
if [ -n "$pkgs" ]; then
+ echo "Requirements installation"
case ${ID,,} in
*suse*)
sudo zypper install --gpg-auto-import-keys refresh
- sudo -H -E zypper install -y --no-recommends "$pkgs"
+ # shellcheck disable=SC2086
+ sudo -H -E zypper install -y --no-recommends $pkgs
;;
ubuntu|debian)
sudo apt-get update
- sudo -H -E apt-get -y --no-install-recommends install "$pkgs"
+ # shellcheck disable=SC2086
+ sudo -H -E apt-get -y --no-install-recommends install $pkgs
;;
rhel|centos|fedora)
PKG_MANAGER=$(command -v dnf || command -v yum)
sudo -H -E "$PKG_MANAGER" -q -y install epel-release
fi
sudo "$PKG_MANAGER" updateinfo --assumeyes
- sudo -H -E "${PKG_MANAGER}" -y install "$pkgs"
+ # shellcheck disable=SC2086
+ sudo -H -E "$PKG_MANAGER" -y install $pkgs
;;
esac
+ if ! command -v pip && command -v pip3 ; then
+ sudo ln -s "$(command -v pip3)" /usr/bin/pip
+ fi
+ sudo "$(command -v pip)" install --upgrade pip
fi
+if ! command -v tox || _vercmp "$(tox --version | awk '{print $1}')" '<' "$min_tox_version"; then
+ sudo "$(command -v pip)" install tox==$min_tox_version
+fi
+
+echo "Server tools information:"
+python -V
+tox --version
+shellcheck -V
+
+echo "Linting process execution"
tox -e lint
-bash -c 'shopt -s globstar; shellcheck **/*.sh'
+if _vercmp "$(shellcheck --version | awk 'FNR==2{print $2}')" '<' "$min_shellcheck_version"; then
+ bash -c 'shopt -s globstar; shellcheck **/*.sh'
+else
+ bash -c 'shopt -s globstar; shellcheck -x **/*.sh'
+fi
- job-template:
name: '{project}-verify-lint-{stream}'
scm:
- - kuberef-project-scm
+ - git-scm-gerrit
+ parameters:
+ - label:
+ name: SLAVE_LABEL
+ default: 'opnfv-build'
+ all-nodes: false
+ node-eligibility: 'ignore-offline'
+ - project-parameter:
+ project: $GERRIT_PROJECT
+ branch: '{branch}'
+ - string:
+ name: GIT_BASE
+ default: https://gerrit.opnfv.org/gerrit/$PROJECT
+ description: 'Git URL to use on this Jenkins Slave'
triggers:
- gerrit:
server-name: 'gerrit.opnfv.org'
builders:
- kubref-run-linting
-- scm:
- name: kuberef-project-scm
- scm:
- - git:
- url: https://gerrit.opnfv.org/gerrit/kuberef
- refspec: '+refs/changes/*:refs/changes/*'
- branches:
- - '{ref}'
-
- builder:
name: kubref-run-linting
builders:
--- /dev/null
+#!/bin/bash
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2020 Samsung Electronics
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+[tox]
+minversion = 3.5
+skipsdist = True
+envlist = lint
+
+[testenv]
+passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
+usedevelop = False
+install_command = pip install {opts} {packages}
+
+[testenv:lint]
+deps =
+ {env:BASHATE_INSTALL_PATH:bashate}
+whitelist_externals = bash
+commands = bash -c "find {toxinidir} \
+ -not -path {toxinidir}/.tox/\* \
+# E006 check for lines longer than 79 columns
+ -name \*.sh | xargs bashate -v -iE006"