| .. _ci_var: | 
 |  | 
 | 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 | 
 |  | 
 | 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 | 
 |  | 
 |  | 
 | 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 | 
 |  | 
 |  * 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. | 
 |  | 
 |  * 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. | 
 |  | 
 |  * 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. | 
 |  | 
 | 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. | 
 |  | 
 | 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. | 
 |  | 
 | 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 | 
 |  | 
 | Contributor controlled runtime variables | 
 | ---------------------------------------- | 
 |  | 
 | The following variables may be set by contributors to control | 
 | job execution | 
 |  | 
 | 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 the historical behaviour | 
 |  | 
 | 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. | 
 |  | 
 | Other misc variables | 
 | -------------------- | 
 |  | 
 | These variables are primarily to control execution of jobs on | 
 | private runners | 
 |  | 
 | 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". | 
 |  | 
 | 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". | 
 |  | 
 | 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". | 
 |  | 
 | 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". | 
 |  | 
 | 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. |