4.7. OpenShift Pipeline での Tekton Hub の使用
Tekton Hub はテクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品サービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
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 にインストールされている。
手順
- Tekton Hub リポジトリーのフォークを作成します。
- フォークされたリポジトリーのクローンを作成します。
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 です。
-
Git リポジトリーホスティングプロバイダーを使用して OAuth アプリケーションを作成し、クライアント ID とクライアントシークレットをメモします。
-
GitHub OAuth アプリケーションの場合、
Homepage URL
とAuthorization callback URL
を<auth-route>
として設定します。 -
GitLab OAuth アプリケーションの場合、
REDIRECT_URI
を<auth-route>/auth/gitlab/callback
として設定します。 -
BitBucket OAuth アプリケーションの場合、
Callback URL
を<auth-route>
として設定します。
-
GitHub OAuth アプリケーションの場合、
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
スコープを使用するユーザーは、すべてのカタログリソースを認証してデータベースにロードできます。
-
- 変更をコミットして、フォークされたリポジトリーにプッシュします。
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
Tekton Hub をインストールします。
$ oc apply -f TektonHub.yaml 1
- 1
TektonConfig
CR のファイル名またはパス。
インストールのステータスを確認します。
$ 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/
ディレクトリーにいることを確認してください。
手順
Tekton Hub UI で、Login -→ Sign In With GitHub をクリックします。
注記GitHub は、公開されている Tekton Hub UI の例として使用されています。クラスターへのカスタムインストールの場合、クライアント ID とクライアントシークレットを提供したすべての Git リポジトリーホスティングサービスプロバイダーがリスト表示されます。
- ホームページで、ユーザープロファイルをクリックし、トークンをコピーします。
カタログ更新 API を呼び出します。
特定の名前でカタログを更新するには、次のコマンドを実行します。
$ curl -X POST -H "Authorization: <jwt-token>" \ 1 <api-url>/catalog/<catalog_name>/refresh 2
出力サンプル
[{"id":1,"catalogName":"tekton","status":"queued"}]
すべてのカタログを更新するには、次のコマンドを実行します。
$ curl -X POST -H "Authorization: <jwt-token>" \ 1 <api-url>/catalog/refresh 2
- ブラウザーでページを更新します。
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) トークンがあることを確認します。
手順
長期間使用するためのエージェントベースの 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 ジョブ用に保存します。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>
。
変更した YAML ファイルを適用します。
$ oc apply -f 05-catalog-refresh-cj/ -n openshift-pipelines.
オプション: デフォルトでは、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 に設定に新しいユーザーを追加する
手順
目的のスコープに応じて、クラスター管理者は
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 回ログインしていることを確認してください。-
config.yaml
ファイルにconfig-refresh
スコープがあることを確認してください。 設定を更新します。
$ curl -X POST -H "Authorization: <access-token>" \ 1 --header "Content-Type: application/json" \ --data '{"force": true} \ <api-route>/system/config/refresh
- 1
- JWT トークン。
4.7.2. 開発者パースペクティブから Tekton Hub をオプトアウトする
クラスター管理者は、OpenShift Container Platform クラスターの Developer パースペクティブの Pipeline builder ページで、タスクやパイプラインなどの Tekton Hub リソースの表示をオプトアウトできます。
前提条件
-
Red Hat OpenShift Pipelines Operator がクラスターにインストールされており、
oc
コマンドラインツールが使用可能であることを確認します。
手順
Developer パースペクティブで Tekton Hub リソースを表示することを選択するには、
TektonConfig
カスタムリソース (CR) のenable-devconsole-integration
フィールドの値をfalse
に設定します。apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: targetNamespace: openshift-pipelines ... hub: params: - name: enable-devconsole-integration value: "false" ...
デフォルトでは、
TektonConfig
CR にはenable-devconsole-integration
フィールドが含まれておらず、Red Hat OpenShift Pipelines Operator は値がtrue
であると想定します。
4.7.3. 関連情報
- Tekton Hub の GitHub リポジトリー。
- OpenShift Pipelines のインストール
- Red Hat OpenShift Pipelines リリースノート