JiraからGitLab VSAへのバリューストリーム分析統合
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GitLabのバリューストリーム分析(VSA)は、開発ワークフローに関する強力なインサイトを提供し、次のような主要なメトリクスを追跡します:
- リードタイム: イシューの作成から完了までの時間
- 作成されたイシュー: 特定の期間に作成された新しいイシューの数
- クローズされたイシュー: 特定の期間に解決されたイシューの数
Jiraをイシュートラッキングに使用し、GitLabを開発に利用しているチームにとって、この統合により、JiraイシューをGitLabにリアルタイムで自動的にレプリケートすることができます。これにより、チームが既存のJiraワークフローを変更しなくても、正確なVSAメトリクスが保証されます。
この統合により、GitLabのバリューストリームダッシュボードも入力状態になり、主要なDevSecOpsメトリクスの概要が提供されます。これはGitLabプロジェクトまたはグループの分析 > 分析ダッシュボードにあります。
注: 同様の統合がインシデントレプリケーションにも存在し、特定のDORAメトリクス(変更失敗率とサービス復旧時間)を生成します。インシデントレプリケーションに関心がある場合は、Jiraインシデントリプリケーターを参照してください。
アーキテクチャ
Jiraオートメーションを使用して2つの自動化ワークフローを作成します:
- Jiraで作成されたときにGitLabイシューを作成する
- Jiraで解決されたときにGitLabイシューをクローズする
イシュー作成
Jiraで新しいイシューが作成されると、自動化ワークフローはPOSTリクエストをGitLabイシューAPIに送信し、指定されたGitLabプロジェクトに対応するイシューを作成します。
イシューの解決
Jiraイシューが解決済み状態(クローズ、完了、解決済み)に移行すると、自動化ワークフローはPUTリクエストを送信して、対応するGitLabイシューをクローズします。
セットアップ
前提条件
このチュートリアルでは、以下を前提としています:
- VSAアナリティクスを生成するGitLabプロジェクト
- イシューをレプリケートする元のJiraプロジェクト
- GitLab UltimateまたはPremiumライセンス(バリューストリーム分析機能の場合)
Jiraは、Jiraライセンスに応じて、自動化実行の頻度に制限を設けています:
| プラン | 制限 |
|---|---|
| Free | 1か月あたり100回の実行 |
| スタンダード | 1か月あたり1700回の実行 |
| Premium | 1ユーザーあたり1か月あたり1000回の実行 |
| エンタープライズ | 無制限の実行 |
各イシューの作成は1回の実行としてカウントされ、各イシューの解決も1回の実行としてカウントされます。
GitLabプロジェクトアクセストークン
まず、API経由でイシューを作成および更新するために必要な権限を持つGitLabプロジェクトアクセストークンを作成する必要があります。
- JiraイシューをレプリケートしたいGitLabプロジェクトに移動します。サイドバーから、設定 > アクセストークンに移動します。
- 新しいトークンを追加をクリックします。
- 次の設定を行います:
- トークン名:
Jira VSA Integration(または任意のわかりやすい名前) - 有効期限: セキュリティポリシーに従って設定します
- ロール:
Owner(カスタムイシューIDを設定するために必要です) - スコープ:
api(フルAPIアクセス)を確認してください
- トークン名:
重要: 認可には、GitLabでイシューを作成する際に、カスタムイシューIDを強制的に設定する必要があるため、オーナーレベルのアクセストークンが必要です。これにより、Jiraイシューがクローズされると、オートメーションは同じIDマッピングを使用して、対応するGitLabイシューを識別してクローズできます。オーナーロールがない場合、GitLab APIはカスタムイシューIDの設定を許可せず、JiraイシューのクローズとGitLabイシューのクローズ間の同期が中断されます。
- Create project access token(プロジェクトアクセストークンを作成)をクリックし、生成されたトークンを安全に保存します。これはJiraオートメーションの設定に必要になります。
Jiraイシュー作成ワークフロー
Jiraイシューが作成されたときにGitLabイシューを自動的に作成するには、Jiraオートメーションを使用します。
Jiraプロジェクトに移動します。サイドバーから、Project settings(プロジェクトの設定) > Automation(オートメーション)に移動します。
右上にあるCreate rule(ルールを作成)をクリックします。
トリガーの場合は、Issue created(作成されたイシュー)を検索して選択します。保存をクリックします。
任意: どのイシューをレプリケートするかをフィルタリングする条件を追加します。たとえば、特定の種類のイシューまたは特定のラベルのイシューのみをレプリケートするために、Issue fields condition(イシューフィールド条件)を追加できます。
THEN: Add an action(THEN: アクションを追加)を選択します。Send web request(Webリクエストを送信)を検索して選択します。
Webリクエストを設定します:
- Web request URL(WebリクエストURL):
https://gitlab.com/api/v4/projects/<GITLAB_PROJECT_ID>/issues(セルフホストの場合はgitlab.comをGitLabインスタンスURLに置き換え、<GITLAB_PROJECT_ID>をGitLabプロジェクトの数値IDに置き換えます。例:42718690) - HTTP method(HTTPメソッド): POST
- Web request body(Webリクエストボディ): Custom data(カスタムデータ)
- Web request URL(WebリクエストURL):
次のヘッダーを追加します:
名前 値 認可 Bearer <YOUR_GITLAB_TOKEN>Content-Type application/jsonセキュリティのために、AuthZヘッダーを「非表示」に設定します。
Custom data(カスタムデータ)フィールドに、次のように入力します:
{ "title": "{{issue.summary}}", "iid": {{issue.key.replace("VSA-", "1000")}} }"VSA-"をJiraプロジェクトのプレフィックスに置き換えます(たとえば、Jiraイシューの番号がPROJ-123の場合は、"PROJ-"を使用します)。1000は、UIを介してGitLab自体の中で直接作成された可能性のあるイシューとの競合が発生しないようにするために追加されるベース番号です。必要に応じてこの値を調整できます。保存をクリックし、オートメーションにわかりやすい名前(
Jira to GitLab Issue Creationなど)を付けて、Turn it on(オンにする)をクリックします。
Jiraイシュー解決ワークフロー
2番目の自動化ワークフローを作成して、Jiraイシューが解決されたときにGitLabイシューをクローズします:
作成ワークフローの手順1〜2に従って、新しいルールを開始します。
トリガーをIssue transitioned(イシューの移行)に設定します:
- 「From status」(元のステータス)フィールドを空白のままにします
- 「To status」(変更後のステータス)は、
Closed、Done、Resolvedなど、解決済みであることを示すステータスに設定します(Jiraワークフローに基づいて調整します)
(必要に応じて、カスタム条件を追加するか、カスタム条件をスキップします)。
次のSend web request(Webリクエストを送信)アクションを追加します:
- Web request URL(WebリクエストURL):
https://gitlab.com/api/v4/projects/<GITLAB_PROJECT_ID>/issues/{{issue.key.replace("<JIRA_PROJECT_PREFIX>-", "1000").urlEncode}}(セルフホストの場合はgitlab.comをGitLabインスタンスURLに置き換え、<GITLAB_PROJECT_ID>をGitLabプロジェクトの数値IDに置き換え、<JIRA_PROJECT_PREFIX>をVSAやPROJのようなJiraプロジェクトのプレフィックスに置き換えます) - HTTP method(HTTPメソッド): PUT
- Web request body(Webリクエストボディ): Custom data(カスタムデータ)
- Web request URL(WebリクエストURL):
作成ワークフローと同じヘッダーを使用します。
Custom data(カスタムデータ)フィールドに、次のように入力します:
{ "state_event": "close" }わかりやすい名前(
Jira to GitLab Issue Closerなど)で自動化ルールを保存して有効にします。
バリューストリーム分析設定
自動化ワークフローがアクティブになると、GitLabはイシューデータの受信を開始します。アナリティクスにアクセスする方法は次のとおりです:
バリューストリームダッシュボード(自動 - Ultimateのみ)
バリューストリームダッシュボードには、レプリケートされたイシューからのメトリクスが自動的に入力状態になり、GitLab Ultimateで利用できます:
- GitLabプロジェクトまたはグループで、分析 > 分析ダッシュボードに移動します
- バリューストリームダッシュボードをクリックします
- 作成されたイシュー、クローズされたイシュー、リードタイム、サイクルタイムなどのメトリクスが表示されます。
バリューストリーム分析(設定が必要 - PremiumおよびUltimate)
より詳細なアナリティクスとカスタムバリューストリーム(GitLab PremiumおよびUltimateで利用可能)の場合:
- GitLabプロジェクトまたはグループで、分析 > バリューストリーム分析に移動します
- 新しいバリューストリームをクリックして、カスタムバリューストリームを作成します
- 開発プロセスに応じてステージングとワークフローを設定する
- リードタイムや新しいイシュー数などのメトリクスが自動的に生成され、作成したステージングの横に表示されます
- 詳細な設定手順については、GitLabバリューストリーム分析ドキュメントを参照してください
複数プロジェクトの考慮事項
単一のオートメーションルールセットを使用して複数のJiraプロジェクトからイシューをレプリケートする場合は、プロジェクトプレフィックスメソッドの代わりに、タイムスタンプベースのアプローチを使用して一意のイシューIDを生成することを検討してください:
カスタムデータのiid値を次のように置き換えます:
"iid": {{issue.created.replace("-","").replace("T","").replace(":","").replace(".","").replace("+","")}}これにより、作成タイムスタンプ(形式: 2025-02-15T09:45:32.7+0000)が数値に変換されます。このアプローチでは、イシューIDが非常に長くなる可能性があり、2つのイシューがまったく同じ時間に作成された場合に競合のリスクがわずかに高くなる可能性があることに注意してください。