2022-05-27 18:36:03 +03:00
|
|
|
.. _ci_var:
|
|
|
|
|
2021-08-12 21:04:02 +03:00
|
|
|
Custom CI/CD variables
|
|
|
|
======================
|
|
|
|
|
|
|
|
QEMU CI pipelines can be tuned by setting some CI environment variables.
|
|
|
|
|
|
|
|
Set variable globally in the user's CI namespace
|
|
|
|
------------------------------------------------
|
|
|
|
|
|
|
|
Variables can be set globally in the user's CI namespace setting.
|
|
|
|
|
|
|
|
For further information about how to set these variables, please refer to::
|
|
|
|
|
|
|
|
https://docs.gitlab.com/ee/ci/variables/#add-a-cicd-variable-to-a-project
|
|
|
|
|
|
|
|
Set variable manually when pushing a branch or tag to the user's repository
|
|
|
|
---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
Variables can be set manually when pushing a branch or tag, using
|
|
|
|
git-push command line arguments.
|
|
|
|
|
|
|
|
Example setting the QEMU_CI_EXAMPLE_VAR variable:
|
|
|
|
|
|
|
|
.. code::
|
|
|
|
|
|
|
|
git push -o ci.variable="QEMU_CI_EXAMPLE_VAR=value" myrepo mybranch
|
|
|
|
|
|
|
|
For further information about how to set these variables, please refer to::
|
|
|
|
|
|
|
|
https://docs.gitlab.com/ee/user/project/push_options.html#push-options-for-gitlab-cicd
|
|
|
|
|
2022-05-27 18:36:02 +03:00
|
|
|
Setting aliases in your git config
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
You can use aliases to make it easier to push branches with different
|
|
|
|
CI configurations. For example define an alias for triggering CI:
|
|
|
|
|
|
|
|
.. code::
|
|
|
|
|
|
|
|
git config --local alias.push-ci "push -o ci.variable=QEMU_CI=1"
|
|
|
|
git config --local alias.push-ci-now "push -o ci.variable=QEMU_CI=2"
|
|
|
|
|
|
|
|
Which lets you run:
|
|
|
|
|
|
|
|
.. code::
|
|
|
|
|
|
|
|
git push-ci
|
|
|
|
|
|
|
|
to create the pipeline, or:
|
|
|
|
|
|
|
|
.. code::
|
|
|
|
|
|
|
|
git push-ci-now
|
|
|
|
|
|
|
|
to create and run the pipeline
|
|
|
|
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
Variable naming and grouping
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
The variables used by QEMU's CI configuration are grouped together
|
|
|
|
in a handful of namespaces
|
|
|
|
|
|
|
|
* QEMU_JOB_nnnn - variables to be defined in individual jobs
|
|
|
|
or templates, to influence the shared rules defined in the
|
|
|
|
.base_job_template.
|
|
|
|
|
|
|
|
* QEMU_CI_nnn - variables to be set by contributors in their
|
|
|
|
repository CI settings, or as git push variables, to influence
|
|
|
|
which jobs get run in a pipeline
|
|
|
|
|
2023-06-08 19:40:14 +03:00
|
|
|
* QEMU_CI_CONTAINER_TAG - the tag used to publish containers
|
|
|
|
in stage 1, for use by build jobs in stage 2. Defaults to
|
|
|
|
'latest', but if running pipelines for different branches
|
|
|
|
concurrently, it should be overridden per pipeline.
|
|
|
|
|
2023-06-08 19:40:15 +03:00
|
|
|
* QEMU_CI_UPSTREAM - gitlab namespace that is considered to be
|
|
|
|
the 'upstream'. This defaults to 'qemu-project'. Contributors
|
|
|
|
may choose to override this if they are modifying rules in
|
|
|
|
base.yml and need to validate how they will operate when in
|
|
|
|
an upstream context, as opposed to their fork context.
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
* nnn - other misc variables not falling into the above
|
|
|
|
categories, or using different names for historical reasons
|
|
|
|
and not yet converted.
|
|
|
|
|
|
|
|
Maintainer controlled job variables
|
|
|
|
-----------------------------------
|
|
|
|
|
|
|
|
The following variables may be set when defining a job in the
|
|
|
|
CI configuration file.
|
|
|
|
|
2022-05-27 18:35:59 +03:00
|
|
|
QEMU_JOB_CIRRUS
|
|
|
|
~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The job makes use of Cirrus CI infrastructure, requiring the
|
|
|
|
configuration setup for cirrus-run to be present in the repository
|
|
|
|
|
|
|
|
QEMU_JOB_OPTIONAL
|
|
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The job is expected to be successful in general, but is not run
|
|
|
|
by default due to need to conserve limited CI resources. It is
|
|
|
|
available to be started manually by the contributor in the CI
|
|
|
|
pipelines UI.
|
|
|
|
|
2022-05-27 18:36:00 +03:00
|
|
|
QEMU_JOB_ONLY_FORKS
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The job results are only of interest to contributors prior to
|
|
|
|
submitting code. They are not required as part of the gating
|
|
|
|
CI pipeline.
|
|
|
|
|
2022-05-27 18:36:01 +03:00
|
|
|
QEMU_JOB_SKIPPED
|
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The job is not reliably successsful in general, so is not
|
|
|
|
currently suitable to be run by default. Ideally this should
|
|
|
|
be a temporary marker until the problems can be addressed, or
|
|
|
|
the job permanently removed.
|
|
|
|
|
|
|
|
QEMU_JOB_PUBLISH
|
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The job is for publishing content after a branch has been
|
|
|
|
merged into the upstream default branch.
|
|
|
|
|
|
|
|
QEMU_JOB_AVOCADO
|
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The job runs the Avocado integration test suite
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
Contributor controlled runtime variables
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
The following variables may be set by contributors to control
|
|
|
|
job execution
|
2021-08-12 21:04:02 +03:00
|
|
|
|
2022-05-27 18:36:02 +03:00
|
|
|
QEMU_CI
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
By default, no pipelines will be created on contributor forks
|
|
|
|
in order to preserve CI credits
|
|
|
|
|
|
|
|
Set this variable to 1 to create the pipelines, but leave all
|
|
|
|
the jobs to be manually started from the UI
|
|
|
|
|
|
|
|
Set this variable to 2 to create the pipelines and run all
|
|
|
|
the jobs immediately, as was historicaly behaviour
|
|
|
|
|
2021-08-12 21:04:02 +03:00
|
|
|
QEMU_CI_AVOCADO_TESTING
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
By default, tests using the Avocado framework are not run automatically in
|
|
|
|
the pipelines (because multiple artifacts have to be downloaded, and if
|
|
|
|
these artifacts are not already cached, downloading them make the jobs
|
|
|
|
reach the timeout limit). Set this variable to have the tests using the
|
|
|
|
Avocado framework run automatically.
|
|
|
|
|
2022-05-27 18:35:58 +03:00
|
|
|
Other misc variables
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
These variables are primarily to control execution of jobs on
|
|
|
|
private runners
|
|
|
|
|
2021-08-06 17:10:15 +03:00
|
|
|
AARCH64_RUNNER_AVAILABLE
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If you've got access to an aarch64 host that can be used as a gitlab-CI
|
|
|
|
runner, you can set this variable to enable the tests that require this
|
|
|
|
kind of host. The runner should be tagged with "aarch64".
|
|
|
|
|
2022-02-25 20:20:12 +03:00
|
|
|
AARCH32_RUNNER_AVAILABLE
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If you've got access to an armhf host or an arch64 host that can run
|
|
|
|
aarch32 EL0 code to be used as a gitlab-CI runner, you can set this
|
|
|
|
variable to enable the tests that require this kind of host. The
|
|
|
|
runner should be tagged with "aarch32".
|
|
|
|
|
2021-08-06 17:10:15 +03:00
|
|
|
S390X_RUNNER_AVAILABLE
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If you've got access to an IBM Z host that can be used as a gitlab-CI
|
|
|
|
runner, you can set this variable to enable the tests that require this
|
|
|
|
kind of host. The runner should be tagged with "s390x".
|
2021-11-15 17:29:14 +03:00
|
|
|
|
|
|
|
CENTOS_STREAM_8_x86_64_RUNNER_AVAILABLE
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If you've got access to a CentOS Stream 8 x86_64 host that can be
|
|
|
|
used as a gitlab-CI runner, you can set this variable to enable the
|
|
|
|
tests that require this kind of host. The runner should be tagged with
|
|
|
|
both "centos_stream_8" and "x86_64".
|
2023-08-29 19:15:17 +03:00
|
|
|
|
|
|
|
CCACHE_DISABLE
|
|
|
|
~~~~~~~~~~~~~~
|
|
|
|
The jobs are configured to use "ccache" by default since this typically
|
|
|
|
reduces compilation time, at the cost of increased storage. If the
|
|
|
|
use of "ccache" is suspected to be hurting the overall job execution
|
|
|
|
time, setting the "CCACHE_DISABLE=1" env variable to disable it.
|