Jenkins トリガーと Secure Source Manager ウェブフックを使用して、自動ビルドを開始できます。
必要なロール
Jenkins ビルドトリガーの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
リポジトリに対する Secure Source Manager リポジトリ管理者 (
roles/securesourcemanager.repoAdmin
) -
Secure Source Manager インスタンスに対する Secure Source Manager インスタンス アクセサー (
roles/securesourcemanager.instanceAccessor
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Secure Source Manager のロールの付与については、IAM によるアクセス制御とユーザーにインスタンスへのアクセス権を付与するをご覧ください。
Webhook トリガーを設定する
Jenkins は、ビルドトリガー プラグインを使用して CI/CD の自動化を有効にします。新しい commit がリポジトリに push されたときや、pull リクエストが開始されたときなどでの受信イベントをリッスンし、新しいイベントが生じたときにビルドを自動的に実行するようにトリガーを構成できます。ソース リポジトリが変更された場合や、特定の条件に一致する変更があった場合にコードをビルドするようにトリガーを構成することもできます。
一般的な Jenkins Webhook トリガーを設定する手順は次のとおりです。
Jenkins サーバーに Jenkins の Git プラグイン、SSH 認証情報プラグイン、汎用 Webhook トリガー プラグインをインストールします。
Jenkins サーバーで有効な SSH 認証鍵ペアを生成します。Secure Source Manager は RSA タイプの鍵のみをサポートしています。
次のコマンドを実行して、Secure Source Manager インスタンス ドメインを Jenkins サーバーの SSH
known_hosts
ファイルに追加します。ssh -t git@INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.us-central1.sourcemanager.dev
ここで
- INSTANCE_ID は、Secure Source Manager インスタンスの名前です。
- INSTANCE_PROJECT_NUMBER は、Secure Source Manager インスタンスのプロジェクト番号です。プロジェクト番号を確認する方法については、プロジェクトの識別をご覧ください。
たとえば、次のコマンドは、プロジェクト番号が
123456789
のprod-test-instance
という名前のインスタンスのインスタンス ドメインを追加します。ssh -t git@prod-test-instance-123456789-ssh.us-central1.sourcemanager.dev
インスタンス ドメインを既知のホストのリストに追加するには、
yes
と返信します。Jenkins の [Manage Credentials] ページで、次の操作を行います。
- [SSH username with private key] を選択します。
- Jenkins サーバーの SSH 秘密鍵を貼り付けます。
- [種類] プルダウンで、必要に応じて他のフィールドに入力します。
[作成] をクリックします。
Jenkins ウェブ インターフェースで、新しい Jenkins ジョブを作成します。
Jenkins ジョブの構成ページの [Source Code Management] セクションで、[Git] を選択します。
[Git] セクションで、Secure Source Manager リポジトリの SSH URL をリポジトリ URL として貼り付け、ビルドブランチ(
*/main
など)を入力して、[認証情報の管理] ページで以前に追加した保存済みの秘密 SSH 認証鍵認証情報を選択します。[ビルドトリガー] セクションで、[汎用 Webhook トリガー] を選択します。
必要に応じて、呼び出し時にそのトークンが指定された場合にのみジョブがトリガーされるように、トークンを追加できます。トークンを追加するには、[Generic Webhook Trigger] セクションの [Token] フィールドにトークンを入力します。
[ビルド] セクションで、この Jenkins ジョブで使用するビルド スクリプトを指定します。たとえば、
cat README.md
を実行して README.md の内容を出力できます。[保存] をクリックして、Jenkins ジョブを作成します。
サービス アカウントを設定して必要な権限を付与する
使用するサービス アカウントがまだない場合は、サービス アカウントを作成します。
サービス アカウントに対する
iam.serviceAccounts.actAs
権限があることを確認します。この権限は、サービス アカウント ユーザー(roles/iam.serviceAccountUser
)ロールの一部です。Secure Source Manager ウェブ インターフェースで、
[その他のオプション] メニューをクリックします。[サービス アカウントの SSH 認証鍵] をクリックします。[サービス アカウントの SSH 認証鍵] ページが開き、追加した既存の認証鍵のリストが表示されます。
[鍵を追加] をクリックします。
[SSH 認証鍵を追加] ページで、鍵に次の値を入力します。
サービス アカウント: SSH 鍵を使用するサービス アカウントのサービス アカウント メール(
SA_NAME@PROJECT_ID.iam.gserviceaccount.com
形式)場所
SA_NAME
はサービス アカウント名です。PROJECT_ID
は、サービス アカウントが作成されたプロジェクトのプロジェクト ID です。
SSH Public Key: Jenkins の公開 SSH 認証鍵。
Secure Source Manager サービス エージェントに権限を付与する
サービス アカウントが Secure Source Manager インスタンスと同じプロジェクトにない場合は、Secure Source Manager サービス エージェントにサービス アカウント トークン作成者(roles/iam.serviceAccountTokenCreator
)ロールまたは iam.serviceAccounts.signJwt
権限も付与する必要があります。
サービス アカウントが Secure Source Manager インスタンスと同じプロジェクトにある場合は、サービス アカウントにリポジトリ ロールを付与するに進みます。
次のコマンドを実行して、サービス アカウントの既存の IAM ポリシーを取得します。
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT \ --format json
ここで、SERVICE_ACCOUNT は使用するサービス アカウントです。アカウントは、数値形式のサービス アカウント ID またはメールアドレス(
123456789876543212345
、my-iam-account@somedomain.com
など)のいずれかの形式にする必要があります。出力には既存のバインディングが含まれます。バインディングが存在しない場合は、次のような
etag
値が含まれます。{ "etag": "BwUjHYKJUiQ=" }
出力を
policy.json
という名前の新しいファイルにコピーします。Secure Source Manager サービス エージェントにサービス アカウント トークン作成者(
roles/iam.ServiceAccountTokenCreator
)のロールを付与するには、policy.json
を変更して次を追加します。{ "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:service-INSTANCE_PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com" ] }
INSTANCE_PROJECT_NUMBER
は、Secure Source Manager インスタンスのプロジェクト番号です。次のコマンドを実行して、サービス アカウントの既存の IAM ポリシーを置き換えます。
gcloud iam service-accounts set-iam-policy SERVICE_ACCOUNT POLICY_FILE
次のように置き換えます。
- SERVICE_ACCOUNT は、サービス アカウント ID またはメールアドレスに置き換えます。
- POLICY_FILE は、新しいポリシーを含む JSON 形式のファイルの場所と名前に置き換えます。
サービス アカウントにリポジトリ ロールを付与する
- Secure Source Manager ウェブ インターフェースで、サービス アカウントに権限を付与するリポジトリに移動します。
- [権限] タブをクリックします。
- [ユーザーを追加] をクリックします。
- [プリンシパルを追加] フィールドに、サービス アカウントのメールアドレスを入力します。
- [ロール] プルダウン メニューで、[Secure Source Manager リポジトリ閲覧者] を選択します。
次のコマンドを実行して、サービス アカウントに
securesourcemanager.instanceAccessor
ロールを割り当てます。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor
次のように置き換えます。
PROJECT_ID
は、Secure Source Manager インスタンスのプロジェクト ID に置き換えます。SA_EMAIL
は、サービス アカウントのメールアドレスに置き換えます。
Webhook を設定する
- Secure Source Manager ウェブ インターフェースで、Webhook を作成するリポジトリに移動します。
- [設定] をクリックします。
- [Webhook] をクリックし、[Webhook を追加] をクリックします。
[フック ID] フィールドに、Webhook の ID を入力します。
[ターゲット URL] フィールドに、Jenkins トリガー URL を入力します。
Jenkins トリガーの構成時にオプションのトークンを使用した場合は、Jenkins トリガー URL の末尾にそのトークンが含まれます。トークンの漏洩を防ぐため、ターゲット URL の末尾からトークンを削除し、[機密性の高いクエリ文字列] フィールドにコピーします。
トリガー URL でトークンを見つけるには、
token=
で始まるテキストを探します。たとえば、URL が次のようになっているとします。
https://jenkins-server.com/generic-webhook-trigger/invoke?token=jenkins-job1
[Target URL] フィールドから、疑問符
?token=jenkins-job1
で始まる部分をコピーして削除します。次に、最初の疑問符を削除し、残りの部分token=jenkins-job1
を [機密性の高いクエリ文字列] フィールドに移動します。[トリガー] セクションで、次のいずれかを選択します。
- Push: リポジトリへの push でトリガーします。
- Pull request state changed: プルリクエストの状態が変更されたときにトリガーします。
[Push] を選択した場合は、[ブランチ フィルタ] フィールドに push イベントの許可リストを入力できます。
[ブランチ フィルタ] フィールドでは glob パターンが使用され、一致するブランチに対するオペレーションのみがビルドトリガーを発生させます。フィールドが空または
*
の場合、すべてのブランチの push イベントが報告されます。[Add webhook] をクリックします。
Webhook が [Webhook] ページに表示されます。
Webhook をテストする
- Secure Source Manager の [Webhook] ページで、テストする Webhook をクリックします。
ページの一番下までスクロールし、[テスト配信] をクリックします。
偽のイベントが配信キューに追加されます。配信履歴に表示されるまでに数秒かかることがあります。
git
コマンドを使用して、プルリクエストを push またはマージして、Webhook をテストすることもできます。Jenkins プロジェクトの [ビルド履歴] で、テストイベントによってトリガーされたビルドを表示します。
最初のテスト配信を送信すると、Secure Source Manager の Webhook ページの [最近の配信] セクションで、テスト配信の [リクエスト] と [レスポンス] を確認することもできます。
次のステップ
- Jenkins のドキュメントを確認する。