GitLab実践ハンズオン: Issue → MR → Release を体験する
前提バージョン: GitLab 19.0以上 / 必要プラン: Ultimate
この文書は、新しくグループを1つ作り、その下に小さなプロジェクトを1つ実際に作り、Issue作成からMR、マージ、タグ、Releaseまでの一連の流れを実際に手を動かして体験する構成になっています。上から順番に進めてください。
イシュー参照の必須化にはネイティブな「MRタイトル検証」機能(Premium以上)を、Secret Detectionの検知結果の一元管理にはVulnerability Report(Ultimate専用)を使います。本チュートリアルはUltimateプランを前提とします。
1. ゴールとプラン早見表
このハンズオンを最後まで実施すると、以下のワークフローが体験・確認できます。
- 新しく グループ を作り、その下にプロジェクトを作る
- 大きな単位の計画は Epic で作り、Roadmap でタイムライン表示を確認する
- コードを変更する前に、必ず イシュー を作成する(Scoped Label でイシューの種別を分類し、イシューボード のアサインリストで着手状況を追跡する)
- イシューに紐づく ブランチ で作業する
- 変更は必ず マージリクエスト(MR) 経由で提出する
- MRには必ず対象イシューへの参照が含まれていないと、mainへのマージがブロックされる
- MRの変更は Secret Detection で自動スキャンされ、検知結果を Vulnerability Report でトリアージする
-
mainブランチへの直接プッシュは一切できない -
mainへのマージ後、タグ付けは手動で行い、GitLab Release作成(Changelogの自動生成を含む)はCIジョブで自動化する
必要な権限: グループの Owner、プロジェクトの Maintainer または Owner ロール
以下は、実際の手順の順番に並べたプラン早見表です。
| 機能 | 対応する手順 |
|---|---|
| グループ作成 | 3-1 |
Scoped Label(key::value形式、イシュー種別の分類用) |
4-1 |
| イシューボード(Assigneeリスト) | 4-2 |
| Epic / Roadmap | 7(手順1〜2) |
| イシュー/MRテンプレート | 5-1, 5-2 |
| Secret Detection(パイプライン診断) | 5-3 |
| GitLab Releases(タグpushでCIジョブが自動作成) | 5-4, 7 |
| Changelog API(リリースノートの自動生成) | 5-4, 9-1 |
| Protected branches(ロールベースの保護) | 6-1 |
| Protected branches(ユーザー/グループ単位の指定) | 6-1(任意) |
| MRタイトルテンプレート | 6-2 |
| MRタイトル検証(正規表現でブロック) | 6-3 |
| Protected tags(ロールベース) | 6-4, 補足 |
| Protected tags(ユーザー/グループ単位) | 補足 |
| Secret Detectionの結果をVulnerability Reportで管理 | 7 |
| Push rules(コミットメッセージ正規表現) | 補足で言及 |
| Merge request承認ルール(必須承認・Code Owners) | 補足で言及 |
このチュートリアルで使う機能はすべてUltimateプランに含まれています。
2. 最初に確認すること
- GitLabのアカウントを持っていること(
https://gitlab.com、または会社・学校のGitLabインスタンス) - 新しくグループを作成できること(セクション3-1で作成します)。作成後、そのグループにUltimateプランを適用できること(トライアルで構いません)
- グループを作成できるロール(通常は誰でも作成可能)、または既存グループでの Owner ロールを持っていること
Ultimateの契約がまだない場合は、無料トライアル(30日間)でも本チュートリアルの内容は一通り試せます。
3. グループとプロジェクトを作る
Epic・Roadmap・グループレベルのラベルをこのハンズオンで使うため、新しくグループを1つ作るところから始めます。
3-1. グループを作る
- Create group または Create Sub groupを選択します。
-
Group name に
hello-gitlab-groupのような分かりやすい名前を入力します(URLも自動で決まります)。 -
Visibility Level はお好みで(
Private推奨)。 - 画面下部の Create group ボタンを選択します。
- 作成したグループにUltimateプランが適用されていることを確認します(トライアルの場合は
Settings > Billingから開始できます)。
3-2. グループの下にプロジェクトを作る
- 画面右上の 「+」アイコン(Create new) を選択し、New project/repository を選択します。
- Create blank project を選択します。
-
Project name に
hello-gitlabのような分かりやすい名前を入力します。 - Project URL の左側にあるプルダウンから、3-1で作ったグループを選びます。
-
Visibility Level はお好みで(
Private推奨)。 -
Initialize repository with a README のチェックボックスに必ずチェックを入れます。これを忘れると
mainブランチが存在せず、後の手順(ブランチ保護など)が行えません。 - 画面下部の Create project ボタンを選択します。
これで、README.mdだけが入った小さなプロジェクトができました。これから、このプロジェクトに実際に機能を1つ追加する体験をしていきます。
4. ラベルとイシューボードを作る
4-1. イシュー種別のScoped Labelを作る
key::value 形式のラベル(Scoped Label)を使うと、同じスコープ内のラベルは同時に付けられなくなります(例: type::bug を付けると type::doc は自動的に外れる)。ここでは進行状況の追跡には使わず、イシューの種別を分類するためだけに使います。厳密な運用ルールは設けず、作成時に当てはまるものを1つ、とりあえず付けておく程度でかまいません。
- 画面上部の
Search or go toで、3-1で作ったグループを開きます。 - グループの
Manage > Labelsを開き、New labelを選択します。 -
Titleにtype::bugと入力し、色を選んでCreate labelを選択します。 - 同じ手順で
type::doc、type::featureも作成します。
ポイント:
- ここでラベルをプロジェクトではなくグループに作っているのには理由があります。
- セクション7で、プロジェクトのイシューにラベルを付けようとすると、ここで作った
type::*がプロジェクト側で何も設定しなくても選択肢に表示されます。グループのラベルは配下のすべてのプロジェクトに自動的に「降ってくる」ためです。- 実際にその様子はセクション7の手順2で確認します。
4-2. イシューボードにアサインリストを作る
進行状況の追跡には、Assigneeリスト(特定のユーザーにアサインされたイシューを表示するリスト)を使います。カードをこのリストにドラッグするだけでイシューが自分にアサインされます。
- プロジェクトの
Plan > Issue boardsを開きます。 -
New listを選択します。 - リストタイプで
Assigneeを選び、ドロップダウンから自分自身を選択してAdd to boardを選択します。 - 新しいリストが
OpenとClosedの間に追加されます(両端のOpen・Closedは常に固定されます)。
デフォルトの Open リストはそのまま残します。イシュー作成時はOpenリストに入り、着手を宣言するタイミングで自分のアサインリストへドラッグする、という流れになります。
5. 最初に必要なファイルを追加する
プロジェクトを保護する前に、必要なファイルを先に追加しておきます(保護後だとファイル追加自体がMR経由になり手間が増えるため)。
ファイルの追加方法: プロジェクトのトップページで、ファイル一覧の近くにある 「+」アイコン → New file を選択し、パスとファイル内容を入力して、下部の Commit changes でmainに直接コミットします。
5-1. イシューテンプレート
.gitlab/issue_templates/Default.md を作成します。
## 概要
<!-- 何を実施したいか、なぜ必要かを記述してください -->
## 完了条件
- [ ]
- [ ]
## 関連情報
<!-- 参考リンクやスクリーンショットなど -->
これで、以降 New issue 作成時に自動でこのテンプレートが適用されます。ラベルの/labelクイックアクションは入れていません。4-1で作ったtype::bug / type::doc / type::featureは種別分類用なので、当てはまるものがあればイシュー作成後に手動で1つ付けておく程度で十分です(必須ではありません)。
5-2. MRの説明文テンプレート
.gitlab/merge_request_templates/Default.md を作成します。
## 関連イシュー
Closes #
## 変更内容
## 動作確認方法
Closes #123 のように書くと、MRがマージされた際に対象イシューが自動でクローズされる副次効果もあります。
5-3. .gitlab-ci.yml(Secret Detection用)
コミットに紛れ込んだAPIキーやトークンなどを検知する Pipeline secret detection を追加します。
variables:
AST_ENABLE_MR_PIPELINES: "true"
include:
- template: Jobs/Secret-Detection.gitlab-ci.yml
AST_ENABLE_MR_PIPELINESは、後でセクション7で作るMRのパイプラインとしてこのジョブを確実に実行させるための変数です。これだけで、以降のパイプラインに secret_detection というジョブが追加され、push・MR作成のたびに自動でスキャンされます。
includeは、GitLabが公式に用意・保守しているテンプレート(ジョブ定義一式)を、自分の.gitlab-ci.ymlに取り込む機能です。ジョブの中身(イメージやスクリプト)を自分で書かずに再利用できるのが利点で、実際に実行される際は、この1行が展開されてsecret_detectionジョブの完全な定義(イメージ指定・スクリプトなど)に置き換わった状態でパイプラインが動きます。
Ultimateプランでは、検知結果はパイプラインの成果物(
gl-secret-detection-report.json)としてダウンロードできるだけでなく、MRのReportsタブやSecure > Vulnerability reportにも表示され、一元管理できます(セクション7で実際に確認します)。初めて有効化した場合、今回のスキャンでは既存のコミット履歴は対象外(現在のツリー状態のみ)です。過去のコミットも含めて検査したい場合は、
Build > Pipelines > New pipelineから、変数SECRET_DETECTION_HISTORIC_SCANをtrueにして1回だけ実行してください。
このファイルをコミットすると、mainブランチで最初のパイプラインが走ります。Build > Jobs を開いてsecret_detectionジョブのログを確認すると、no leaks foundと表示されているはずです(セクション7で、実際に漏えいを検知させる体験をします)。
5-4. .gitlab-ci.yml(Release自動作成用)
タグがpushされたら、Changelog APIで生成したリリースノートを添えて、GitLab Releaseを自動作成するジョブを追加します。5-3のファイルに以下を追記してください。
stages:
- test
- release
create-release:
stage: release
image: registry.gitlab.com/gitlab-org/cli:latest
rules:
- if: '$CI_COMMIT_TAG'
before_script:
- apk add --no-cache curl jq git
- git fetch --tags
script:
- |
PREV_TAG=$(git tag --sort=-v:refname | sed -n '2p')
if [ -n "$PREV_TAG" ]; then
FROM_REF="$PREV_TAG"
else
FROM_REF=$(git rev-list --max-parents=0 HEAD | tail -n 1)
fi
echo "PREV_TAG=${PREV_TAG:-(none)}"
echo "FROM_REF=${FROM_REF}"
echo "--- commits in range ${FROM_REF}..HEAD ---"
git log --oneline "${FROM_REF}..HEAD"
RESPONSE=$(curl --silent --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
--get \
--data-urlencode "version=${CI_COMMIT_TAG}" \
--data-urlencode "from=${FROM_REF}" \
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/repository/changelog")
echo "--- raw API response ---"
echo "$RESPONSE"
NOTES=$(echo "$RESPONSE" | jq -r '.notes')
if [ -z "$NOTES" ] || [ "$NOTES" = "null" ]; then
echo "Changelog APIから内容を取得できませんでした(対象コミットにtrailerが無いか、API呼び出しに失敗しています)。" > release_notes.md
else
echo "$NOTES" > release_notes.md
fi
release:
tag_name: '$CI_COMMIT_TAG'
name: 'Release $CI_COMMIT_TAG'
description: './release_notes.md'
stagesを明示的に宣言しているのは、releaseステージがGitLabの既定のステージ一覧に含まれていないためです(secret_detectionジョブが使うtestステージは既定に含まれているので、そのまま動きます)。
このジョブは、GitLabのChangelog APIをGETで呼び出して(リポジトリを変更しない読み取り専用の呼び出しです)、直前のタグからの変更点をカテゴリ別にまとめたテキストを取得し、そのままReleaseの説明文として使います。対象になるのは、9-1で説明する形式のコミットだけです。
なぜ
fromを毎回明示的に指定するのか:
- Changelog APIは、
fromを省略すると「直前のバージョンタグ」を自動的に探します。- しかし、最初のリリース(直前タグが存在しない場合)に
fromを省略するとAPIがエラーを返します。- このエラーレスポンスには
notesフィールドが無いため、jq -r '.notes'が文字列"null"を出力し、それがそのままリリースの説明文になってしまいます。- これを避けるため、直前のタグが無い場合はリポジトリの最初のコミット(
git rev-list --max-parents=0 HEAD)をfromとして明示的に渡しています。
6. 画面設定
6-1. main ブランチを保護する
-
対象プロジェクトを開く
-
左サイドバーから
Settings > Repositoryを選択 -
Branch rulesセクションを展開 -
mainブランチを選択 -
以下のように設定する
項目 設定値 Allowed to merge Developers + Maintainers Allowed to push and merge No one -
Save changesをクリック
これで、Developer・Maintainerロールのユーザーであってもmainへの直接プッシュができなくなり、必ずMRを作成してマージする必要があります。
ポイント: 「Allowed to push and merge」を明示的に「No one」に設定しないと、直接プッシュ自体は制限されません。デフォルトのままにしないよう注意してください。
6-2. MRタイトルテンプレートを設定する
-
Settings > Merge requestsを開く -
Merge request title templateの欄に以下のように入力
Resolve #%{issue_id} "%{issue_title}"
Save changes
イシューの詳細画面から「Create merge request」を選択すると、ブランチ名とMRタイトルが自動生成されます。タイトルは Resolve #123 "READMEにセットアップ手順を追記" のような形式で埋まります。
%{issue_id}が空になってしまう場合:
- この変数は、ブランチ名がイシュー番号を含む形式(例:
123-readme)になっているときだけ値が入ります。- ブランチをゼロから手動で作った場合は空欄になることがあります。
- 必ずイシューの詳細画面にある「Create merge request」ボタンから作成してください(セクション7の手順4で実際に行います)。このボタンから進むと、ポップアップでブランチが作られた直後に、そのブランチ名を引き継いだMR作成画面に遷移します。
これはあくまで「デフォルト値」であり、それ自体には強制力はありません。次の6-3で実際にブロックする仕組みを作ります。
6-3. MRにイシュー参照がなければマージをブロックする
ここが今回のワークフローの核心です。MRのタイトルを正規表現でチェックし、パターンに一致しないと物理的にマージボタンが押せなくなる、ネイティブの「MRタイトル検証」機能を使います。
-
Settings > Merge requestsを開く -
タイトルは指定されたパターンに一致する必要がありますチェックボックスをオンにすると、Title patternとTitle exampleの入力欄が表示されます -
Title patternに正規表現を入力^(Draft: )?.*#\d+.* -
Title exampleに、期待するタイトルの例を入力(例:Resolve #123 "READMEにセットアップ手順を追記") -
Save changes
これで、タイトルにイシュー番号を含まないMRは、マージリクエストのマージチェック欄に検証失敗が表示され、マージボタンがブロックされます。6-2の「MRタイトルテンプレート」と組み合わせれば、ユーザーが何もしなくても最初からパターンを満たしたタイトルになるため、実質的に運用の手間はほぼゼロになります。
正規表現はRE2構文です。PCRE(多くのオンライン正規表現テスターで使われる構文)とは一部異なるので、後読み(lookahead)や後方参照は使えません。
このタイトル検証はMRのタイトルのみを対象とし、説明文(description)は見ません。「Closes #123」を説明文だけに書く運用にしていると、タイトル検証と食い違うので、6-2のタイトルテンプレートと必ずセットで使ってください。
6-4. タグを保護しておく(推奨)
- 対象プロジェクトを開く
- 左サイドバーから
Settings > Repositoryを選択 -
Protected tagsセクションを展開 -
Add newを選択 -
Tagを選択し、入力欄に*(すべてのタグにマッチするワイルドカード)を入力 -
Create wildcardを選択 -
Allowed to createでMaintainersを選択 -
Protectを選択
これで、タグの作成をMaintainer以上に限定でき、意図しないタグが誰でも作成できてしまう事態を防げます。
7. 実際に体験する: Issue → MR → Release
ここまでの設定ができたら、実際に一連の流れを体験してみましょう。「READMEにセットアップ手順を追記する」という架空の変更を例にします。
手順1: Epicを作る
- 画面上部の
Search or go toで、3-1で作ったグループを選びます。 - 左サイドバーの
Plan > Work itemsを選択します。 -
New itemを選択します。 -
TypeドロップダウンからEpicを選択します。 -
TitleにREADMEドキュメント整備のような分かりやすい名前を入力します。 -
Labelsを開き、4-1で作ったtype::docを選択します(README更新の計画なので)。 -
Start dateを開き、Fixed(固定)を選択して今日から3日前の日付を入力します。 -
Due dateにも同様に、Fixedを選択して今日から7日後の日付を入力します。 -
Create epicを選択します。 - 作成後、左サイドバーの
Plan > Roadmapを開きます。 - デフォルトの表示設定(
Weeksプリセット)のまま、作成したEpicのバーが「今日」を示す赤い縦線を跨いで表示されていることを確認します。 - この画面はガントチャート形式で、期間を横棒(バー)として表示するため、WBS(作業分解構成図)のような見え方になっていることを確認してください。
手順2: イシューを作成する(Epicから)
- 手順1で開いたRoadmap画面から、作成したEpicのバーまたはタイトルを選択して、Epicの詳細画面を開きます。
-
Child itemsセクションのAddを選択します。 -
Add a new issueを選びます。 -
TitleにREADMEにセットアップ手順を追記と入力します。 -
Projectのドロップダウンから3-2で作ったプロジェクトを選びます。 -
Create issueを選択します。作成されたイシューは自動的にこのEpicの子アイテムになります。 -
Child itemsの一覧に追加されたイシューを選択して詳細画面を開きます。5-1のイシューテンプレートが自動適用されていることを確認できます。 - 右サイドバーの
LabelsからEditを選択し、ラベル選択画面を開きます。プロジェクト側では何も設定していないのに、4-1でグループに作ったtype::bug・type::doc・type::featureがそのまま選択肢に表示されていることを確認します(グループラベルがプロジェクトに「降ってきている」体験です)。 -
type::docを選んで付けておきます(必須ではありません)。
手順3: 着手を宣言する(ボードでカードを移動する)
- プロジェクトの
Plan > Issue boardsを開きます。 - 手順2で作成したイシューは、ボード上ではまだ
Openリストに表示されています(Epicの子アイテムであることはボードのリスト分けには影響しません)。 - このカードを
Openのリストから4-2で作った自分のAssigneeリストへドラッグします。これでイシューが自分にアサインされ、着手したことがチームに分かるようになります。
手順4: ブランチを作成する
- イシューの詳細画面で
Create merge requestを選択します。 - ポップアップが表示され、作成するフィーチャーブランチの名前(例:
1-readme)を確認・編集できます。 - ポップアップ内の
Create merge requestボタンを選択します。この操作をした瞬間に、初めてフィーチャーブランチが作られます(それまではブランチはまだ存在しません)。
手順5: MRを作成する
- ブランチ作成後、MRタイトルが6-2のテンプレートに従って自動で埋まった状態の、まだ中身が空のMR作成画面に遷移します。説明文には5-2のテンプレートが入っています。
-
プロジェクトにMR説明文テンプレート(5-2)が設定されている場合、
Closes #の後ろにイシュー番号は自動で入りません(テンプレートが無ければブランチ名から自動挿入されますが、テンプレートがあるとその挙動が上書きされます)。 - 説明文の
Closes #の行を見つけ、#の後ろに手動で対象イシューの番号(例:Closes #1)を書き加えます。 - 画面下部の
Create merge requestを選択してMRを作成します。
手順6: ファイルを編集する
-
画面左上のブランチ選択は、MRを作成した時点で対象のフィーチャーブランチ(例:
1-readme)に自動で切り替わっています。 -
画面右上の
Code→Web IDEで開くを選びます。 -
README.mdを開いて編集します。適当な1行(例:## セットアップ手順の見出しと簡単な説明)を追記します。 -
さらに、Secret Detectionの動作を実際に確認するため、以下の1行も追記します(ハイフンの前後のスペースを削除して、個人アクセストークンの見た目に合わせます)。
glpat - 12345678901234567890
手順7: コミットする
-
左側のアクティビティバーで
Source Controlアイコンを選択します(またはCtrl+Shift+G / Control+Shift+G)。 -
コミットメッセージの入力欄に、次のように1行目にタイトル、1行空けてから
Changelog: addedを入力します(9-1で詳しく説明します)。READMEにセットアップ手順を追記 Changelog: added -
ブランチは手順4で作られたフィーチャーブランチが選択された状態のままなので、そのまま
Commitを選択します(新しいブランチを作る必要はありません)。すでにMRが存在するため、このコミットは自動的に手順5のMRに追加されます。
手順8: 検知結果を確認する
- MRの詳細画面で
Reportsタブを開きます。 -
Security scanを選択し、「Secret detection detected 1 new potential vulnerability」のように表示されていることを確認します(View all pipeline findingsで詳細一覧も見られます)。 -
Build > Jobsからsecret_detectionジョブのログを開き、leaks found: 1と表示されていることを確認します。 -
Job artifactsから成果物をダウンロードすると、検知されたシークレットの種類(GitLab personal access token)、重大度(Critical)、ファイル内の行番号などの詳細も確認できます。
手順9: マージチェックを確認する
- イシューから作成したMRは初期状態で
Draftになっているため、まず画面上部のMark as ready(準備済みとしてマーク)を選択してDraft状態を解除します。 - マージチェック欄にタイトル検証の結果が表示され、問題なければ緑色になっていることを確認します。
- Secret Detectionの検知結果はマージ自体をブロックしません(検知はあくまで警告で、マージ判断は人が行う設計です)。
手順10: マージする
-
Mergeボタンを選択します。 - MR説明文の
Closes #パターンにより、対象イシューも自動でクローズされることを確認します。 - 手順6の偽のシークレットが
mainにマージされたことで、この「finding」は「vulnerability」に変わります。
手順11: 脆弱性を確認する
- 左サイドバーの
Secure > Vulnerability reportを開きます。 - 手順8で検知された脆弱性(Secret type:
GitLab personal access token)を選択します。 -
Descriptionから詳細(シークレットの種類、対処方法、検知日時・場所)を確認します。
手順12: ステータスを変更する(トリアージ)
- 脆弱性の一覧で、ステータスの選択肢(
トリアージが必要・確認済み・却下済み・解決済み)から却下済みを選びます。 -
却下理由を選択のドロップダウンからテストで使用を選びます。 -
コメントを追加(必須)に「デモ用の偽のトークンのため」のような理由を記入します。 - Vulnerability Reportのトップ画面から、この脆弱性が表示されなくなることを確認します。トリアージはあくまで「今は対応不要」という記録であり、コード自体は変わりません。
- きれいにしておきたい場合は、新しいイシューを1つ作り(例:
README.mdの偽トークンを削除)、手順2〜10と同じ手順(Create merge request → 編集 → コミット → マージ)でglpat - ...の行を削除してください。本物の漏えいが起きた場合は、トリアージや削除だけでなく、該当のトークンを直ちに無効化(revoke)する必要があります。 Gitの履歴には削除前のコミットが残るため、削除だけでは漏えいのリスクが完全には消えません。
手順13: タグを作成する
- 左サイドバーの
Code(またはRepository) →Tagsを開きます。 -
New tagを選択します。 -
Tag nameにv0.1.0のようなバージョン番号を入力し、Create fromはmainのままにします。 -
Release notesは空欄のままにしてください(5-4のCIジョブが自動生成するため、ここで書いた内容とは別にReleaseが作られて重複してしまいます)。 -
Create tagを選択します。
手順14: Releaseを確認する
- タグのpushをトリガーにパイプラインが走ります。
-
Build > Jobsでcreate-releaseジョブが成功していることを確認します。 - 左サイドバーの
Deploy > Releasesを開きます。 - 手順7でtrailerを付けたコミットの内容が、リリースノートとして自動的に反映されていることを確認します。
これで、Issue作成からReleaseまでの一連の流れを一通り体験できました。
9. バージョン番号の決め方(参考)
タグを作るたびに毎回悩まないよう、目安を決めておきます。
- patch(例: v1.2.0 → v1.2.1): バグ修正のみ
- minor(例: v1.2.1 → v1.3.0): 後方互換性のある新機能追加
- major(例: v1.3.0 → v2.0.0): 後方互換性を壊す変更
9-1. コミットメッセージにtrailerを付ける
リリースノートを自動生成するには、コミットメッセージの末尾に専用のGit trailerを1行加えます。
READMEにセットアップ手順を追記
Changelog: added
なぜ
Changelog: addedという文字列なのか:
- これはGitLab独自の記法ではなく、Gitの世界で昔から使われている「trailer」という標準的な仕組みに乗っかったものです。
- コミットメッセージの末尾に
Key: Valueの行を1つ追加する書き方で、Signed-off-by: 名前 <email>やCo-authored-by: 名前 <email>と同じ仲間です(Gitにはgit interpret-trailersというtrailerを扱う専用コマンドもあります)。- コミットの1行目(subject)の書き方を変える必要がないのが利点です。
- 5-4のジョブが呼び出すChangelog APIは、この
Changelogというキー名を(デフォルトの設定として)探しに来ます。- 値の
added/fixed/changed/removed/securityという語彙も、GitLabの独自発明ではなく、OSSでよく使われるKeep a Changelogという慣習の分類(Added/Changed/Removed/Fixed/Securityなど)をほぼそのまま使っています。
使えるカテゴリは主に added / fixed / changed / removed / security です。このtrailerが付いたコミットだけが、5-4のcreate-releaseジョブが呼び出すChangelog APIの対象になります(trailerがないコミットは無視されます)。
出力フォーマットをカスタマイズしたい場合は、.gitlab/changelog_config.ymlというデフォルトの設定ファイルを作成し、日付フォーマットやテンプレートを定義できます。
Dockerイメージやビルド成果物をパッケージレジストリに公開している場合は、パッケージバージョンとリリースタグが一致していれば、GitLabが自動でそのパッケージをリリースエビデンスに含めてくれます。追加の設定は不要です。