Commit d093ba78 authored by Marcel Amirault's avatar Marcel Amirault Committed by Suzanne Selhorn

Revamp CI/CD cache reference docs

parent 6bc3aace
...@@ -57,55 +57,69 @@ For runners to work with caches efficiently, you must do one of the following: ...@@ -57,55 +57,69 @@ For runners to work with caches efficiently, you must do one of the following:
- Use multiple runners that have - Use multiple runners that have
[distributed caching](https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-caching), [distributed caching](https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-caching),
where the cache is stored in S3 buckets. Shared runners on GitLab.com behave this way. These runners can be in autoscale mode, where the cache is stored in S3 buckets. Shared runners on GitLab.com behave this way. These runners can be in autoscale mode,
but they don't have to be. but they don't have to be.
- Use multiple runners with the same architecture and have these runners - Use multiple runners with the same architecture and have these runners
share a common network-mounted directory to store the cache. This directory should use NFS or something similar. share a common network-mounted directory to store the cache. This directory should use NFS or something similar.
These runners must be in autoscale mode. These runners must be in autoscale mode.
### Share caches between jobs in the same branch ## Use multiple caches
To have jobs for each branch use the same cache, define a cache with the `key: ${CI_COMMIT_REF_SLUG}`:
```yaml
cache:
key: ${CI_COMMIT_REF_SLUG}
```
This configuration prevents you from accidentally overwriting the cache. However, the > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32814) in GitLab 13.10.
first pipeline for a merge request is slow. The next time a commit is pushed to the branch, the > - [Feature Flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/321877), in GitLab 13.12.
cache is re-used and jobs run faster.
To enable per-job and per-branch caching: You can have a maximum of four caches:
```yaml ```yaml
cache: test-job:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" stage: build
cache:
- key:
files:
- Gemfile.lock
paths:
- vendor/ruby
- key:
files:
- yarn.lock
paths:
- .yarn-cache/
script:
- bundle install --path=vendor
- yarn install --cache-folder .yarn-cache
- echo Run tests...
``` ```
To enable per-stage and per-branch caching: If multiple caches are combined with a [Fallback cache key](#fallback-cache-key),
the fallback cache is fetched every time a cache is not found.
```yaml ## Fallback cache key
cache:
key: "$CI_JOB_STAGE-$CI_COMMIT_REF_SLUG"
```
### Share caches across jobs in different branches > [Introduced](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/1534) in GitLab Runner 13.4.
To share a cache across all branches and all jobs, use the same key for everything: 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`.
```yaml If a cache with this tag is not found, you can use `CACHE_FALLBACK_KEY` to
cache: specify a cache to use when none exists.
key: one-key-to-rule-them-all
```
To share caches between branches, but have a unique cache for each job: In the following example, if the `$CI_COMMIT_REF_SLUG` is not found, the job uses the key defined
by the `CACHE_FALLBACK_KEY` variable:
```yaml ```yaml
cache: variables:
key: ${CI_JOB_NAME} CACHE_FALLBACK_KEY: fallback-key
job1:
script:
- echo
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- binaries/
``` ```
### Disable cache for specific jobs ## Disable cache for specific jobs
If you have defined the cache globally, it means that each job uses the 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 same definition. You can override this behavior per-job, and if you want to
...@@ -116,7 +130,7 @@ job: ...@@ -116,7 +130,7 @@ job:
cache: {} cache: {}
``` ```
### Inherit global configuration, but override specific settings per job ## Inherit global configuration, but override specific settings per job
You can override cache settings without overwriting the global cache by using You can override cache settings without overwriting the global cache by using
[anchors](../yaml/README.md#anchors). For example, if you want to override the [anchors](../yaml/README.md#anchors). For example, if you want to override the
...@@ -124,7 +138,7 @@ You can override cache settings without overwriting the global cache by using ...@@ -124,7 +138,7 @@ You can override cache settings without overwriting the global cache by using
```yaml ```yaml
cache: &global_cache cache: &global_cache
key: ${CI_COMMIT_REF_SLUG} key: $CI_COMMIT_REF_SLUG
paths: paths:
- node_modules/ - node_modules/
- public/ - public/
...@@ -150,6 +164,49 @@ PHP packages, Ruby gems, Python libraries, and others can all be cached. ...@@ -150,6 +164,49 @@ PHP packages, Ruby gems, Python libraries, and others can all 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 more examples, check out our [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`:
```yaml
cache:
key: $CI_COMMIT_REF_SLUG
```
This configuration prevents you from accidentally overwriting the cache. However, the
first pipeline for a merge request is slow. The next time a commit is pushed to the branch, the
cache is re-used and jobs run faster.
To enable per-job and per-branch caching:
```yaml
cache:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
```
To enable per-stage and per-branch caching:
```yaml
cache:
key: "$CI_JOB_STAGE-$CI_COMMIT_REF_SLUG"
```
### Share caches across jobs in different branches
To share a cache across all branches and all jobs, use the same key for everything:
```yaml
cache:
key: one-key-to-rule-them-all
```
To share caches between branches, but have a unique cache for each job:
```yaml
cache:
key: $CI_JOB_NAME
```
### Cache Node.js dependencies ### Cache Node.js dependencies
If your project is using [npm](https://www.npmjs.com/) to install the Node.js If your project is using [npm](https://www.npmjs.com/) to install the Node.js
...@@ -166,7 +223,7 @@ image: node:latest ...@@ -166,7 +223,7 @@ image: node:latest
# Cache modules in between jobs # Cache modules in between jobs
cache: cache:
key: ${CI_COMMIT_REF_SLUG} key: $CI_COMMIT_REF_SLUG
paths: paths:
- .npm/ - .npm/
...@@ -193,7 +250,7 @@ image: php:7.2 ...@@ -193,7 +250,7 @@ image: php:7.2
# Cache libraries in between jobs # Cache libraries in between jobs
cache: cache:
key: ${CI_COMMIT_REF_SLUG} key: $CI_COMMIT_REF_SLUG
paths: paths:
- vendor/ - vendor/
...@@ -262,7 +319,7 @@ image: ruby:2.6 ...@@ -262,7 +319,7 @@ image: ruby:2.6
# Cache gems in between builds # Cache gems in between builds
cache: cache:
key: ${CI_COMMIT_REF_SLUG} key: $CI_COMMIT_REF_SLUG
paths: paths:
- vendor/ruby - vendor/ruby
...@@ -287,7 +344,7 @@ cache: ...@@ -287,7 +344,7 @@ cache:
key: key:
files: files:
- Gemfile.lock - Gemfile.lock
prefix: ${CI_JOB_NAME} prefix: $CI_JOB_NAME
paths: paths:
- vendor/ruby - vendor/ruby
......
...@@ -2351,250 +2351,215 @@ as Review Apps. You can see an example that uses Review Apps at ...@@ -2351,250 +2351,215 @@ as Review Apps. You can see an example that uses Review Apps at
Use `cache` to specify a list of files and directories to Use `cache` to specify a list of files and directories to
cache between jobs. You can only use paths that are in the local working copy. cache between jobs. You can only use paths that are in the local working copy.
If `cache` is defined outside the scope of jobs, it's set
globally and all jobs use that configuration.
Caching is shared between pipelines and jobs. Caches are restored before [artifacts](#artifacts). Caching is shared between pipelines and jobs. Caches are restored before [artifacts](#artifacts).
Read how caching works and find out some good practices in the Learn more about caches in [Caching in GitLab CI/CD](../caching/index.md).
[caching dependencies documentation](../caching/index.md).
#### `cache:paths` #### `cache:paths`
Use the `paths` directive to choose which files or directories to cache. Paths Use the `cache:paths` keyword to choose which files or directories to cache.
are relative to the project directory (`$CI_PROJECT_DIR`) and can't directly link outside it.
You can use Wildcards that use [glob](https://en.wikipedia.org/wiki/Glob_(programming)) **Keyword type**: Job-specific. You can use it only as part of a job.
patterns and:
**Possible inputs**: An array of paths relative to the project directory (`$CI_PROJECT_DIR`).
You can use wildcards that use [glob](https://en.wikipedia.org/wiki/Glob_(programming))
patterns:
- In [GitLab Runner 13.0](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2620) and later, - In [GitLab Runner 13.0](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2620) and later,
[`doublestar.Glob`](https://pkg.go.dev/github.com/bmatcuk/doublestar@v1.2.2?tab=doc#Match). [`doublestar.Glob`](https://pkg.go.dev/github.com/bmatcuk/doublestar@v1.2.2?tab=doc#Match).
- In GitLab Runner 12.10 and earlier, - In GitLab Runner 12.10 and earlier,
[`filepath.Match`](https://pkg.go.dev/path/filepath#Match). [`filepath.Match`](https://pkg.go.dev/path/filepath#Match).
**Example of `cache:paths`**:
Cache all files in `binaries` that end in `.apk` and the `.config` file: Cache all files in `binaries` that end in `.apk` and the `.config` file:
```yaml ```yaml
rspec: rspec:
script: test script:
- echo "This job uses a cache."
cache: cache:
key: binaries-cache
paths: paths:
- binaries/*.apk - binaries/*.apk
- .config - .config
``` ```
Locally defined cache overrides globally defined options. The following `rspec` **Related topics**:
job caches only `binaries/`:
```yaml
cache:
paths:
- my/files
rspec:
script: test
cache:
key: rspec
paths:
- binaries/
```
The cache is shared between jobs, so if you're using different - See the [common `cache` use cases](../caching/index.md#common-use-cases) for more
paths for different jobs, you should also set a different `cache:key`. `cache:paths` examples.
Otherwise cache content can be overwritten.
#### `cache:key` #### `cache:key`
The `key` keyword defines the affinity of caching between jobs. Use the `cache:key` keyword to give each cache a unique identifying key. All jobs
You can have a single cache for all jobs, cache per-job, cache per-branch, that use the same cache key use the same cache, including in different pipelines.
or any other way that fits your workflow. You can fine tune caching,
including caching data between different jobs or even different branches.
The `cache:key` variable can use any of the
[predefined variables](../variables/README.md). The default key, if not
set, is just literal `default`, which means everything is shared between
pipelines and jobs by default.
For example, to enable per-branch caching:
```yaml
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- binaries/
```
If you use **Windows Batch** to run your shell scripts you need to replace
`$` with `%`:
```yaml If not set, the default key is `default`. All jobs with the `cache:` keyword but
cache: no `cache:key` share the `default` cache.
key: "%CI_COMMIT_REF_SLUG%"
paths:
- binaries/
```
The `cache:key` variable can't contain the `/` character, or the equivalent **Keyword type**: Job-specific. You can use it only as part of a job.
URI-encoded `%2F`. A value made only of dots (`.`, `%2E`) is also forbidden.
You can specify a [fallback cache key](#fallback-cache-key) to use if the specified `cache:key` is not found.
##### Multiple caches **Possible inputs**:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32814) in GitLab 13.10. - A string.
> - [Feature Flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/321877), in GitLab 13.12. - A [predefined variables](../variables/README.md).
- A combination of both.
You can have a maximum of four caches: **Example of `cache:key`**:
```yaml ```yaml
test-job: cache-job:
stage: build
cache:
- key:
files:
- Gemfile.lock
paths:
- vendor/ruby
- key:
files:
- yarn.lock
paths:
- .yarn-cache/
script: script:
- bundle install --path=vendor - echo "This job uses a cache."
- yarn install --cache-folder .yarn-cache cache:
- echo Run tests... key: binaries-cache-$CI_COMMIT_REF_SLUG
paths:
- binaries/
``` ```
If multiple caches are combined with a [Fallback cache key](#fallback-cache-key), **Additional details**:
the fallback is fetched multiple times if multiple caches are not found.
#### 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` [variable](#variables) to specify your [`cache:key`](#cachekey). - If you use **Windows Batch** to run your shell scripts you need to replace
For example, if your `$CI_COMMIT_REF_SLUG` is `test` you can set a job `$` with `%`. For example: `key: %CI_COMMIT_REF_SLUG%`
to download cache that's tagged with `test`. - The `cache:key` value can't contain:
If a cache with this tag is not found, you can use `CACHE_FALLBACK_KEY` to - The `/` character, or the equivalent URI-encoded `%2F`.
specify a cache to use when none exists. - Only the `.` character (any number), or the equivalent URI-encoded `%2E`.
In the following example, if the `$CI_COMMIT_REF_SLUG` is not found, the job uses the key defined - The cache is shared between jobs, so if you're using different
by the `CACHE_FALLBACK_KEY` variable: paths for different jobs, you should also set a different `cache:key`.
Otherwise cache content can be overwritten.
```yaml **Related topics**:
variables:
CACHE_FALLBACK_KEY: fallback-key
cache: - You can specify a [fallback cache key](../caching/index.md#fallback-cache-key)
key: "$CI_COMMIT_REF_SLUG" to use if the specified `cache:key` is not found.
paths: - You can [use multiple cache keys](../caching/index.md#use-multiple-caches) in a single job.
- binaries/ - See the [common `cache` use cases](../caching/index.md#common-use-cases) for more
``` `cache:key` examples.
##### `cache:key:files` ##### `cache:key:files`
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18986) in GitLab v12.5. > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18986) in GitLab v12.5.
The `cache:key:files` keyword extends the `cache:key` functionality by making it easier Use the `cache:key:files` keyword to generate a new key when one or two specific files
to reuse some caches, and rebuild them less often, which speeds up subsequent pipeline change. `cache:key:files` lets you reuse some caches, and rebuild them less often,
runs. which speeds up subsequent pipeline runs.
When you include `cache:key:files`, you must also list the project files that are used to generate the key, up to a maximum of two files. **Keyword type**: Job-specific. You can use it only as part of a job.
The cache `key` is a SHA checksum computed from the most recent commits (up to two, if two files are listed)
that changed the given files. If neither file is changed in any commits, **Possible inputs**: An array of one or two file paths.
the fallback key is `default`.
**Example of `cache:key:files`**:
```yaml ```yaml
cache: cache-job:
key: script:
files: - echo "This job uses a cache."
- Gemfile.lock cache:
- package.json key:
paths: files:
- vendor/ruby - Gemfile.lock
- node_modules - package.json
paths:
- vendor/ruby
- node_modules
``` ```
This example creates a cache for Ruby and Node.js dependencies that This example creates a cache for Ruby and Node.js dependencies. The cache
is tied to current versions of the `Gemfile.lock` and `package.json` files. Whenever one of is tied to the current versions of the `Gemfile.lock` and `package.json` files. When one of
these files changes, a new cache key is computed and a new cache is created. Any future these files changes, a new cache key is computed and a new cache is created. Any future
job runs that use the same `Gemfile.lock` and `package.json` with `cache:key:files` job runs that use the same `Gemfile.lock` and `package.json` with `cache:key:files`
use the new cache, instead of rebuilding the dependencies. use the new cache, instead of rebuilding the dependencies.
**Additional details**: The cache `key` is a SHA computed from the most recent commits
that changed each listed file. If neither file is changed in any commits, the
fallback key is `default`.
##### `cache:key:prefix` ##### `cache:key:prefix`
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18986) in GitLab v12.5. > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18986) in GitLab v12.5.
When you want to combine a prefix with the SHA computed for `cache:key:files`, Use `cache:key:prefix` to combine a prefix with the SHA computed for [`cache:key:files`](#cachekeyfiles).
use the `prefix` keyword with `key:files`.
For example, if you add a `prefix` of `test`, the resulting key is: `test-feef9576d21ee9b6a32e30c5c79d0a0ceb68d1e5`.
If neither file is changed in any commits, the prefix is added to `default`, so the
key in the example would be `test-default`.
Like `cache:key`, `prefix` can use any of the [predefined variables](../variables/README.md), **Keyword type**: Job-specific. You can use it only as part of a job.
but cannot include:
- the `/` character (or the equivalent URI-encoded `%2F`) **Possible inputs**:
- a value made only of `.` (or the equivalent URI-encoded `%2E`)
```yaml - A string
cache: - A [predefined variables](../variables/README.md)
key: - A combination of both.
files:
- Gemfile.lock
prefix: ${CI_JOB_NAME}
paths:
- vendor/ruby
**Example of `cache:key:prefix`**:
```yaml
rspec: rspec:
script: script:
- bundle exec rspec - echo "This rspec job uses a cache."
cache:
key:
files:
- Gemfile.lock
prefix: $CI_JOB_NAME
paths:
- vendor/ruby
``` ```
For example, adding a `prefix` of `$CI_JOB_NAME` For example, adding a `prefix` of `$CI_JOB_NAME` causes the key to look like `rspec-feef9576d21ee9b6a32e30c5c79d0a0ceb68d1e5`.
causes the key to look like: `rspec-feef9576d21ee9b6a32e30c5c79d0a0ceb68d1e5` and If a branch changes `Gemfile.lock`, that branch has a new SHA checksum for `cache:key:files`.
the job cache is shared across different branches. If a branch changes A new cache key is generated, and a new cache is created for that key. If `Gemfile.lock`
`Gemfile.lock`, that branch has a new SHA checksum for `cache:key:files`. A new cache key is not found, the prefix is added to `default`, so the key in the example would be `rspec-default`.
is generated, and a new cache is created for that key.
If `Gemfile.lock` is not found, the prefix is added to **Additional details**: If no file in `cache:key:files` is changed in any commits,
`default`, so the key in the example would be `rspec-default`. the prefix is added to the `default` key.
#### `cache:untracked` #### `cache:untracked`
Set `untracked: true` to cache all files that are untracked in your Git Use `untracked: true` to cache all files that are untracked in your Git repository:
repository:
```yaml **Keyword type**: Job-specific. You can use it only as part of a job.
rspec:
script: test
cache:
untracked: true
```
Cache all Git untracked files and files in `binaries`: **Possible inputs**: `true` or `false` (default).
**Example of `cache:untracked`**:
```yaml ```yaml
rspec: rspec:
script: test script: test
cache: cache:
untracked: true untracked: true
paths:
- binaries/
``` ```
**Additional details**:
- You can combine `cache:untracked` with `cache:paths` to cache all untracked files
as well as files in the configured paths. For example:
```yaml
rspec:
script: test
cache:
untracked: true
paths:
- binaries/
```
#### `cache:when` #### `cache:when`
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18969) in GitLab 13.5 and GitLab Runner v13.5.0. > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18969) in GitLab 13.5 and GitLab Runner v13.5.0.
`cache:when` defines when to save the cache, based on the status of the job. You can Use `cache:when` to define when to save the cache, based on the status of the job.
set `cache:when` to:
**Keyword type**: Job-specific. You can use it only as part of a job.
**Possible inputs**:
- `on_success` (default): Save the cache only when the job succeeds. - `on_success` (default): Save the cache only when the job succeeds.
- `on_failure`: Save the cache only when the job fails. - `on_failure`: Save the cache only when the job fails.
- `always`: Always save the cache. - `always`: Always save the cache.
For example, to store a cache whether or not the job fails or succeeds: **Example of `cache:untracked`**:
```yaml ```yaml
rspec: rspec:
...@@ -2605,32 +2570,47 @@ rspec: ...@@ -2605,32 +2570,47 @@ rspec:
when: 'always' when: 'always'
``` ```
This example stores the cache whether or not the job fails or succeeds.
#### `cache:policy` #### `cache:policy`
The default behavior of a caching job is to download the files at the start of To change the upload and download behavior of a cache, use the `cache:policy` keyword.
execution, and to re-upload them at the end. Any changes made by the By default, the job downloads the cache when the job starts, and uploads changes
job are persisted for future runs. This behavior is known as the `pull-push` cache to the cache when the job ends. This is the `pull-push` policy (default).
policy.
If you know the job does not alter the cached files, you can skip the upload step To set a job to only download the cache when the job starts, but never upload changes
by setting `policy: pull` in the job specification. You can add an ordinary cache when the job finishes, use `cache:policy:pull`.
job at an earlier stage to ensure the cache is updated from time to time:
```yaml To set a job to only upload a cache when the job finishes, but never download the
stages: cache when the job starts, use `cache:policy:push`.
- setup
- test Use the `pull` policy when you have many jobs executing in parallel that use the same cache.
This policy speeds up job execution and reduces load on the cache server. You can
use a job with the `push` policy to build the cache.
**Keyword type**: Job-specific. You can use it only as part of a job.
**Possible inputs**:
- `pull`
- `push`
- `pull-push` (default)
prepare: **Example of `cache:policy`**:
stage: setup
```yaml
prepare-dependencies-job:
stage: build
cache: cache:
key: gems key: gems
paths: paths:
- vendor/bundle - vendor/bundle
policy: push
script: script:
- bundle install --deployment - echo "This job only downloads dependencies and builds the cache."
- echo "Downloading dependencies..."
rspec: faster-test-job:
stage: test stage: test
cache: cache:
key: gems key: gems
...@@ -2638,16 +2618,10 @@ rspec: ...@@ -2638,16 +2618,10 @@ rspec:
- vendor/bundle - vendor/bundle
policy: pull policy: pull
script: script:
- bundle exec rspec ... - echo "This job script uses the cache, but does not update it."
- echo "Running tests..."
``` ```
Use the `pull` policy when you have many jobs executing in parallel that use caches. This
policy speeds up job execution and reduces load on the cache server.
If you have a job that unconditionally recreates the cache without
referring to its previous contents, you can skip the download step.
To do so, add `policy: push` to the job.
### `artifacts` ### `artifacts`
Use `artifacts` to specify a list of files and directories that are Use `artifacts` to specify a list of files and directories that are
......
...@@ -559,7 +559,7 @@ request, be sure to start the `dont-interrupt-me` job before pushing. ...@@ -559,7 +559,7 @@ request, be sure to start the `dont-interrupt-me` job before pushing.
- `.qa-cache` - `.qa-cache`
- `.yarn-cache` - `.yarn-cache`
- `.assets-compile-cache` (the key includes `${NODE_ENV}` so it's actually two different caches). - `.assets-compile-cache` (the key includes `${NODE_ENV}` so it's actually two different caches).
1. These cache definitions are composed of [multiple atomic caches](../ci/yaml/README.md#multiple-caches). 1. These cache definitions are composed of [multiple atomic caches](../ci/caching/index.md#use-multiple-caches).
1. Only 6 specific jobs, running in 2-hourly scheduled pipelines, are pushing (i.e. updating) to the caches: 1. Only 6 specific jobs, running in 2-hourly scheduled pipelines, are pushing (i.e. updating) to the caches:
- `update-setup-test-env-cache`, defined in [`.gitlab/ci/rails.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/rails.gitlab-ci.yml). - `update-setup-test-env-cache`, defined in [`.gitlab/ci/rails.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/rails.gitlab-ci.yml).
- `update-gitaly-binaries-cache`, defined in [`.gitlab/ci/rails.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/rails.gitlab-ci.yml). - `update-gitaly-binaries-cache`, defined in [`.gitlab/ci/rails.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/rails.gitlab-ci.yml).
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment