From 835fd86a08e3104b85bd199688f6b91caa00836b Mon Sep 17 00:00:00 2001 From: Cristian Calin <6627509+cristicalin@users.noreply.github.com> Date: Fri, 29 Apr 2022 10:09:12 +0300 Subject: [PATCH] [CI] split molecule testes to run in parallel (#8756) * add parametrization to molecule_run.sh * [CI] split molecule tests to allow parallelization of work --- .gitlab-ci.yml | 1 + .gitlab-ci/molecule.yml | 93 +++++++++++++++++++++++++++++++++++ .gitlab-ci/vagrant.yml | 23 --------- tests/scripts/molecule_run.sh | 26 +++++++++- 4 files changed, 118 insertions(+), 25 deletions(-) create mode 100644 .gitlab-ci/molecule.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 32d024af0..8a145aa40 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -80,3 +80,4 @@ include: - .gitlab-ci/terraform.yml - .gitlab-ci/packet.yml - .gitlab-ci/vagrant.yml + - .gitlab-ci/molecule.yml diff --git a/.gitlab-ci/molecule.yml b/.gitlab-ci/molecule.yml new file mode 100644 index 000000000..5f8e02e4c --- /dev/null +++ b/.gitlab-ci/molecule.yml @@ -0,0 +1,93 @@ +--- + +.molecule: + tags: [c3.small.x86] + only: [/^pr-.*$/] + except: ['triggers'] + image: quay.io/kubespray/vagrant:$KUBESPRAY_VERSION + services: [] + stage: deploy-part1 + before_script: + - tests/scripts/rebase.sh + - apt-get update && apt-get install -y python3-pip + - update-alternatives --install /usr/bin/python python /usr/bin/python3 10 + - python -m pip uninstall -y ansible ansible-base ansible-core + - python -m pip install -r tests/requirements.txt + - ./tests/scripts/vagrant_clean.sh + script: + - ./tests/scripts/molecule_run.sh + after_script: + - chronic ./tests/scripts/molecule_logs.sh + artifacts: + when: always + paths: + - molecule_logs/ + +# CI template for periodic CI jobs +# Enabled when PERIODIC_CI_ENABLED var is set +.molecule_periodic: + only: + variables: + - $PERIODIC_CI_ENABLED + allow_failure: true + extends: .molecule + +molecule_full: + extends: .molecule_periodic + +molecule_no_container_engines: + extends: .molecule + script: + - ./tests/scripts/molecule_run.sh -e container-engine + when: on_success + +molecule_docker: + extends: .molecule + script: + - ./tests/scripts/molecule_run.sh -i container-engine/docker + when: on_success + +molecule_containerd: + extends: .molecule + script: + - ./tests/scripts/molecule_run.sh -i container-engine/containerd + when: on_success + +molecule_cri-o: + extends: .molecule + stage: deploy-part2 + script: + - ./tests/scripts/molecule_run.sh -i container-engine/cri-o + when: on_success + +molecule_cri-dockerd: + extends: .molecule + stage: deploy-part2 + script: + - ./tests/scripts/molecule_run.sh -i container-engine/cri-dockerd + when: on_success + +# Stage 3 container engines don't get as much attention so allow them to fail +molecule_kata: + extends: .molecule + stage: deploy-part3 + allow_failure: true + script: + - ./tests/scripts/molecule_run.sh -i container-engine/kata-containers + when: on_success + +molecule_gvisor: + extends: .molecule + stage: deploy-part3 + allow_failure: true + script: + - ./tests/scripts/molecule_run.sh -i container-engine/gvisor + when: on_success + +molecule_youki: + extends: .molecule + stage: deploy-part3 + allow_failure: true + script: + - ./tests/scripts/molecule_run.sh -i container-engine/youki + when: on_success diff --git a/.gitlab-ci/vagrant.yml b/.gitlab-ci/vagrant.yml index a13028dda..8c0f4a21d 100644 --- a/.gitlab-ci/vagrant.yml +++ b/.gitlab-ci/vagrant.yml @@ -1,28 +1,5 @@ --- -molecule_tests: - tags: [c3.small.x86] - only: [/^pr-.*$/] - except: ['triggers'] - image: quay.io/kubespray/vagrant:$KUBESPRAY_VERSION - services: [] - stage: deploy-part1 - before_script: - - tests/scripts/rebase.sh - - apt-get update && apt-get install -y python3-pip - - update-alternatives --install /usr/bin/python python /usr/bin/python3 10 - - python -m pip uninstall -y ansible ansible-base ansible-core - - python -m pip install -r tests/requirements.txt - - ./tests/scripts/vagrant_clean.sh - script: - - ./tests/scripts/molecule_run.sh - after_script: - - chronic ./tests/scripts/molecule_logs.sh - artifacts: - when: always - paths: - - molecule_logs/ - .vagrant: extends: .testcases variables: diff --git a/tests/scripts/molecule_run.sh b/tests/scripts/molecule_run.sh index ff2966fd0..9604238e1 100755 --- a/tests/scripts/molecule_run.sh +++ b/tests/scripts/molecule_run.sh @@ -1,10 +1,32 @@ #!/bin/bash -set -euxo pipefail +set -euxo pipefail -o noglob export LC_ALL=C.UTF-8 export LANG=C.UTF-8 -for d in $(find roles -name molecule -type d) +_PATH='roles' +_EXCLUDE="" + +while [[ $# -gt 0 ]] ; do + case $1 in + -e|--exclude) + _EXCLUDE="${_EXCLUDE} -not -path ${_PATH}/$2/*" + shift + shift + ;; + -i|--include) + _PATH="${_PATH}/$2" + shift + shift + ;; + -h|--help) + echo "Usage: molecule_run.sh [-h|--help] [-e|--exclude] [-i|--include]" + exit 0 + ;; + esac +done + +for d in $(find ${_PATH} ${_EXCLUDE} -name molecule -type d) do pushd $(dirname $d) molecule test --all