提交 0d009ca6 编写于 作者: A Andrea Bolognani

ci: Reduce number of stages

Right now we're dividing the jobs into three stages: prebuild, which
includes DCO checking as well as building artifacts such as the
website, and native_build/cross_build, which do exactly what you'd
expect based on their names.

This organization is nice from the logical point of view, but results
in poor utilization of the available CI resources: in particular, the
fact that cross_build jobs can only start after all native_build jobs
have finished means that if even a single one of the latter takes a
bit longer the pipeline will stall, and with native builds taking
anywhere from less than 10 minutes to more than 20, this happens all
the time.

Building artifacts in a separate pipeline stage also doesn't have any
advantages, and only delays further stages by a couple of minutes.
The only job that really makes sense in its own stage is the DCO
check, because it's extremely fast (less than 1 minute) and, if that
fails, we can avoid kicking off all other jobs.

Reducing the number of stages results in significant speedups:
specifically, going from three stages to two stages reduces the
overall completion time for a full CI pipeline from ~45 minutes[1]
to ~30 minutes[2].

[1] https://gitlab.com/abologna/libvirt/-/pipelines/154751893
[2] https://gitlab.com/abologna/libvirt/-/pipelines/154771173Signed-off-by: NAndrea Bolognani <abologna@redhat.com>
Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 2072c395
...@@ -2,9 +2,8 @@ variables: ...@@ -2,9 +2,8 @@ variables:
GIT_DEPTH: 100 GIT_DEPTH: 100
stages: stages:
- prebuild - sanity_checks
- native_build - builds
- cross_build
.script_variables: &script_variables | .script_variables: &script_variables |
export MAKEFLAGS="-j$(getconf _NPROCESSORS_ONLN)" export MAKEFLAGS="-j$(getconf _NPROCESSORS_ONLN)"
...@@ -17,7 +16,7 @@ stages: ...@@ -17,7 +16,7 @@ stages:
# Default native build jobs that are always run # Default native build jobs that are always run
.native_build_default_job_template: &native_build_default_job_definition .native_build_default_job_template: &native_build_default_job_definition
stage: native_build stage: builds
cache: cache:
paths: paths:
- ccache/ - ccache/
...@@ -42,7 +41,7 @@ stages: ...@@ -42,7 +41,7 @@ stages:
# system other than Linux. These jobs will only run if the required # system other than Linux. These jobs will only run if the required
# setup has been performed on the GitLab account (see ci/README.rst). # setup has been performed on the GitLab account (see ci/README.rst).
.cirrus_build_default_job_template: &cirrus_build_default_job_definition .cirrus_build_default_job_template: &cirrus_build_default_job_definition
stage: native_build stage: builds
image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master image: registry.gitlab.com/libvirt/libvirt-ci/cirrus-run:master
script: script:
- cirrus-run ci/cirrus/$NAME.yml.j2 - cirrus-run ci/cirrus/$NAME.yml.j2
...@@ -64,7 +63,7 @@ stages: ...@@ -64,7 +63,7 @@ stages:
# Default cross build jobs that are always run # Default cross build jobs that are always run
.cross_build_default_job_template: &cross_build_default_job_definition .cross_build_default_job_template: &cross_build_default_job_definition
stage: cross_build stage: builds
cache: cache:
paths: paths:
- ccache/ - ccache/
...@@ -194,7 +193,7 @@ mingw64-fedora-rawhide: ...@@ -194,7 +193,7 @@ mingw64-fedora-rawhide:
# be deployed to the web root: # be deployed to the web root:
# https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=website # https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=website
website: website:
stage: prebuild stage: builds
before_script: before_script:
- *script_variables - *script_variables
script: script:
...@@ -216,7 +215,7 @@ website: ...@@ -216,7 +215,7 @@ website:
codestyle: codestyle:
stage: prebuild stage: builds
before_script: before_script:
- *script_variables - *script_variables
script: script:
...@@ -231,7 +230,7 @@ codestyle: ...@@ -231,7 +230,7 @@ codestyle:
# for translation usage: # for translation usage:
# https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=potfile # https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=potfile
potfile: potfile:
stage: prebuild stage: builds
only: only:
- master - master
before_script: before_script:
...@@ -259,7 +258,7 @@ potfile: ...@@ -259,7 +258,7 @@ potfile:
# this test on developer's personal forks from which # this test on developer's personal forks from which
# merge requests are submitted # merge requests are submitted
check-dco: check-dco:
stage: prebuild stage: sanity_checks
image: registry.gitlab.com/libvirt/libvirt-ci/check-dco:master image: registry.gitlab.com/libvirt/libvirt-ci/check-dco:master
script: script:
- /check-dco - /check-dco
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册