3.2. GitHub Webhook での Pipelines as Code の使用
GitHub アプリケーションを作成できない場合は、リポジトリーで GitHub Webhook で Pipelines as Code を使用します。ただし、GitHub Webhook で Pipelines as Code を使用しても、GitHub Check Runs API にはアクセスできません。タスクのステータスはプル要求のコメントとして追加され、Checks タブでは利用できません。
GitHub Webhook を使用した Pipelines as Code は、/retest
や /ok-to-test
などの GitOps コメントには対応していません。継続的インテグレーション (CI) を再開するには、リポジトリーへの新しいコミットを作成します。たとえば、変更を加えずに新しいコミットを作成するには、次のコマンドを使用できます。
$ git --amend -a --no-edit && git push --force-with-lease <origin> <branchname>
前提条件
- Pipelines as Code がクラスターにインストールされている。
承認用に GitHub で個人アクセストークンを作成する。
セキュアで粒度の細かいトークンを生成するには、そのスコープを特定のリポジトリーに制限し、以下のパーミッションを付与します。
表3.1 粒度の細かいトークンのパーミッション 名前 Access 管理
Read-only
メタデータ
Read-only
Content
Read-only
コミットステータス
読み取りおよび書き込み
プルリクエスト
読み取りおよび書き込み
Webhook
読み取りおよび書き込み
クラシックトークンを使用するには、パブリックリポジトリーのスコープを
public_repo
に設定し、プライベートリポジトリーのスコープをrepo
に設定します。さらに、トークンの有効期限を短くして、別の場所でトークンを書き留めておきます。注記tkn pac
CLI を使用して Webhook を設定する必要がある場合は、admin:repo_hook
スコープを追加します。
手順
Webhook を設定し、
リポジトリー
カスタムリソース (CR) を作成します。tkn pac
CLI ツールを使用して webhook を設定し、リポジトリー
CR を 自動的に 作成するには、次のコマンドを使用します。$ tkn pac create repo
対話型出力の例
? Enter the Git repository url (default: https://github.com/owner/repo): ? Please enter the namespace where the pipeline should run (default: repo-pipelines): ! Namespace repo-pipelines is not found ? Would you like me to create the namespace repo-pipelines? Yes ✓ Repository owner-repo has been created in repo-pipelines namespace ✓ Setting up GitHub Webhook for Repository https://github.com/owner/repo 👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com ? Do you want me to use it? Yes ? Please enter the secret to configure the webhook for payload validation (default: sJNwdmTifHTs): sJNwdmTifHTs ℹ ️You now need to create a GitHub personal access token, please checkout the docs at https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token for the required scopes ? Please enter the GitHub access token: **************************************** ✓ Webhook has been created on repository owner/repo 🔑 Webhook Secret owner-repo has been created in the repo-pipelines namespace. 🔑 Repository CR owner-repo has been updated with webhook secret in the repo-pipelines namespace ℹ Directory .tekton has been created. ✓ We have detected your repository using the programming language Go. ✓ A basic template has been created in /home/Go/src/github.com/owner/repo/.tekton/pipelinerun.yaml, feel free to customize it.
Webhook を設定して
Repository
CR を 手動 で作成するには、以下の手順を実行します。OpenShift クラスターで、Pipelines as Code コントローラーの公開 URL を抽出します。
$ echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}')
GitHub リポジトリーまたは組織で、以下の手順を実行します。
- Settings -> Webhooks に移動し、Add webhook をクリックします。
- Payload URL を Pipelines as Code コントローラーのパブリック URL に設定します。
- コンテンツタイプを application/json として選択します。
Webhook シークレットを追加し、別の場所に書き留めます。
openssl
がローカルマシンにインストールされた状態で、ランダムなシークレットを生成します。$ openssl rand -hex 20
- Let me select individual events をクリックし、Commit comments、Issue comments、Pull request、および Pushes のイベントを選択します。
- Add webhook をクリックします。
OpenShift クラスターで、個人アクセストークンおよび Webhook シークレットを使用して
Secret
オブジェクトを作成します。$ oc -n target-namespace create secret generic github-webhook-config \ --from-literal provider.token="<GITHUB_PERSONAL_ACCESS_TOKEN>" \ --from-literal webhook.secret="<WEBHOOK_SECRET>"
Repository
CR を作成します。例:
Repository
CRapiVersion: "pipelinesascode.tekton.dev/v1alpha1" kind: Repository metadata: name: my-repo namespace: target-namespace spec: url: "https://github.com/owner/repo" git_provider: secret: name: "github-webhook-config" key: "provider.token" # Set this if you have a different key in your secret webhook_secret: name: "github-webhook-config" key: "webhook.secret" # Set this if you have a different key for your secret
注記Pipelines as Code は、OpenShift
Secret
オブジェクトとRepository
CR が同じ namespace にあることを前提としています。
オプション: 既存の
Repository
CR の場合、複数の GitHub Webhook シークレットを追加するか、削除されたシークレットの代わりを提供します。tkn pac
CLI ツールを使用して Webhook を追加します。例:
tkn pac
CLI を使用した追加の Webhook$ tkn pac webhook add -n repo-pipelines
対話型出力の例
✓ Setting up GitHub Webhook for Repository https://github.com/owner/repo 👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com ? Do you want me to use it? Yes ? Please enter the secret to configure the webhook for payload validation (default: AeHdHTJVfAeH): AeHdHTJVfAeH ✓ Webhook has been created on repository owner/repo 🔑 Secret owner-repo has been updated with webhook secert in the repo-pipelines namespace.
-
既存の OpenShift
Secret
オブジェクトのwebhook.secret
キーを更新します。
オプション: 既存の
Repository
CR の場合は、Personal Access Token を更新します。tkn pac
CLI ツールを使用して Personal Access Token を更新します。例:
tkn pac
CLI を使用した Personal Access Token の更新$ tkn pac webhook update-token -n repo-pipelines
対話型出力の例
? Please enter your personal access token: **************************************** 🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.
または、
Repository
CR を変更して Personal Access Token を更新します。Repository
CR でシークレットの名前を見つけます。apiVersion: "pipelinesascode.tekton.dev/v1alpha1" kind: Repository metadata: name: my-repo namespace: target-namespace spec: # ... git_provider: secret: name: "github-webhook-config" # ...
oc patch
コマンドを使用して、$target_namespace
namespace の$NEW_TOKEN
の値を更新します。$ oc -n $target_namespace patch secret github-webhook-config -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"