TECHSTEP

ITインフラ関連の記事を公開してます。

GitLab Releaseの概要を紹介する

今回はGitLab Releaseについて簡単に紹介します。

docs.gitlab.com

背景

GitLab Releaseは、Projectで管理するソフトウェアのリリースをサポートする機能です。ある時点でのProject中のソースコードやインストールパッケージ、リリースノートなどを作成し、 Release というページを更新します。ソフトウェアのリリース情報はReleaseページにまとめられるため、利用者はページを見てソフトウェアのバージョン情報やパッケージを取得・利用します。

各Releaseにはソースコードやパッケージの他、Release evidenceというメタデータGitLab Milestoneというプロジェクト管理機能から該当のMilestoneを 紐づけることができます。Release evidenceにはリリースIDやリリース日時、Git tag、Milestoneに紐づくIssueなどの情報が含まれます。

ReleaseはGitLab画面から手動で作成するほか、GitLab CI/CDやReleases APIから作成できます。

検証

検証はGitLab SaaS版 (Freeプラン) で行いました。

GitLab CI/CDからReleaseを作成

まずはReleaseを作成するため、GitLab CI/CDを設定します。GitLabはReleaseを作成するための .gitlab-ci.yml の例を公開しており、今回はその中のある設定の一つを利用しました。

docs.gitlab.com

stages:
  - release

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
  script:
    - echo "running release_job"
  release:                               # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties
    tag_name: '$CI_COMMIT_TAG'
    description: '$CI_COMMIT_TAG'

なおここではrelease-cliというツールを使っていますが、将来的には以前紹介したglabを利用するよう移行する予定のようです。

gitlab.com

上記.gitlab-ci.ymlを作成後、適当なGit tagを作成してrelease_jobを起動します。

release_jobの起動と成功を確認します。

GitLabの画面左メニューからデプロイリリースと移動すると、作成したGit tagと同名のReleaseが作成されたのを確認できます。

なお、この時のRelease evidenceは以下の通りです。

{
  "release": {
    "id": 12224279,
    "name": "0.0.1",
    "project": {
      "id": 58512713,
      "name": "release-test",
      "created_at": "2024-06-04T23:12:58.445Z",
      "description": null
    },
    "tag_name": "0.0.1",
    "created_at": "2024-06-04T23:17:42.609Z",
    "milestones": [],
    "description": "0.0.1"
  }
}

次にGitLab画面から新しいReleaseを作成してみます。GitLabでは現在と異なる日時を指定してReleaseを作成することも可能です (未来の日時のものは Upcoming release 、過去のものは Historical release と呼んでいます) 。ここでは未来の日時を指定し、タグも 1.0.0 とします。

新しいReleaseが作成され、 次のリリース (=Upcoming release) というバッジが付与されているのを確認できます。

Releaseの修正

Releaseは作成後も修正が可能です。ここではMilestoneとの紐づけを行ってみます。あらかじめ適当なMilestoneを作成しておきます。

Releaseページに移動し、該当のReleaseの リリースを編集 を選択します。

編集画面からMilestoneを選択します。

Releaseが修正され、Milestoneが付与されました。

またReleaseの編集画面からはアセット (Release作成時とは別のドキュメント・バイナリなどを指す) を追加することもできます。ここでは試しにGitLabのドキュメントのURLを指定します。

Releaseが修正され、アセットに その他 としてGitLabドキュメントが追加されました。

Deploy freezeの有効化

GitLab Releaseには予期せぬタイミングでReleaseが作成されないよう Deploy freeze という機能が備わっています。これは、あらかじめFreeze Windowsというウィンドウを設定しておくと、ウィンドウの枠内でJobを実行したときに CI_DEPLOY_FREEZE という変数が作成されます。この変数が存在するときはRelease Jobを失敗するよう設定することで、想定外の時間にReleaseが作成されるのを防ぎます。

Freeze WindowsはGitLabの画面左メニューから 設定CI/CD と移動し、デプロイフリーズ という項目から設定できます。

設定は日時 (Cron形式で指定) とタイムゾーンの指定を行います。

作成後は以下のように表示されます。

次に .gitlab-ci.yml を修正します。Deploy freezeを利用したJobの設定はこちらにも例が記載されています

stages:
  - release

.freezedeployment:
  stage: release
  before_script:
    - '[[ ! -z "$CI_DEPLOY_FREEZE" ]] && echo "INFRASTRUCTURE OUTAGE WINDOW" && exit 1; '
  rules:
    - if: $CI_COMMIT_TAG

release_job:
  extends: .freezedeployment
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  script:
    - echo "running release_job"
  release:                               
    tag_name: '$CI_COMMIT_TAG'
    description: '$CI_COMMIT_TAG'

テスト用に新しいGit tagを作成し、Jobを起動します。

Jobのログを見ると INFRASTRUCTURE OUTAGE WINDOW という文字列が出力されており、Releaseの作成に失敗したことを確認できます。

その他

GitLabのPremium / Ultimateプランでは以下の機能も利用できます。

  • Release metrics (Ultimateプラン): Releaseに関するGroupレベルのmetricsを利用でき、Group内のReleaseの合計数や、最低1つのReleaseを含むProjectの割合などを取得できます。
  • Group milestone: ReleaseとMilestoneを紐づける際、Groupレベルで設定したMilestoneを紐づけることが可能です。