コンテンツにスキップ
Vectana
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

GitHub・GitLab 連携

リポジトリを連携して、Issue とタスク、マイルストーンとスプリントを双方向に同期し、lockfile・SBOM を push のたびに自動で取り込む方法。

プロジェクトに GitHub または GitLab(gitlab.com・セルフホスト)のリポジトリを連携すると、次のことが自動で行われます。

  • Issue とタスクが双方向に同期されます(タイトル・状態・担当者・ラベル)
  • マイルストーンとスプリントが対応付けられます
  • プルリクエスト(マージリクエスト)がマージされると、そこで閉じた Issue のタスクが完了になります
  • 自動で作られたセキュリティ対応タスクが Issue になります
  • 既定ブランチへの push のたびと毎日 1 回、リポジトリの lockfile・SBOM を取り込みます

リポジトリ連携

プロジェクトの「リポジトリ連携」タブで「リポジトリを連携」を押します。このタブはプロジェクトを管理できる人(プロジェクトのオーナー、会社管理者、部署長、グループ管理者)にだけ表示されます。

項目 内容
サービス GitHub または GitLab
リポジトリ GitHub は owner/name、GitLab は group/project(サブグループも可)
GitHub Enterprise Server / セルフホストの GitLab チェックして URL を入力します。GitHub Enterprise は API の URL(https://ホスト名/api/v3)、GitLab はサーバの URL(https://ホスト名)
アクセストークン 下の権限を持つトークン
Issue とタスクを同期する オフにすると、lockfile の取り込みだけを行います
自動作成されたセキュリティ対応タスクを Issue にする 初期値はオン
Webhook を自動で登録する 初期値はオン
取り込むファイル 空欄ならリポジトリ全体。指定方法は取り込むファイルを参照

「連携する」を押すと、トークンでリポジトリを読めるか確かめてから保存します。そのあと、lockfile と開いている Issue・マイルストーンをバックグラウンドで取り込みます。

アクセストークンの権限

GitHub: Fine-grained personal access token(または GitHub App のトークン)で、対象リポジトリに次の権限を付けます。

権限 用途
Contents: Read lockfile・SBOM の取り込み
Issues: Read and write Issue・マイルストーンの同期
Webhooks: Read and write Webhook の自動登録(手で登録するなら不要)

GitLab: Project access token(またはグループ・個人のトークン)で api スコープを付けます。Webhook を自動で登録するには Maintainer 以上のロールが必要です。

トークンは暗号化して保存され、画面には二度と表示されません。期限が切れたときは「トークンを変更」から入れ直します。

Webhook

Webhook を通して、Issue の変更や push がすぐに Vectana に届きます。トークンに権限がなく自動で登録できなかった場合は、連携の画面に Webhook の URL とシークレットが表示されるので、手で登録してください。

サービス 登録場所 設定
GitHub リポジトリの Settings → Webhooks Content type: application/json、Secret: 表示されたシークレット、イベント: Pushes・Issues・Milestones・Pull requests
GitLab プロジェクトの設定 → Webhooks シークレットトークン: 表示されたシークレット、トリガー: プッシュイベント・Issue イベント・マージリクエストイベント

Webhook の URL は、管理者が設定した Vectana の公開 URL(WEB_URL)から作られます。GitHub・GitLab から届く URL にしておいてください。

Webhook が届かなくても、毎日 1 回の取り込みと「Issue を取り込む」ボタンで追いつけます。

Issue とタスク

Vectana → GitHub / GitLab

連携したあとに作ったタスクは、Issue としても作られます。連携より前からあるタスクは Issue になりません(リポジトリが急に Issue で埋まらないようにするためです)。

タスクのタイトル・状態・優先度・種別・担当者・スプリントを変えると、Issue にも反映されます。

Vectana Issue
タイトル タイトル(セキュリティ対応タスクは「lodash を 4.17.21 に更新」の形)
状態「完了」 クローズ。それ以外はオープン
種別「セキュリティ対応」「その他」 ラベル security・other
優先度 ラベル priority: high・priority: medium・priority: low
担当者 アサイン(アカウント名を登録している人だけ)
スプリント マイルストーン

Issue の本文には、タスクの説明と Vectana のタスクへのリンクが入ります。Issue の文言は、リポジトリを連携した人の表示言語で書かれます。Issue に自分で付けたほかのラベルや、Vectana の知らないアサインはそのまま残ります。

見積時間・ポイント・期限・依存関係・進み具合など、Vectana だけの項目は Issue には送りません。

GitHub / GitLab → Vectana

Issue を作ったり変えたりすると、タスクに反映されます。

  • 新しい Issue はタスクになります(「Issue とタスクを同期する」がオンのとき)
  • タイトル・オープン/クローズ・ラベル(種別と優先度)・担当者・マイルストーンが反映されます
  • 担当者は、アカウント名を登録している Vectana のユーザーに対応付けます。知らないアカウントだけがアサインされた場合は、タスクの担当者を変えません

タスクには Issue 番号のリンクが付き、ボードや一覧、タスクの画面から Issue を開けます。

プルリクエストのマージで完了

プルリクエスト(GitLab はマージリクエスト)のタイトルや説明に Closes #12・Fixes #12・Resolves #12 と書いておくと、マージしたときに Issue #12 のタスクが完了になります。

マイルストーンとスプリント

Vectana でスプリントを作ると、同じ名前のマイルストーンが作られます(すでに同じ名前のマイルストーンがあればそれを使います)。名前・終了日・ゴールの変更や、スプリントの完了も反映されます。

GitHub・GitLab で作ったマイルストーンは、計画中のスプリントになります。スプリントの完了は、ポイントの確定や未完了タスクの戻しを伴うので、Vectana で行ってください。

セキュリティ対応タスクの Issue

セキュリティ対応タスクが自動で作られると、Issue(ラベル security)も作られます。脆弱性がすべて解消してタスクが自動で完了すると、Issue もクローズされます。

Issue にしたくない場合は、連携の画面で「自動作成されたセキュリティ対応タスクを Issue にする」をオフにします。

lockfile・SBOM の取り込み

既定ブランチへの push のたびと、毎日 1 回、リポジトリにある lockfile・SBOM をパッケージとして取り込みます。「今すぐ取り込む」でいつでも取り込めます。

  • 対応形式はパッケージの登録と同じです。node_modules/ や vendor/ の中は読みません
  • 取り込み元は git:リポジトリ/パス(例: git:acme/portal/web/package-lock.json)になるので、ファイルごとに入れ替わります
  • リポジトリから消えたファイルのパッケージは削除されます。別のファイルに移っただけのパッケージは、対応状況やタスクを残したまま引き継ぎます
  • 1 回に読むのは最大 50 ファイルです

「取り込むファイル」に 1 行に 1 つパターンを書くと、そのファイルだけを読みます。* と ** が使えます。

web/package-lock.json
api/**
services/*/go.sum

CI から送る方法(CI から自動で登録する)も引き続き使えます。両方を使う場合は、同じファイルを二重に取り込まないよう、どちらかに寄せてください。

アカウント名の登録

Issue の担当者と Vectana のユーザーは、各自が「個人設定」の「GitHub・GitLab のアカウント」に登録したユーザー名で対応付けます。大文字・小文字は区別しません。

ゴミ箱で連携を解除します。Vectana が登録した Webhook は削除されます。タスクと Issue のリンク、取り込んだパッケージはそのまま残ります。

うまくいかないとき

最後のエラーが連携の画面に表示されます。

表示 対処
リポジトリを読み取れません: … 401 トークンの期限切れ・失効。「トークンを変更」で入れ直します
リポジトリを読み取れません: … 404 リポジトリ名の誤り、またはトークンにそのリポジトリの権限がない
Webhook not registered Webhook の権限がない。表示された URL とシークレットで手で登録します
最後の通知が更新されない Webhook が届いていない。GitHub・GitLab の Webhook の配信履歴を確認します