第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 リスナールート (または受信エンドポイント) をポイントするようにします。

Pipelines as Code 用に GitHub アプリケーションを設定する方法は 3 つあります。

  • tkn コマンドラインユーティリティーを使用します。
  • Web コンソールの管理者の視点を使用します。
  • GitHub でアプリケーションを手動で設定し、Pipelines as Code のシークレットを作成します。

デフォルトでは、Pipelines as Code は 1 つの GitHub アプリケーションと通信できます。追加の GitHub アプリケーションと通信するために追加の Pipelines as Code コントローラーを設定した場合は、各 GitHub アプリケーションを個別に設定します。追加のコントローラーの場合は、GitHub アプリケーションを手動で設定する必要があります。

3.1.1. コマンドラインインターフェイスを使用した GitHub アプリケーションの設定

tkn コマンドラインユーティリティーを使用して GitHub アプリケーションを作成し、GitHub アプリケーションの Pipelines as Code コントローラーを設定できます。

重要

追加の GitHub アプリケーションをサポートするために追加の Pipelines as Code コントローラーを作成した場合、この手順はメインコントローラーに対してのみ使用できます。追加のコントローラー用の GitHub アプリケーションを作成するには、手動の手順を使用します。

前提条件

  • クラスター管理者として OpenShift Container Platform クラスターにログインしている。
  • tkn pac プラグインとともに tkn コマンドラインユーティリティーをインストールしている。

手順

  • 以下のコマンドを実行します。

    $ tkn pac bootstrap github-app

    このコマンドは、アカウントが標準の github.com API エンドポイントを使用していることを前提としています。別の GitHub API エンドポイントを使用する場合 (たとえば、GitHub Enterprise を使用する場合)、次の例のように --github-api-url オプションを使用してエンドポイントを指定します。

    コマンドの例

    $ tkn pac bootstrap github-app --github-api-url https://github.com/enterprises/example-enterprise

3.1.2. 管理者パースペクティブでの GitHub アプリケーションの作成

クラスター管理者は、OpenShift Container Platform クラスターで GitHub アプリケーションを Pipelines as Code を使用するように設定できます。この設定により、ビルドのデプロイに必要な一連のタスクを実行できます。

重要

追加の GitHub アプリケーションをサポートするために追加の Pipelines as Code コントローラーを作成した場合、この手順はメインコントローラーに対してのみ使用できます。追加のコントローラー用の GitHub アプリケーションを作成するには、手動の手順を使用します。

前提条件

Operator Hub から Red Hat OpenShift Pipelines pipelines-1.17 Operator をインストールしている。

手順

  1. 管理者パースペクティブで、ナビゲーションペインを使用して Pipelines に移動します。
  2. Pipelines ページで GitHub アプリのセットアップ をクリックします。
  3. GitHub のアプリケーション名を入力します。例: pipelines-ci-clustername-testui
  4. Setup をクリックします。
  5. ブラウザーでプロンプトが表示されたら、Git パスワードを入力します。
  6. Create GitHub App for <username> をクリックします。ここで、<username> は GitHub ユーザー名です。

検証

GitHub App の作成に成功すると、OpenShift Container Platform Web コンソールが開き、アプリケーションの詳細を表示します。

Github アプリの詳細

GitHub App の詳細は、openShift-pipelines namespace にシークレットとして保存されます。

GitHub アプリケーションに関連付けられている名前、リンク、シークレットなどの詳細を表示するには、パイプライン に移動し、GitHub アプリの表示 をクリックします。

3.1.3. GitHub アプリケーションの手動設定および Pipelines as Code のシークレットの作成

GitHub ユーザーインターフェイスを使用して GitHub アプリケーションを作成できます。次に、GitHub アプリケーションに接続するために Pipelines as Code を設定するシークレットを作成する必要があります。

追加の GitHub アプリケーションをサポートするために追加の Pipelines as Code コントローラーを作成した場合は、追加のコントローラーに対してこの手順を使用する必要があります。

手順

  1. GitHub アカウントにサインインします。
  2. GitHub メニューで、Settings Developer settings GitHub Apps を選択し、New GitHub App をクリックします。
  3. 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}')

      あるいは、追加の Pipelines as Code コントローラー用に GitHub アプリケーションを設定するには、次の例のように、pipelines-as-code-controller を、設定したコントローラーの名前に置き換えます。

      コマンドの例

      $ echo https://$(oc get route -n openshift-pipelines pac_controller_2 -o jsonpath='{.spec.host}')

    • Webhook secret: 任意のシークレット。次のコマンドを実行してシークレットを生成できます。

      $ openssl rand -hex 20
  4. Repository permissions セクションで次の項目を選択します。

    • Checks: Read & Write
    • Contents: Read & Write
    • Issues: Read & Write
    • Metadata: Read-only
    • Pull request: Read & Write
  5. Organization permissions セクションで次の項目を選択します。

    • Members: Read-only
    • Plan: Read-only
  6. 次のイベントにサブスクライブします。

    • Check run
    • Check suite
    • Commit comment
    • Issue comment
    • Pull request
    • プッシュ
  7. Create GitHub App をクリックします。
  8. 新たに作成された GitHub App の Details ページで、上部に表示される App ID を書き留めます。
  9. Private keys セクションで、Generate Private key をクリックして GitHub アプリケーションの秘密鍵を自動的に生成およびダウンロードします。今後の参照や使用のために秘密鍵を安全に保管します。
  10. 作成したアプリを Pipelines as Code で使用するリポジトリーにインストールします。
  11. 次のコマンドを入力して、新しく作成された GitHub アプリケーションにアクセスできるように Pipelines as Code を設定します。

    $ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \ 1
            --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ 2
            --from-literal github-application-id="<APP_ID>" \ 3
            --from-literal webhook.secret="<WEBHOOK_SECRET>" 4
    1
    追加の GitHub アプリケーションをサポートするために追加の Pipelines as Code コントローラーを作成し、追加のコントローラー用にアプリケーションを設定する場合は、pipelines-as-code-secret を、コントローラーの secretName パラメーターで設定した名前に置き換えます。
    2
    GitHub アプリケーションの設定時にダウンロードした秘密鍵へのパス。
    3
    GitHub アプリケーションの App ID
    4
    GitHub アプリケーションの作成時に提供された Webhook シークレット。
注記

GitHub Enterprise から設定されたヘッダーを検出し、それを GitHub Enterprise API 承認 URL に使用することで、Pipelines as Code は自動的に GitHub Enterprise と連携します。

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 に存在するリポジトリーのリストに拡張できます。この設定を設定するために管理者権限は必要ありません。

手順

  1. TektonConfig カスタムリソース (CR) の pipelinesAsCode.settings 仕様で、secret-github-app-token-scoped パラメーターを false に設定します。この設定により、GitHub トークンのスコープを、グローバルおよびリポジトリーレベルの設定にリストされているプライベートおよびパブリックリポジトリーに設定できるようになります。
  2. 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"
  3. 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/projectowner1/project1owner2/project2owner3/project3、および linda/project リポジトリーです。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.