Menu Close

4.7. OpenShift Pipeline での Tekton Hub の使用

重要

Tekton Hub はテクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。Red Hat は実稼働環境でこれらを使用することを推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。

Red Hat のテクノロジープレビュー機能のサポート範囲についての詳細は、https://access.redhat.com/ja/support/offerings/techpreview/ を参照してください。

Tekton Hub は、CI/CD ワークフローの再利用可能なタスクとパイプラインを検出、検索、および共有するのに役立ちます。Tekton Hub のパブリックインスタンスは、hub.tekton.dev で利用できます。クラスター管理者は、エンタープライズで使用するために Tekton Hub のカスタムインスタンスをインストールしてデプロイすることもできます。

4.7.1. OpenShift Container Platform クラスターへの Tekton Hub のインストールとデプロイ

Tekton Hub はオプションのコンポーネントです。クラスター管理者は、TektonConfig カスタムリソース (CR) を使用してインストールすることはできません。Tekton Hub をインストールおよび管理するには、TektonHub CR を使用します。

注記

Github Enterprise または Gitlab Enterprise を使用している場合は、エンタープライズサーバーと同じネットワークに Tekton Hub をインストールしてデプロイします。たとえば、エンタープライズサーバーが VPN の背後で実行されている場合は、同じく VPN の背後にあるクラスターに Tekton Hub をデプロイします。

前提条件

  • Red Hat OpenShift Pipelines Operator がクラスターのデフォルトの openshift-pipelines namespace にインストールされていることを確認します。

手順

  1. Tekton Hub リポジトリーのフォークを作成します。
  2. フォークされたリポジトリーのクローンを作成します。
  3. config.yaml ファイルを更新して、次のスコープを持つ少なくとも 1 人のユーザーを含めます。

    • agent:create スコープを持つユーザーで、カタログに変更があった場合に、一定間隔後に Tekton Hub データベースを更新する cron ジョブを設定できます。
    • Tekton Hub のデータベース内のカタログとすべてのリソースを更新できる catalog:refresh スコープを持つユーザー。
    • 追加のスコープを取得できる config:refresh スコープを持つユーザー。

      ...
      scopes:
      - name: agent:create
        users: <username_registered_with_the_Git_repository_hosting_service_provider>
      - name: catalog:refresh
        users: <username_registered_with_the_Git_repository_hosting_service_provider>
      - name: config:refresh
        users: <username_registered_with_the_Git_repository_hosting_service_provider>
      ...

      サポートされているサービスプロバイダーは、GitHub、GitLab、および BitBucket です。

  4. Git リポジトリーホスティングプロバイダーを使用して OAuth アプリケーションを作成し、クライアント ID とクライアントシークレットをメモします。

    • GitHub OAuth アプリケーションの場合、Homepage URLAuthorization callback URL<auth-route> として設定します。
    • GitLab OAuth アプリケーションの場合、REDIRECT_URI<auth-route>/auth/gitlab/callback として設定します。
    • BitBucket OAuth アプリケーションの場合、Callback URL<auth-route> として設定します。
  5. Tekton Hub API シークレットの <tekton_hub_repository>/config/02-api/20-api-secret.yaml ファイルの次のフィールドを編集します。

    • GH_CLIENT_ID: Git リポジトリーホスティングサービスプロバイダーで作成された OAuth アプリケーションのクライアント ID。
    • GH_CLIENT_SECRET: Git リポジトリーホスティングサービスプロバイダーで作成された OAuth アプリケーションのクライアントシークレット。
    • GHE_URL: GitHub Enterprise を使用して認証している場合は、GitHub Enterprise URL。このフィールドの値としてカタログへの URL を指定しないでください。
    • GL_CLIENT_ID: GitLab OAuth アプリケーションからのクライアント ID。
    • GL_CLIENT_SECRET: GitLab OAuth アプリケーションからのクライアントシークレット。
    • GLE_URL: GitLab Enterprise を使用して認証している場合は、GitLab Enterprise URL。このフィールドの値としてカタログへの URL を指定しないでください。
    • BB_CLIENT_ID: BitBucket OAuth アプリケーションからのクライアント ID。
    • BB_CLIENT_SECRET: BitBucket OAuth アプリケーションからのクライアントシークレット。
    • JWT_SIGNING_KEY: ユーザー用に作成された JSON Web Token (JWT) に署名するために使用される長いランダムな文字列。
    • ACCESS_JWT_EXPIRES_IN: アクセストークンの有効期限が切れるまでの制限時間を追加します。たとえば、1m、ここで m は分を示します。サポートされている時間の単位は、秒 (s)、分 (m)、時間 (h)、日 (d)、および週 (w) です。
    • REFRESH_JWT_EXPIRES_IN: 更新トークンの有効期限が切れるまでの制限時間を追加します。たとえば、1m、ここで m は分を示します。サポートされている時間の単位は、秒 (s)、分 (m)、時間 (h)、日 (d)、および週 (w) です。トークンの更新に設定された有効期限が、トークンアクセスに設定された有効期限よりも長いことを確認してください。
    • AUTH_BASE_URL: OAuth アプリケーションのルート URL。

      注記
      • サポートされている Git リポジトリーホスティングサービスプロバイダーのいずれかについて、クライアント ID とクライアントシークレットに関連するフィールドを使用します。
      • Git リポジトリーホスティングサービスプロバイダーに登録されたアカウントクレデンシャルにより、catalog: refresh スコープを使用するユーザーは、すべてのカタログリソースを認証してデータベースにロードできます。
  6. 変更をコミットして、フォークされたリポジトリーにプッシュします。
  7. TektonHub CR が次の例のようになっていることを確認します。

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonHub
    metadata:
      name: hub
    spec:
      targetNamespace: openshift-pipelines 1
      api:
        hubConfigUrl: https://raw.githubusercontent.com/tektoncd/hub/main/config.yaml 2
    1
    Tekton Hub をインストールする必要がある namespace。デフォルトは openshift-pipelines です。
    2
    フォークされたリポジトリーの config.yaml ファイルの URL に置き換えます。
  8. Tekton Hub をインストールします。

    $ oc apply -f TektonHub.yaml 1
    1
    TektonConfig CR のファイル名またはパス。
  9. インストールのステータスを確認します。

    $ oc get tektonhub.operator.tekton.dev
    NAME   VERSION   READY   REASON   APIURL                    UIURL
    hub    v1.7.2    True             https://api.route.url/    https://ui.route.url/

4.7.1.1. Tekton Hub でカタログを手動で更新する

OpenShift Container Platform クラスターに Tekton Hub をインストールしてデプロイすると、Postgres データベースもインストールされます。最初、データベースは空です。カタログで使用可能なタスクとパイプラインをデータベースに追加するには、クラスター管理者はカタログを更新する必要があります。

前提条件

  • <tekton_hub_repository>/config/ ディレクトリーにいることを確認してください。

手順

  1. Tekton Hub UI で、Login -→ Sign In With GitHub をクリックします。

    注記

    GitHub は、公開されている Tekton Hub UI の例として使用されています。クラスターへのカスタムインストールの場合、クライアント ID とクライアントシークレットを提供したすべての Git リポジトリーホスティングサービスプロバイダーが一覧表示されます。

  2. ホームページで、ユーザープロファイルをクリックし、トークンをコピーします。
  3. カタログ更新 API を呼び出します。

    • 特定の名前でカタログを更新するには、次のコマンドを実行します。

      $ curl -X POST -H "Authorization: <jwt-token>" \ 1
        <api-url>/catalog/<catalog_name>/refresh 2
      1
      UI からコピーされた Tekton Hub トークン。
      2
      API Pod の URL とカタログの名前。

      出力サンプル

      [{"id":1,"catalogName":"tekton","status":"queued"}]
    • すべてのカタログを更新するには、次のコマンドを実行します。

      $ curl -X POST -H "Authorization: <jwt-token>" \ 1
        <api-url>/catalog/refresh 2
      1
      UI からコピーされた Tekton Hub トークン
      2
      API Pod の URL。
  4. ブラウザーでページを更新します。

4.7.1.2. オプション: Tekton Hub でカタログを更新するための cron ジョブの設定

クラスター管理者は、オプションで cron ジョブを設定して、一定の間隔の後にデータベースを更新し、カタログの変更が Tekton Hub Web コンソールに表示されるようにすることができます。

注記

リソースがカタログに追加または更新された場合、カタログを更新すると、これらの変更が Tekton Hub UI に表示されます。ただし、リソースがカタログから削除された場合、カタログを更新してもデータベースからリソースは削除されません。Tekton Hub UI は、削除されたリソースを引き続き表示します。

前提条件

  • <project_root>/config/ ディレクトリーにいることを確認します。ここで、<project_root> は、複製された Tekton Hub リポジトリーの最上位ディレクトリーです。
  • カタログを更新するスコープを持つ JSON Web トークン (JWT) トークンがあることを確認します。

手順

  1. 長期間使用するためのエージェントベースの JWT トークンを作成します。

    $ curl -X PUT --header "Content-Type: application/json" \
        -H "Authorization: <access-token>" \ 1
        --data '{"name":"catalog-refresh-agent","scopes": ["catalog:refresh"]}' \
        <api-route>/system/user/agent
    1
    JWT トークン。

    必要なスコープを持つエージェントトークンは、{"token":"<agent_jwt_token>"} 形式で返されます。返されたトークンをメモし、カタログ更新 cron ジョブ用に保存します。

  2. 05-catalog-refresh-cj/50-catalog-refresh-secret.yaml ファイルを編集して、HUB_TOKEN パラメーターを前の手順で返された <agent_jwt_token> に設定します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: catalog-refresh
    type: Opaque
    stringData:
      HUB_TOKEN: <hub_token> 1
    1
    前の手順で返された <agent_jwt_token>
  3. 変更した YAML ファイルを適用します。

    $ oc apply -f 05-catalog-refresh-cj/ -n openshift-pipelines.
  4. オプション: デフォルトでは、cron ジョブは 30 分ごとに実行するように設定されています。間隔を変更するには、05-catalog-refresh-cj/51-catalog-refresh-cronjob.yaml ファイルの schedule パラメーターの値を変更します。

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: catalog-refresh
      labels:
        app: tekton-hub-api
    spec:
      schedule: "*/30 * * * *"
      ...

4.7.1.3. オプション: Tekton Hub に設定に新しいユーザーを追加する

手順

  1. 目的のスコープに応じて、クラスター管理者は config.yaml ファイルに新しいユーザーを追加できます。

    ...
    scopes:
      - name: agent:create
        users: [<username_1>, <username_2>] 1
      - name: catalog:refresh
        users: [<username_3>, <username_4>]
      - name: config:refresh
        users: [<username_5>, <username_6>]
    
    default:
      scopes:
        - rating:read
        - rating:write
    ...
    1
    Git リポジトリーホスティングサービスプロバイダーに登録されているユーザー名。
    注記

    初めてログインするユーザーは、config.yaml に追加されていても、デフォルトのスコープしかありません。追加のスコープをアクティブ化するには、ユーザーが少なくとも 1 回ログインしていることを確認してください。

  2. config.yaml ファイルに config-refresh スコープがあることを確認してください。
  3. 設定を更新します。

    $ curl -X POST -H "Authorization: <access-token>" \ 1
        --header "Content-Type: application/json" \
        --data '{"force": true} \
        <api-route>/system/config/refresh
    1
    JWT トークン。