Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'doc/user/project/releases/index.md')
-rw-r--r--doc/user/project/releases/index.md133
1 files changed, 67 insertions, 66 deletions
diff --git a/doc/user/project/releases/index.md b/doc/user/project/releases/index.md
index c0a6fa9c301..d5ddc0468e1 100644
--- a/doc/user/project/releases/index.md
+++ b/doc/user/project/releases/index.md
@@ -63,7 +63,7 @@ switch between ascending or descending order, select **Sort order**.
You can create a release:
-- [Using a job in your CI/CD pipeline](#create-a-release-by-using-a-cicd-job).
+- [Using a job in your CI/CD pipeline](#creating-a-release-by-using-a-cicd-job).
- [In the Releases page](#create-a-release-in-the-releases-page).
- [In the Tags page](#create-a-release-in-the-tags-page).
- Using the [Releases API](../../../api/releases/index.md#create-a-release).
@@ -118,100 +118,71 @@ To edit release notes of an existing Git tag:
You can use Markdown and drag and drop files to this text box.
1. Select **Save changes**.
-### Create a release by using a CI/CD job
+### Creating a release by using a CI/CD job
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/19298) in GitLab 12.7.
-
-You can create a release directly as part of the GitLab CI/CD pipeline
-by using the [`release` keyword](../../../ci/yaml/index.md#release) in the job definition.
+You can create a release directly as part of the GitLab CI/CD pipeline by using the
+[`release` keyword](../../../ci/yaml/index.md#release) in the job definition.
The release is created only if the job processes without error. If the API returns an error during
release creation, the release job fails.
-#### CI/CD example of the `release` keyword
+Methods for creating a release using a CI/CD job include:
+
+- Create a release when a Git tag is created.
+- Create a release when a commit is merged to the default branch.
+
+#### Create a release when a Git tag is created
-To create a release when you push a Git tag, or when you add a Git tag
-in the UI by going to **Repository > Tags**:
+In this CI/CD example, pushing a Git tag to the repository, or creating a Git tag in the UI triggers
+the release. You can use this method if you prefer to create the Git tag manually, and create a
+release as a result.
NOTE:
-Do not provide **Release notes** when you create the Git tag in the UI.
-Providing release notes creates a release, resulting in the pipeline failing.
+Do not provide Release notes when you create the Git tag in the UI. Providing release notes
+creates a release, resulting in the pipeline failing.
+
+Key points in the following _extract_ of an example `.gitlab-ci.yml` file:
+
+- The `rules` stanza defines when the job is added to the pipeline.
+- The Git tag is used in the release's name and description.
```yaml
release_job:
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
rules:
- - if: $CI_COMMIT_TAG # Run this job when a tag is created manually
+ - if: $CI_COMMIT_TAG # Run this job when a tag is created
script:
- echo "running release_job"
- release:
- name: 'Release $CI_COMMIT_TAG'
- description: 'Created using the release-cli $EXTRA_DESCRIPTION' # $EXTRA_DESCRIPTION must be defined
- tag_name: '$CI_COMMIT_TAG' # elsewhere in the pipeline.
- ref: '$CI_COMMIT_TAG'
- milestones:
- - 'm1'
- - 'm2'
- - 'm3'
- released_at: '2020-07-15T08:00:00Z' # Optional, is auto generated if not defined, or can use a variable.
- assets: # Optional, multiple asset links
- links:
- - name: 'asset1'
- url: 'https://example.com/assets/1'
- - name: 'asset2'
- url: 'https://example.com/assets/2'
- filepath: '/pretty/url/1' # optional
- link_type: 'other' # optional
+ release: # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties
+ tag_name: '$CI_COMMIT_TAG'
+ description: '$CI_COMMIT_TAG'
```
-To create a release automatically when commits are pushed or merged to the default branch,
-using a new Git tag that is defined with variables:
+#### Create a release when a commit is merged to the default branch
-```yaml
-prepare_job:
- stage: prepare # This stage must run before the release stage
- rules:
- - if: $CI_COMMIT_TAG
- when: never # Do not run this job when a tag is created manually
- - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch
- script:
- - echo "EXTRA_DESCRIPTION=some message" >> variables.env # Generate the EXTRA_DESCRIPTION and TAG environment variables
- - echo "TAG=v$(cat VERSION)" >> variables.env # and append to the variables.env file
- artifacts:
- reports:
- dotenv: variables.env # Use artifacts:reports:dotenv to expose the variables to other jobs
+In this CI/CD example, merging a commit to the default branch triggers the pipeline. You can use
+this method if your release workflow does not create a tag manually.
+Key points in the following _extract_ of an example `.gitlab-ci.yml` file:
+
+- The Git tag, description, and reference are created automatically in the pipeline.
+- If you manually create a tag, the `release_job` job does not run.
+
+```yaml
release_job:
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
- needs:
- - job: prepare_job
- artifacts: true
rules:
- if: $CI_COMMIT_TAG
when: never # Do not run this job when a tag is created manually
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch
script:
- echo "running release_job for $TAG"
- release:
- name: 'Release $TAG'
- description: 'Created using the release-cli $EXTRA_DESCRIPTION' # $EXTRA_DESCRIPTION and the $TAG
- tag_name: '$TAG' # variables must be defined elsewhere
- ref: '$CI_COMMIT_SHA' # in the pipeline. For example, in the
- milestones: # prepare_job
- - 'm1'
- - 'm2'
- - 'm3'
- released_at: '2020-07-15T08:00:00Z' # Optional, is auto generated if not defined, or can use a variable.
- assets:
- links:
- - name: 'asset1'
- url: 'https://example.com/assets/1'
- - name: 'asset2'
- url: 'https://example.com/assets/2'
- filepath: '/pretty/url/1' # optional
- link_type: 'other' # optional
+ release: # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties
+ tag_name: 'v0.$CI_PIPELINE_IID' # The version is incremented per pipeline.
+ description: 'v0.$CI_PIPELINE_IID'
+ ref: '$CI_COMMIT_SHA' # The tag is created from the pipeline SHA.
```
NOTE:
@@ -219,6 +190,36 @@ Environment variables set in `before_script` or `script` are not available for e
in the same job. Read more about
[potentially making variables available for expanding](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/6400).
+#### Skip multiple pipelines when creating a release
+
+Creating a release using a CI/CD job could potentially trigger multiple pipelines if the associated tag does not exist already. To understand how this might happen, consider the following workflows:
+
+- Tag first, release second:
+ 1. A tag is created via UI or pushed.
+ 1. A tag pipeline is triggered, and runs `release` job.
+ 1. A release is created.
+
+- Release first, tag second:
+ 1. A pipeline is triggered when commits are pushed or merged to default branch. The pipeline runs `release` job.
+ 1. A release is created.
+ 1. A tag is created.
+ 1. A tag pipeline is triggered. The pipeline also runs `release` job.
+
+In the second workflow, the `release` job runs in multiple pipelines. To prevent this, you can use the [`workflow:rules` keyword](../../../ci/yaml/index.md#workflowrules) to determine if a release job should run in a tag pipeline:
+
+```yaml
+release_job:
+ rules:
+ - if: $CI_COMMIT_TAG
+ when: never # Do not run this job in a tag pipeline
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch
+ script:
+ - echo "Create release"
+ release:
+ name: 'My awesome release'
+ tag_name: '$CI_COMMIT_TAG'
+```
+
### Use a custom SSL CA certificate authority
You can use the `ADDITIONAL_CA_CERT_BUNDLE` CI/CD variable to configure a custom SSL CA certificate authority,