InfoGrab Docs

릴리스 CI/CD 예시

요약

GitLab 릴리스 기능은 유연하며 워크플로우에 맞게 구성할 수 있습니다. 이 CI/CD 예시에서 릴리스는 다음 이벤트 중 하나에 의해 트리거됩니다: 이 방법은 Git 태그를 수동으로 만들고 결과적으로 릴리스를 만들고자 하는 경우 사용할 수 있습니다.

GitLab 릴리스 기능은 유연하며 워크플로우에 맞게 구성할 수 있습니다. 이 페이지에서는 CI/CD 릴리스 job의 예시를 제공합니다. 각 예시는 CI/CD 파이프라인에서 릴리스를 만드는 방법을 보여줍니다.

Git 태그가 생성될 때 릴리스 만들기#

이 CI/CD 예시에서 릴리스는 다음 이벤트 중 하나에 의해 트리거됩니다:

  • Git 태그를 리포지터리로 push.
  • UI에서 Git 태그 만들기.

이 방법은 Git 태그를 수동으로 만들고 결과적으로 릴리스를 만들고자 하는 경우 사용할 수 있습니다.

Note

UI에서 Git 태그를 만들 때 릴리스 노트를 제공하지 마세요. 릴리스 노트를 제공하면 릴리스가 만들어지고 파이프라인이 실패합니다.

.gitlab-ci.yml 파일의 예시 발췌에서 핵심 사항:

  • rules 스탠자는 job이 파이프라인에 추가되는 시기를 정의합니다.
  • Git 태그는 릴리스의 이름과 설명에 사용됩니다.
release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/cli:latest
  rules:
    - if: $CI_COMMIT_TAG                 # Run this job when a tag is created
  script:
    - echo "running release_job"
  release:                               # See https://docs.gitlab.com/ci/yaml/#release for available properties
    tag_name: '$CI_COMMIT_TAG'
    description: '$CI_COMMIT_TAG'

기본 브랜치에 커밋이 머지될 때 릴리스 만들기#

이 CI/CD 예시에서 릴리스는 기본 브랜치에 커밋을 머지할 때 트리거됩니다. 릴리스 워크플로우가 수동으로 태그를 만들지 않는 경우 이 방법을 사용할 수 있습니다.

.gitlab-ci.yml 파일의 예시 발췌에서 핵심 사항:

  • Git 태그, 설명, 참조는 파이프라인에서 자동으로 만들어집니다.
  • 수동으로 태그를 만들면 release_job job이 실행되지 않습니다.
release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/cli:latest
  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:                                         # See https://docs.gitlab.com/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

before_script 또는 script에서 설정된 환경 변수는 같은 job에서 확장할 수 없습니다. 변수를 확장 가능하게 만드는 잠재적인 방법에 대해 더 읽어보세요.

커스텀 스크립트에서 릴리스 메타데이터 만들기#

이 CI/CD 예시에서 릴리스 준비는 더 큰 유연성을 위해 별도의 job으로 분리됩니다:

  • prepare_job job은 릴리스 메타데이터를 생성합니다. 커스텀 이미지를 포함한 모든 이미지를 사용하여 job을 실행할 수 있습니다. 생성된 메타데이터는 변수 파일 variables.env에 저장됩니다. 이 메타데이터는 다운스트림 job으로 전달됩니다.
  • release_job은 변수 파일의 콘텐츠를 사용하여 변수 파일에 전달된 메타데이터를 사용하여 릴리스를 만듭니다. 이 job은 glab CLI가 포함된 registry.gitlab.com/gitlab-org/cli:latest 이미지를 사용해야 합니다.
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

release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/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 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

릴리스 만들 때 여러 파이프라인 건너뛰기#

CI/CD job을 사용하여 릴리스를 만들면 연관된 태그가 아직 존재하지 않는 경우 여러 파이프라인이 트리거될 수 있습니다. 이것이 어떻게 발생할 수 있는지 이해하려면 다음 워크플로우를 고려하세요:

  • 태그 먼저, 릴리스 나중:
    1. UI에서 태그가 만들어지거나 push됩니다.
    2. 태그 파이프라인이 트리거되어 release job이 실행됩니다.
    3. 릴리스가 만들어집니다.
  • 릴리스 먼저, 태그 나중:
    1. 커밋이 기본 브랜치로 push되거나 머지될 때 파이프라인이 트리거됩니다. 파이프라인은 release job을 실행합니다.
    2. 릴리스가 만들어집니다.
    3. 태그가 만들어집니다.
    4. 태그 파이프라인이 트리거됩니다. 파이프라인도 release job을 실행합니다.

두 번째 워크플로우에서 release job은 여러 파이프라인에서 실행됩니다. 이를 방지하려면 workflow:rules 키워드를 사용하여 릴리스 job이 태그 파이프라인에서 실행되어야 하는지 결정할 수 있습니다:

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'

릴리스 CI/CD 예시

원문 보기
요약

GitLab 릴리스 기능은 유연하며 워크플로우에 맞게 구성할 수 있습니다. 이 CI/CD 예시에서 릴리스는 다음 이벤트 중 하나에 의해 트리거됩니다: 이 방법은 Git 태그를 수동으로 만들고 결과적으로 릴리스를 만들고자 하는 경우 사용할 수 있습니다.

GitLab 릴리스 기능은 유연하며 워크플로우에 맞게 구성할 수 있습니다. 이 페이지에서는 CI/CD 릴리스 job의 예시를 제공합니다. 각 예시는 CI/CD 파이프라인에서 릴리스를 만드는 방법을 보여줍니다.

Git 태그가 생성될 때 릴리스 만들기#

이 CI/CD 예시에서 릴리스는 다음 이벤트 중 하나에 의해 트리거됩니다:

  • Git 태그를 리포지터리로 push.
  • UI에서 Git 태그 만들기.

이 방법은 Git 태그를 수동으로 만들고 결과적으로 릴리스를 만들고자 하는 경우 사용할 수 있습니다.

Note

UI에서 Git 태그를 만들 때 릴리스 노트를 제공하지 마세요. 릴리스 노트를 제공하면 릴리스가 만들어지고 파이프라인이 실패합니다.

.gitlab-ci.yml 파일의 예시 발췌에서 핵심 사항:

  • rules 스탠자는 job이 파이프라인에 추가되는 시기를 정의합니다.
  • Git 태그는 릴리스의 이름과 설명에 사용됩니다.
release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/cli:latest
  rules:
    - if: $CI_COMMIT_TAG                 # Run this job when a tag is created
  script:
    - echo "running release_job"
  release:                               # See https://docs.gitlab.com/ci/yaml/#release for available properties
    tag_name: '$CI_COMMIT_TAG'
    description: '$CI_COMMIT_TAG'

기본 브랜치에 커밋이 머지될 때 릴리스 만들기#

이 CI/CD 예시에서 릴리스는 기본 브랜치에 커밋을 머지할 때 트리거됩니다. 릴리스 워크플로우가 수동으로 태그를 만들지 않는 경우 이 방법을 사용할 수 있습니다.

.gitlab-ci.yml 파일의 예시 발췌에서 핵심 사항:

  • Git 태그, 설명, 참조는 파이프라인에서 자동으로 만들어집니다.
  • 수동으로 태그를 만들면 release_job job이 실행되지 않습니다.
release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/cli:latest
  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:                                         # See https://docs.gitlab.com/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

before_script 또는 script에서 설정된 환경 변수는 같은 job에서 확장할 수 없습니다. 변수를 확장 가능하게 만드는 잠재적인 방법에 대해 더 읽어보세요.

커스텀 스크립트에서 릴리스 메타데이터 만들기#

이 CI/CD 예시에서 릴리스 준비는 더 큰 유연성을 위해 별도의 job으로 분리됩니다:

  • prepare_job job은 릴리스 메타데이터를 생성합니다. 커스텀 이미지를 포함한 모든 이미지를 사용하여 job을 실행할 수 있습니다. 생성된 메타데이터는 변수 파일 variables.env에 저장됩니다. 이 메타데이터는 다운스트림 job으로 전달됩니다.
  • release_job은 변수 파일의 콘텐츠를 사용하여 변수 파일에 전달된 메타데이터를 사용하여 릴리스를 만듭니다. 이 job은 glab CLI가 포함된 registry.gitlab.com/gitlab-org/cli:latest 이미지를 사용해야 합니다.
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

release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/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 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

릴리스 만들 때 여러 파이프라인 건너뛰기#

CI/CD job을 사용하여 릴리스를 만들면 연관된 태그가 아직 존재하지 않는 경우 여러 파이프라인이 트리거될 수 있습니다. 이것이 어떻게 발생할 수 있는지 이해하려면 다음 워크플로우를 고려하세요:

  • 태그 먼저, 릴리스 나중:
    1. UI에서 태그가 만들어지거나 push됩니다.
    2. 태그 파이프라인이 트리거되어 release job이 실행됩니다.
    3. 릴리스가 만들어집니다.
  • 릴리스 먼저, 태그 나중:
    1. 커밋이 기본 브랜치로 push되거나 머지될 때 파이프라인이 트리거됩니다. 파이프라인은 release job을 실행합니다.
    2. 릴리스가 만들어집니다.
    3. 태그가 만들어집니다.
    4. 태그 파이프라인이 트리거됩니다. 파이프라인도 release job을 실행합니다.

두 번째 워크플로우에서 release job은 여러 파이프라인에서 실행됩니다. 이를 방지하려면 workflow:rules 키워드를 사용하여 릴리스 job이 태그 파이프라인에서 실행되어야 하는지 결정할 수 있습니다:

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'