From a6adee0e812075db577587b1a8042d491ceae457 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Sat, 26 Jun 2021 06:08:19 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- doc/ci/caching/img/clear_runners_cache.png | Bin 16020 -> 0 bytes doc/ci/caching/index.md | 190 ++++++++++----------- doc/ci/multi_project_pipelines.md | 101 ++++++----- doc/ci/yaml/README.md | 10 +- 4 files changed, 150 insertions(+), 151 deletions(-) delete mode 100644 doc/ci/caching/img/clear_runners_cache.png diff --git a/doc/ci/caching/img/clear_runners_cache.png b/doc/ci/caching/img/clear_runners_cache.png deleted file mode 100644 index 4f1171513ad3badfe2bc39b89f9d5fe49a10b1cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16020 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

coH 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 diff --git a/doc/ci/caching/index.md b/doc/ci/caching/index.md index 856caf26794..b1f12a13f55 100644 --- a/doc/ci/caching/index.md +++ b/doc/ci/caching/index.md @@ -89,16 +89,16 @@ test-job: - echo Run tests... ``` -If multiple caches are combined with a [Fallback cache key](#fallback-cache-key), +If multiple caches are combined with a fallback cache key, the fallback cache is fetched every time a cache is not found. -## Fallback cache key +## Use a fallback cache key > [Introduced](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/1534) in GitLab Runner 13.4. You can use the `$CI_COMMIT_REF_SLUG` [predefined variable](../variables/predefined_variables.md) to specify your [`cache:key`](../yaml/README.md#cachekey). For example, if your -`$CI_COMMIT_REF_SLUG` is `test` you can set a job to download cache that's tagged with `test`. +`$CI_COMMIT_REF_SLUG` is `test`, you can set a job to download cache that's tagged with `test`. If a cache with this tag is not found, you can use `CACHE_FALLBACK_KEY` to specify a cache to use when none exists. @@ -121,9 +121,10 @@ job1: ## Disable cache for specific jobs -If you have defined the cache globally, it means that each job uses the -same definition. You can override this behavior per-job, and if you want to -disable it completely, use an empty hash: +If you define the cache globally, each job uses the +same definition. You can override this behavior for each job. + +To disable it completely for a job, use an empty hash: ```yaml job: @@ -153,20 +154,19 @@ job: policy: pull ``` -For more fine tuning, read also about the -[`cache: policy`](../yaml/README.md#cachepolicy). +For more information, see [`cache: policy`](../yaml/README.md#cachepolicy). -## Common use cases +## Common use cases for caches -The most common use case of caching is to avoid downloading content like dependencies -or libraries repeatedly between subsequent runs of jobs. Node.js packages, -PHP packages, Ruby gems, Python libraries, and others can all be cached. +Usually you use caches to avoid downloading content, like dependencies +or libraries, each time you run a job. Node.js packages, +PHP packages, Ruby gems, Python libraries, and others can be cached. -For more examples, check out our [GitLab CI/CD templates](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates). +For examples, see the [GitLab CI/CD templates](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates). ### Share caches between jobs in the same branch -To have jobs for each branch use the same cache, define a cache with the `key: $CI_COMMIT_REF_SLUG`: +To have jobs in each branch use the same cache, define a cache with the `key: $CI_COMMIT_REF_SLUG`: ```yaml cache: @@ -200,7 +200,7 @@ cache: key: one-key-to-rule-them-all ``` -To share caches between branches, but have a unique cache for each job: +To share a cache between branches, but have a unique cache for each job: ```yaml cache: @@ -209,11 +209,11 @@ cache: ### Cache Node.js dependencies -If your project is using [npm](https://www.npmjs.com/) to install the Node.js +If your project uses [npm](https://www.npmjs.com/) to install Node.js dependencies, the following example defines `cache` globally so that all jobs inherit it. -By default, npm stores cache data in the home folder `~/.npm` but you +By default, npm stores cache data in the home folder (`~/.npm`). However, you [can't cache things outside of the project directory](../yaml/README.md#cachepaths). -Instead, we tell npm to use `./.npm`, and cache it per-branch: +Instead, tell npm to use `./.npm`, and cache it per-branch: ```yaml # @@ -237,8 +237,8 @@ test_async: ### Cache PHP dependencies -Assuming your project is using [Composer](https://getcomposer.org/) to install -the PHP dependencies, the following example defines `cache` globally so that +If your project uses [Composer](https://getcomposer.org/) to install +PHP dependencies, the following example defines `cache` globally so that all jobs inherit it. PHP libraries modules are installed in `vendor/` and are cached per-branch: @@ -266,9 +266,9 @@ test: ### Cache Python dependencies -Assuming your project is using [pip](https://pip.pypa.io/en/stable/) to install -the Python dependencies, the following example defines `cache` globally so that -all jobs inherit it. Python libraries are installed in a virtual environment under `venv/`, +If your project uses [pip](https://pip.pypa.io/en/stable/) to install +Python dependencies, the following example defines `cache` globally so that +all jobs inherit it. Python libraries are installed in a virtual environment under `venv/`. pip's cache is defined under `.cache/pip/` and both are cached per-branch: ```yaml @@ -307,7 +307,7 @@ test: ### Cache Ruby dependencies -Assuming your project is using [Bundler](https://bundler.io) to install the +If your project uses [Bundler](https://bundler.io) to install gem dependencies, the following example defines `cache` globally so that all jobs inherit it. Gems are installed in `vendor/ruby/` and are cached per-branch: @@ -332,7 +332,7 @@ rspec: - rspec spec ``` -If you have jobs that each need a different selection of gems, use the `prefix` +If you have jobs that need different gems, use the `prefix` keyword in the global `cache` definition. This configuration generates a different cache for each job. @@ -365,7 +365,7 @@ deploy_job: ### Cache Go dependencies -Assuming your project is using [Go Modules](https://github.com/golang/go/wiki/Modules) to install +If your project uses [Go Modules](https://github.com/golang/go/wiki/Modules) to install Go dependencies, the following example defines `cache` in a `go-cache` template, that any job can extend. Go modules are installed in `${GOPATH}/pkg/mod/` and are cached for all of the `go` projects: @@ -389,35 +389,33 @@ test: ## Availability of the cache -Caching is an optimization, but it isn't guaranteed to always work. You need to -be prepared to regenerate any cached files in each job that needs them. +Caching is an optimization, but it isn't guaranteed to always work. You might need +to regenerate cached files in each job that needs them. -After you have defined a [cache in `.gitlab-ci.yml`](../yaml/README.md#cache), +After you define a [cache in `.gitlab-ci.yml`](../yaml/README.md#cache), the availability of the cache depends on: -- The runner's executor type +- The runner's executor type. - Whether different runners are used to pass the cache between jobs. ### Where the caches are stored -The runner is responsible for storing the cache, so it's essential -to know **where** it's stored. All the cache paths defined under a job in -`.gitlab-ci.yml` are archived in a single `cache.zip` file and stored in the -runner's configured cache location. By default, they are stored locally in the -machine where the runner is installed and depends on the type of the executor. +All caches defined for a job are archived in a single `cache.zip` file. +The runner configuration defines where the file is stored. By default, the cache +is stored on the machine where GitLab Runner is installed. The location also depends on the type of executor. -| GitLab Runner executor | Default path of the cache | +| Runner executor | Default path of the cache | | ---------------------- | ------------------------- | -| [Shell](https://docs.gitlab.com/runner/executors/shell.html) | Locally, stored under the `gitlab-runner` user's home directory: `/home/gitlab-runner/cache////cache.zip`. | -| [Docker](https://docs.gitlab.com/runner/executors/docker.html) | Locally, stored under [Docker volumes](https://docs.gitlab.com/runner/executors/docker.html#the-builds-and-cache-storage): `/var/lib/docker/volumes//_data////cache.zip`. | -| [Docker machine](https://docs.gitlab.com/runner/executors/docker_machine.html) (autoscale runners) | Behaves the same as the Docker executor. | +| [Shell](https://docs.gitlab.com/runner/executors/shell.html) | Locally, under the `gitlab-runner` user's home directory: `/home/gitlab-runner/cache////cache.zip`. | +| [Docker](https://docs.gitlab.com/runner/executors/docker.html) | Locally, under [Docker volumes](https://docs.gitlab.com/runner/executors/docker.html#the-builds-and-cache-storage): `/var/lib/docker/volumes//_data////cache.zip`. | +| [Docker Machine](https://docs.gitlab.com/runner/executors/docker_machine.html) (autoscale runners) | The same as the Docker executor. | If you use cache and artifacts to store the same path in your jobs, the cache might be overwritten because caches are restored before artifacts. ### How archiving and extracting works -This example has two jobs that belong to two consecutive stages: +This example shows two jobs in two consecutive stages: ```yaml stages: @@ -449,7 +447,7 @@ job B: - vendor/ ``` -If you have one machine with one runner installed, and all jobs for your project +If one machine has one runner installed, then all jobs for your project run on the same host: 1. Pipeline starts. @@ -489,27 +487,54 @@ different architecture (for example, when the cache includes binary files). Also because the different steps might be executed by runners running on different machines, it is a safe default. +## Clearing the cache + +Runners use [cache](../yaml/README.md#cache) to speed up the execution +of your jobs by reusing existing data. This can sometimes lead to +inconsistent behavior. + +There are two ways to start with a fresh copy of the cache. + +### Clear the cache by changing `cache:key` + +Change the value for `cache: key` in your `.gitlab-ci.yml` file. +The next time the pipeline runs, the cache is stored in a different location. + +### Clear the cache manually + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41249) in GitLab 10.4. + +You can clear the cache in the GitLab UI: + +1. On the top bar, select **Menu > Projects** and find your project. +1. On the left sidebar, select **CI/CD > Pipelines** page. +1. In the top right, select **Clear runner caches**. + +On the next commit, your CI/CD jobs use a new cache. + +NOTE: +Each time you clear the cache manually, the [internal cache name](#where-the-caches-are-stored) is updated. The name uses the format `cache-`, and the index increments by one. The old cache is not deleted. You can manually delete these files from the runner storage. + +## Troubleshooting + ### Cache mismatch -In the following table, you can see some reasons where you might hit a cache -mismatch and a few ideas how to fix it. +If you have a cache mismatch, follow these steps to troubleshoot. -| Reason of a cache mismatch | How to fix it | -| -------------------------- | ------------- | -| You use multiple standalone runners (not in autoscale mode) attached to one project without a shared cache | Use only one runner for your project or use multiple runners with distributed cache enabled | -| You use runners in autoscale mode without a distributed cache enabled | Configure the autoscale runner to use a distributed cache | -| The machine the runner is installed on is low on disk space or, if you've set up distributed cache, the S3 bucket where the cache is stored doesn't have enough space | Make sure you clear some space to allow new caches to be stored. There's no automatic way to do this. | +| Reason for a cache mismatch | How to fix it | +| --------------------------- | ------------- | +| You use multiple standalone runners (not in autoscale mode) attached to one project without a shared cache. | Use only one runner for your project or use multiple runners with distributed cache enabled. | +| You use runners in autoscale mode without a distributed cache enabled. | Configure the autoscale runner to use a distributed cache. | +| The machine the runner is installed on is low on disk space or, if you've set up distributed cache, the S3 bucket where the cache is stored doesn't have enough space. | Make sure you clear some space to allow new caches to be stored. There's no automatic way to do this. | | You use the same `key` for jobs where they cache different paths. | Use different cache keys to that the cache archive is stored to a different location and doesn't overwrite wrong caches. | -Let's explore some examples. +#### Cache mismatch example 1 -#### Examples +If you have only one runner assigned to your project, the cache +is stored on the runner's machine by default. -Let's assume you have only one runner assigned to your project, so the cache -is stored in the runner's machine by default. - -Two jobs could cause caches to be overwritten if they have the same cache key, but -they cache a different path: +If two jobs have the same cache key but a different path, the caches can be overwritten. +For example: ```yaml stages: @@ -541,11 +566,14 @@ job B: 1. The next time `job A` runs it uses the cache of `job B` which is different and thus isn't effective. -To fix that, use different `keys` for each job. +To fix this issue, use different `keys` for each job. -In another case, let's assume you have more than one runner assigned to your -project, but the distributed cache is not enabled. The second time the -pipeline is run, we want `job A` and `job B` to re-use their cache (which in this case +#### Cache mismatch example 2 + +In this example, you have more than one runner assigned to your +project, and distributed cache is not enabled. + +The second time the pipeline runs, you want `job A` and `job B` to re-use their cache (which in this case is different): ```yaml @@ -571,46 +599,4 @@ job B: ``` Even if the `key` is different, the cached files might get "cleaned" before each -stage if the jobs run on different runners in the subsequent pipelines. - -## Clearing the cache - -Runners use [cache](../yaml/README.md#cache) to speed up the execution -of your jobs by reusing existing data. This however, can sometimes lead to an -inconsistent behavior. - -To start with a fresh copy of the cache, there are two ways to do that. - -### Clearing the cache by changing `cache:key` - -All you have to do is set a new `cache: key` in your `.gitlab-ci.yml`. In the -next run of the pipeline, the cache is stored in a different location. - -### Clearing the cache manually - -> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41249) in GitLab 10.4. - -If you want to avoid editing `.gitlab-ci.yml`, you can clear the cache -via the GitLab UI: - -1. Navigate to your project's **CI/CD > Pipelines** page. -1. Click on the **Clear runner caches** button to clean up the cache. - - ![Clear runner caches](img/clear_runners_cache.png) - -1. On the next push, your CI/CD job uses a new cache. - -NOTE: -Each time you clear the cache manually, the [internal cache name](#where-the-caches-are-stored) is updated. The name uses the format `cache-`, and the index increments by one each time. The old cache is not deleted. You can manually delete these files from the runner storage. - - +stage if the jobs run on different runners in subsequent pipelines. diff --git a/doc/ci/multi_project_pipelines.md b/doc/ci/multi_project_pipelines.md index 1ede4f13f2a..abdf01521db 100644 --- a/doc/ci/multi_project_pipelines.md +++ b/doc/ci/multi_project_pipelines.md @@ -25,24 +25,28 @@ with a [microservices architecture](https://about.gitlab.com/blog/2016/08/16/tre Learn more in the [Cross-project Pipeline Triggering and Visualization demo](https://about.gitlab.com/learn/) at GitLab@learn, in the Continuous Integration section. -If you trigger a pipeline in a downstream private project, the name of the project -and the status of the pipeline is visible in the upstream project's pipelines page. -Make sure that there are no confidentiality problems if you have a public project -that can trigger downstream pipelines in a private project. +If you trigger a pipeline in a downstream private project, on the upstream project's pipelines page, +you can view: + +- The name of the project. +- The status of the pipeline. + +If you have a public project that can trigger downstream pipelines in a private project, +make sure there are no confidentiality problems. ## Create multi-project pipelines To create multi-project pipelines, you can: -- [Use the CI/CD configuration syntax](#create-multi-project-pipelines-in-your-gitlab-ciyml-file). +- [Define them in your `.gitlab-ci.yml` file](#define-multi-project-pipelines-in-your-gitlab-ciyml-file). - [Use the API](#create-multi-project-pipelines-by-using-the-api). -### Create multi-project pipelines in your `.gitlab-ci.yml` file +### Define multi-project pipelines in your `.gitlab-ci.yml` file > [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/199224) to GitLab Free in 12.8. When you create a multi-project pipeline in your `.gitlab-ci.yml` file, -you create what is called a "trigger job". For example: +you create what is called a *trigger job*. For example: ```yaml rspec: @@ -72,6 +76,8 @@ downstream project (`my/deployment`) too. If the downstream project is not found or the user does not have [permission](../user/permissions.md) to create a pipeline there, the `staging` job is marked as _failed_. +#### Trigger job configuration keywords + Trigger jobs can use only a limited set of the GitLab CI/CD [configuration keywords](yaml/README.md). The keywords available for use in trigger jobs are: @@ -177,35 +183,35 @@ In the upstream pipeline: 1. Save the `.env` file as a `dotenv` report. 1. Trigger the downstream pipeline. -```yaml -build_vars: - stage: build - script: - - echo "BUILD_VERSION=hello" >> build.env - artifacts: - reports: - dotenv: build.env + ```yaml + build_vars: + stage: build + script: + - echo "BUILD_VERSION=hello" >> build.env + artifacts: + reports: + dotenv: build.env -deploy: - stage: deploy - trigger: my/downstream_project -``` + deploy: + stage: deploy + trigger: my/downstream_project + ``` -Set the `test` job in the downstream pipeline to inherit the variables from the `build_vars` -job in the upstream project with `needs:`. The `test` job inherits the variables in the -`dotenv` report and it can access `BUILD_VERSION` in the script: +1. Set the `test` job in the downstream pipeline to inherit the variables from the `build_vars` + job in the upstream project with `needs:`. The `test` job inherits the variables in the + `dotenv` report and it can access `BUILD_VERSION` in the script: -```yaml -test: - stage: test - script: - - echo $BUILD_VERSION - needs: - - project: my/upstream_project - job: build_vars - ref: master - artifacts: true -``` + ```yaml + test: + stage: test + script: + - echo $BUILD_VERSION + needs: + - project: my/upstream_project + job: build_vars + ref: master + artifacts: true + ``` #### Use `rules` or `only`/`except` with multi-project pipelines @@ -239,7 +245,7 @@ You can mirror the pipeline status from an upstream pipeline to a bridge job by using the `needs:pipeline` keyword. The latest pipeline status from the default branch is replicated to the bridge job. -Example: +For example: ```yaml upstream_bridge: @@ -261,7 +267,7 @@ outbound connections for upstream and downstream pipeline dependencies. When using: -- CI/CD Variables or [`rules`](yaml/README.md#rulesif) to control job behavior, the value of +- CI/CD variables or [`rules`](yaml/README.md#rulesif) to control job behavior, the value of the [`$CI_PIPELINE_SOURCE` predefined variable](variables/predefined_variables.md) is `pipeline` for multi-project pipeline triggered through the API with `CI_JOB_TOKEN`. - [`only/except`](yaml/README.md#only--except) to control job behavior, use the @@ -272,21 +278,28 @@ When using: > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9045) in GitLab Premium 12.8. You can trigger a pipeline in your project whenever a pipeline finishes for a new -tag in a different project: +tag in a different project. -1. Go to the project's **Settings > CI/CD** page, and expand the **Pipeline subscriptions** section. +Prerequisites: + +- The upstream project must be [public](../public_access/public_access.md). +- The user must have the [Developer role](../user/permissions.md#project-members-permissions) + in the upstream project. + +To trigger the pipeline when the upstream project is rebuilt: + +1. On the top bar, select **Menu > Projects** and find your project. +1. On the left sidebar, select **Settings > CI/CD** page. +1. Expand the **Pipeline subscriptions** section. 1. Enter the project you want to subscribe to, in the format `/`. For example, if the project is `https://gitlab.com/gitlab-org/gitlab`, use `gitlab-org/gitlab`. -1. Click subscribe. +1. Select **Subscribe**. Any pipelines that complete successfully for new tags in the subscribed project now trigger a pipeline on the current project's default branch. The maximum number of upstream pipeline subscriptions is 2 by default, for both the upstream and -downstream projects. This [application limit](../administration/instance_limits.md#number-of-cicd-subscriptions-to-a-project) can be changed on self-managed instances by a GitLab administrator. - -The upstream project needs to be [public](../public_access/public_access.md) -and the user must have the [developer role](../user/permissions.md#project-members-permissions) -in the upstream project. +downstream projects. On self-managed instances, an administrator can change this +[limit](../administration/instance_limits.md#number-of-cicd-subscriptions-to-a-project). ## Multi-project pipeline visualization **(PREMIUM)** @@ -295,7 +308,7 @@ When you configure GitLab CI/CD for your project, you can visualize the stages o ![Multi-project pipeline graph](img/multi_project_pipeline_graph.png) -In the Merge Request Widget, multi-project pipeline mini-graphs are displayed. +In the merge request, on the **Pipelines** tab, multi-project pipeline mini-graphs are displayed. They expand and are shown adjacent to each other when hovering (or tapping on touchscreen devices). ![Multi-project mini graph](img/multi_pipeline_mini_graph.gif) diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index 6997436b66e..48f735d3bcf 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -2368,7 +2368,7 @@ rspec: **Related topics**: -- See the [common `cache` use cases](../caching/index.md#common-use-cases) for more +- See the [common `cache` use cases](../caching/index.md#common-use-cases-for-caches) for more `cache:paths` examples. #### `cache:key` @@ -2414,10 +2414,10 @@ cache-job: **Related topics**: -- You can specify a [fallback cache key](../caching/index.md#fallback-cache-key) +- You can specify a [fallback cache key](../caching/index.md#use-a-fallback-cache-key) to use if the specified `cache:key` is not found. - You can [use multiple cache keys](../caching/index.md#use-multiple-caches) in a single job. -- See the [common `cache` use cases](../caching/index.md#common-use-cases) for more +- See the [common `cache` use cases](../caching/index.md#common-use-cases-for-caches) for more `cache:key` examples. ##### `cache:key:files` @@ -3561,13 +3561,13 @@ deploystacks: [vultr, data] Use `trigger` to define a downstream pipeline trigger. When GitLab starts a `trigger` job, a downstream pipeline is created. -Jobs with `trigger` can only use a [limited set of keywords](../multi_project_pipelines.md#create-multi-project-pipelines-in-your-gitlab-ciyml-file). +Jobs with `trigger` can only use a [limited set of keywords](../multi_project_pipelines.md#define-multi-project-pipelines-in-your-gitlab-ciyml-file). For example, you can't run commands with [`script`](#script), [`before_script`](#before_script), or [`after_script`](#after_script). You can use this keyword to create two different types of downstream pipelines: -- [Multi-project pipelines](../multi_project_pipelines.md#create-multi-project-pipelines-in-your-gitlab-ciyml-file) +- [Multi-project pipelines](../multi_project_pipelines.md#define-multi-project-pipelines-in-your-gitlab-ciyml-file) - [Child pipelines](../parent_child_pipelines.md) [In GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/issues/197140/) and later, you can