第3章 サービスプロバイダーをホストする Git リポジトリーでの Pipelines as Code の使用
Pipelines as Code をインストールした後に、クラスター管理者はサービスプロバイダーをホストする Git リポジトリーを設定できます。現在、以下のサービスがサポートされています。
- GitHub アプリケーション
- GitHub Webhook
- GitLab
- Bitbucket Server
- Bitbucket Cloud
GitHub アプリケーションは、Pipelines as Code での使用に推奨されるサービスです。
3.1. GitHub アプリケーションでの Pipelines as Code の使用
GitHub アプリケーションは Red Hat OpenShift Pipeline とのインテグレーションポイントとして機能し、Git ベースのワークフローのメリットを OpenShift Pipelines にもたらします。クラスター管理者は、すべてのクラスターユーザーに単一の GitHub アプリケーションを設定できます。GitHub アプリケーションが Pipelines as Code と連携するには、GitHub アプリケーションの Webhook が GitHub イベントをリッスンする Pipelines as Code イベントリスナールート (または受信エンドポイント) をポイントするようにします。
Import from Git を使用してアプリケーションをインポートし、Git リポジトリーに .tekton
ディレクトリーがある場合、アプリケーションの pipelines-as-code
を設定できます。
3.1.1. GitHub アプリケーションの設定
クラスター管理者は、以下のコマンドを実行して GitHub アプリケーションを作成できます。
$ tkn pac bootstrap github-app
tkn pac
CLI プラグインがインストールされていない場合は、GitHub アプリケーションを手動で作成できます。
手順
Pipelines as Code 用に GitHub アプリケーションを手動で作成および設定するには、以下の手順を実行します。
- GitHub アカウントにサインインします。
-
Settings
Developer settings GitHub Apps に移動し、New GitHub App をクリックします。 GitHub App フォームに以下の情報を入力します。
-
GitHub Application Name:
OpenShift Pipelines
- Homepage URL: OpenShift Console の URL
Webhook URL: Pipelines as Code ルートまたは受信 URL次のコマンドを実行すると、これを見つけることができます。
$ echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}')
Webhook secret: 任意のシークレット。次のコマンドを実行してシークレットを生成できます。
$ openssl rand -hex 20
-
GitHub Application Name:
以下の リポジトリーのパーミッション を選択します。
-
チェック:
読み取り/書き込み
-
Contents:
Read & Write
-
Issues:
Read & Write
-
Metadata:
Read-only
-
プルリクエスト:
読み取り/書き込み
-
チェック:
以下の 組織のパーミッション を選択します。
-
メンバー:
読み取り専用
-
プラン:
読み取り専用
-
メンバー:
以下の ユーザーパーミッション を選択します。
- チェックラン
- 問題のコメント
- Pull request
- プッシュ
- Create GitHub App をクリックします。
- 新たに作成された GitHub App の Details ページで、上部に表示される App ID を書き留めます。
- Private keys セクションで、Generate Private key をクリックして GitHub アプリケーションの秘密鍵を自動的に生成およびダウンロードします。今後の参照や使用のために秘密鍵を安全に保管します。
- 作成したアプリを Pipelines as Code で使用するリポジトリーにインストールします。
3.1.2. GitHub アプリケーションにアクセスするための Pipelines as Code の設定
新たに作成された GitHub アプリケーションにアクセスするために Pipelines as Code を設定するには、以下のコマンドを実行します。
$ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \ --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ 1 --from-literal github-application-id="<APP_ID>" \ 2 --from-literal webhook.secret="<WEBHOOK_SECRET>" 3
GitHub Enterprise から設定されたヘッダーを検出し、それを GitHub Enterprise API 承認 URL に使用することで、Pipelines as Code は自動的に GitHub Enterprise と連携します。
3.1.3. 管理者パースペクティブでの GitHub アプリケーションの作成
クラスター管理者は、OpenShift Container Platform クラスターで GitHub アプリケーションを Pipelines as Code を使用するように設定できます。この設定により、ビルドのデプロイに必要な一連のタスクを実行できます。
前提条件
Operator Hub から Red Hat OpenShift Pipelines pipelines-1.14
Operator をインストールしている。
手順
- 管理者パースペクティブで、ナビゲーションペインを使用して Pipelines に移動します。
- Pipelines ページで GitHub アプリのセットアップ をクリックします。
-
GitHub のアプリケーション名を入力します。例:
pipelines-ci-clustername-testui
- Setup をクリックします。
- ブラウザーでプロンプトが表示されたら、Git パスワードを入力します。
-
Create GitHub App for <username> を クリックします。ここで、
<username>
は GitHub ユーザー名です。
検証
GitHub App の作成に成功すると、OpenShift Container Platform Web コンソールが開き、アプリケーションの詳細を表示します。

GitHub App の詳細は、openShift-pipelines
namespace にシークレットとして保存されます。
GitHub アプリケーションに関連付けられている名前、リンク、シークレットなどの詳細を表示するには、パイプライン に移動し、GitHub アプリの表示 をクリックします。
3.1.4. GitHub トークンのスコープを追加のリポジトリーに設定する
Pipelines as Code は、GitHub アプリを使用して GitHub アクセストークンを生成します。Pipelines as Code は、このトークンを使用してリポジトリーからパイプラインペイロードを取得し、CI/CD プロセスが GitHub リポジトリーと対話できるようにします。
デフォルトでは、アクセストークンのスコープは、Pipelines as Code がパイプライン定義を取得するリポジトリーのみに限定されます。場合によっては、トークンに追加のリポジトリーへのアクセスを許可したい場合があります。たとえば、.tekton/pr.yaml
ファイルとソースペイロードが配置されている CI リポジトリーが存在する可能性がありますが、pr.yaml
で定義されたビルドプロセスは別のプライベート CD リポジトリーからタスクを取得します。
GitHub トークンのスコープは、次の 2 つの方法で拡張できます。
- グローバル設定: GitHub トークンをさまざまな namespace のリポジトリーのリストに拡張できます。この設定を設定するには、管理者権限が必要です。
- リポジトリーレベルの設定: GitHub トークンを、元のリポジトリーと同じ namespace に存在するリポジトリーのリストに拡張できます。この設定を設定するために管理者権限は必要ありません。
手順
-
TektonConfig
カスタムリソース (CR) のPipelinesAsCode.settings
仕様で、Secret-github-app-token-scoped
パラメーターをfalse
に設定します。この設定により、GitHub トークンのスコープを、グローバルおよびリポジトリーレベルの設定にリストされているプライベートおよびパブリックリポジトリーに設定できるようになります。 GitHub トークンのスコープを指定するためのグローバル設定を設定するには、
TektonConfig
CR のPipelinesAsCode.settings
仕様で、次の例のようにsecret-github-app-scope-extra-repos
パラメーターで追加のリポジトリーを指定します。apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: platforms: openshift: pipelinesAsCode: enable: true settings: secret-github-app-token-scoped: false secret-github-app-scope-extra-repos: "owner2/project2, owner3/project3"
GitHub トークンのスコープを設定するためのリポジトリーレベルの設定を設定するには、次の例のように、
Repository
CR のgithub_app_token_scope_repos
パラメーターで追加のリポジトリーを指定します。apiVersion: "pipelinesascode.tekton.dev/v1alpha1" kind: Repository metadata: name: test namespace: test-repo spec: url: "https://github.com/linda/project" settings: github_app_token_scope_repos: - "owner/project" - "owner1/project1"
この例では、
Repository
カスタムリソースはtest-repo
namespace のlinda/project
リポジトリーに関連付けられています。生成された GitHub トークンのスコープはlinda/project
リポジトリーだけでなく、owner/project
およびowner1/project1
リポジトリーにも拡張されます。これらのリポジトリーは、test-repo
namespace の下に存在する必要があります。注記追加のリポジトリーはパブリックまたはプライベートにすることができますが、
Repository
リソースが関連付けられているリポジトリーと同じ namespace に存在する必要があります。いずれかのリポジトリーが namespace に存在しない場合、GitHub トークンのスコープ設定は失敗し、次のエラーメッセージが表示されます。
failed to scope GitHub token as repo owner1/project1 does not exist in namespace test-repo
結果
生成された GitHub トークンにより、グローバルおよびリポジトリーレベルの設定で設定した追加のリポジトリーに加え、Pipelines as Code ペイロードファイルが配置されている元のリポジトリーにアクセスできるようになります。
グローバル設定とリポジトリーレベル設定の両方を指定すると、次の例に示すように、トークンのスコープは両方の設定のすべてのリポジトリーになります。
TektonConfig
カスタムリソース
apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: platforms: openshift: pipelinesAsCode: enable: true settings: secret-github-app-token-scoped: false secret-github-app-scope-extra-repos: "owner2/project2, owner3/project3"
Repository
カスタムリソース
apiVersion: "pipelinesascode.tekton.dev/v1alpha1" kind: Repository metadata: name: test namespace: test-repo spec: url: "https://github.com/linda/project" settings: github_app_token_scope_repos: - "owner/project" - "owner1/project1"
GitHub トークンのスコープは、owner/project
、owner1/project1
、owner2/project2
、owner3/project3
、および linda/project
リポジトリーです。