今回はGitLab Releaseについて簡単に紹介します。
背景
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
の例を公開しており、今回はその中のある設定の一つを利用しました。
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-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を紐づけることが可能です。