IBM Cloud Docs
Delivery Pipeline のトラブルシューティング

Delivery Pipeline のトラブルシューティング

Delivery Pipeline を使用中に生じる可能性がある一般的な問題として、パイプラインの作成、ツール統合の構成に関する問題などが挙げられます。 多くの場合、いくつかの簡単なステップを実行することで、これらの問題から復旧することが可能です。

ツールチェーンを作成しましたが、Delivery Pipeline サービスが初期化されません。 パイプラインの初期化が完了しないのはなぜですか?

GitHub ツール統合を再度構成して保存しなければならない場合があります。

ツールチェーン内の GitHub ツールの統合が正しく構成されていない可能性があるため、パイプラインを初期化できません。

GitHub ツール統合が失敗する原因となるイベント処理の問題が発生しました。

GitHub ツール統合を再度構成して保存します。

  1. IBM Cloud コンソールから、 メニューアイコンハンバーガーアイコン > Platform Automation > Toolchains をクリックします。 **「ツールチェーン」**ページで、作成したツールチェーンをクリックして「概要」ページを開きます。 代わりに、アプリの「アプリの詳細」ページで、ツールチェーンの名前をクリックすることもできます。
  2. ツールチェーンの「概要」ページの**「リポジトリー」**カードで、GitHub ツール統合を見つけます。
  3. メニューをクリックして構成オプションにアクセスし、設定を更新して、統合の保存をクリックします。
  4. **「デリバリー・パイプライン」**カードで、Delivery Pipeline ツール統合をクリックして、パイプライン・セットアップを表示します。

自分が作成しているテンプレートからツールチェーンを作成するときに、パイプラインが適切に作成されないのはなぜですか?

pipeline.yaml 定義内のエラーが原因で、ジョブやステージなどのリソースがパイプラインから欠落している可能性があります。

自分が作成しているテンプレートからツールチェーンを作成しようとすると、「パイプライン」ページで次のエラー・メッセージが表示されます。

This pipeline was created, but might be missing jobs, stages, or other resources. You can use this pipeline, or if you prefer, you can delete it and create another pipeline.

この問題は通常、pipeline.yaml 定義内のエラーが原因で発生します。

このエラーをデバッグするには、以下のいずれかの方法を使用することができます。

  • パイプライン・ユーザー・インターフェースを使用することで、自分のテンプレートで作成しようとしているパイプラインを複製する、サンプル・パイプラインを作成します。 パイプライン URL に /yaml を追加して、類似の pipeline.yaml ファイルを生成してください。これを使用すると違いがはっきりするので、見つけやすくなります。 例えば、https://cloud.ibm.com/devops/pipelines/<your pipeline id>/yaml?env_id=<your region> です。

  • ヘッドレス・ツールチェーン作成メカニズムを使用します。 **「ツールチェーンの作成」ページでデバッガーを開き、window.Testflags = {nocreate: 1} 式を評価します。 このモードで「ツールチェーンの作成」**をクリックすると、ツールチェーンは作成されません。 その代わりに、API に渡された情報がコンソールに返されるので、それを確認することができます。

パイプラインを実行しようとしましたが、Git リポジトリーへのアクセスに関するエラーが発生するのはなぜですか?

パイプラインは、アクセス・トークンを使用して Git リポジトリーを複製します。 このアクセス・トークンが有効でない場合、Git 統合の所有者は Git リポジトリーにアクセスできません。

サポートされる Git 統合には、GitHub、GitLab、Bitbucket、または Git Repos and Issue Tracking ツールの統合が含まれます。

パイプラインを実行しようとすると、以下のエラー・メッセージを受け取ります。

The access token for this git repository is no longer valid. Please reconfigure the git integration to ensure the integration owner has access to this repository.

パイプラインが Git リポジトリーを複製するために使用するアクセス・トークンは無効になりました。 この問題は、トークンが無効にされたことが原因で発生する場合があります。 アクセス権限が変更されたために Git 統合の所有者がリポジトリーにアクセスできなくなった場合にも、アクセス・トークンが無効になることがあります。

Git 統合を再度構成して保存します。

  1. IBM Cloud コンソールから、 メニューアイコンハンバーガーアイコン > Platform Automation > Toolchains をクリックします。 **「ツールチェーン」**ページで、更新したい Git 統合を含むツールチェーンをクリックして「概要」ページを開きます。 代わりに、アプリの「アプリの詳細」ページで、ツールチェーンの名前をクリックすることもできます。
  2. ツールチェーンの「概要」ページの**「リポジトリー」**カードで、Git ツール統合を見つけます。
  3. メニューをクリックして構成オプションにアクセスし、Git 統合所有者の許可された Git アカウントを選択し、統合の保存をクリックします。
  4. パイプラインを再実行してください。

Delivery Pipeline を使用して Kubernetes にデプロイしようとしましたが、無効なオブジェクトに関するエラーが発生するのはなぜですか?

1.0 パイプライン基本イメージには kubectl v1.14.2 が含まれています。 接続先の Kubernetes クラスターがより新しいバージョンの Kubernetes を実行している場合、エラーを受け取ることがあります。

Delivery Pipeline を使用して Kubernetes にデプロイしようとすると、以下のエラー・メッセージを受け取ります。

error:SchemaeError(io.k8s.api.core.v1.SecretProjection): invalid object doesn't have additional properties

通常、この問題は、パイプライン基本イメージに含まれる kubectl コマンドのバージョンが、クラスターで実行中の Kubernetes のバージョンと互換性がない場合に発生します。

この問題を解決するには、以下のいずれかの方法を使用することができます。

  • より新しいバージョンのパイプライン基本イメージを使用してください。これにより、作成時に、現在リリースされているバージョンの kubectl が組み込まれます。 最新のバージョンのイメージを指定する方法について詳しくは、イメージ・バージョンの指定を参照してください。

  • パイプライン・ジョブが正しいバージョンの kubectl を実行していることを確認してください。 例えば、kubectl v1.14.2 を実行するには、パイプライン・ジョブの先頭に以下の行を追加します。

  curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.2/bin/linux/amd64/kubectl
  chmod +x ./kubectl
  sudo mv ./kubectl /usr/local/bin/kubectl

1.0 パイプライン基本イメージから kubectl v1.14.2 を実行している場合、sudo オプションは使用できません。 sudo 行を以下のコマンドに置き換えて、パスに kubectl を追加します。

   mkdir ~/.bin && export PATH=~/.bin:$PATH && mv ./kubectl ~/.bin/kubectl

必要なkubectlの正確なバージョンへのアクセスについては、 kubectlのインストールとセットアップを参照してください。

パイプラインを実行しようとしましたが、IBM Cloud Container Registry から 403 エラーを受け取るのはなぜですか?

IBM Cloud® Container Registry パイプラインは IBM Cloud Container Registry との間でイメージをプッシュしたりプルしたりします。 IBM Cloud Container Registry サービスプランは、プライベート画像に使用できるストレージ容量とプルトラフィック量を決定します。

パイプラインを実行しようとすると、以下のエラー・メッセージを受け取ります。

Failed to pull image "us.icr.io/sdl-ns/achilles:a100-p203-6-20190717161046-78fbc8a3a0fbc8571d887e57499642e0326e7035": rpc error: code = Unknown desc = failed to pull and unpack image "us.icr.io/sdl-ns/achilles:a100-p203-6-20190717161046-78fbc8a3a0fbc8571d887e57499642e0326e7035": failed to copy: httpReaderSeeker: failed open: unexpected status code https://us.icr.io/v2/sdl-ns/achilles/blobs/sha256:365b19774a508fd998bc636981cb9869a406786ad811e51937fa6fb089c86005: 403 Forbidden

適用される プル・トラフィックの割り当て限度を超えた可能性があります。この場合、Docker イメージを取り出すことはできません。

保管およびプルしようとしているイメージについて、ご自分の割り当て限度と使用量を確認してください。 使用しているストレージを解放しサービス・プランを変更するか割り当て限度を変更して、指定された割り当て限度内に収まるようにしてください。

単一のパイプライン・ジョブでマイ・アプリをコンパイルしようとしましたが、失敗したのはなぜですか?

単一のパイプライン・ジョブでアプリを構築するには、4 GB のメモリー (ファイル・ストアではない) が必要です。

単一のパイプライン・ジョブでマイ・アプリをコンパイルしようとすると、ビルド・ジョブが予期しないエラーで失敗します。

単一のパイプライン・ジョブでコンパイルするために、アプリには 4 GB 以上のメモリーが必要です。

単一のパイプライン・ジョブでアプリを構築するには、以下のとおりにします。

  1. IBM Cloud® Continuous Delivery Pipeline プライベート・ワーカーを作成します。
  2. プライベート・ワーカーを使用して、ビルド・ジョブを構成します。

ファイアウォールを使用していると Delivery Pipeline が通信できないのはなぜですか?

ファイアウォールの構成が原因で、ファイアウォールで保護された環境と Delivery Pipeline の間の通信が遮断されています。

Delivery Pipeline の使用を試みましたが、ファイアウォールを介して通信することができません。

ファイアウォールで保護された環境と Delivery Pipeline の間の通信を許可するようにファイアウォールを構成する必要があります。

ファイアウォールで保護されたリソースに Delivery Pipeline がアクセスできるように、ファイアウォール構成を更新することができます。 特定の地域の CIS 許可リストサブネット範囲 を使用します。

パイプラインのトリガーまたは定義でリポジトリー参照が修正されたという通知を、なぜ受け取ったのでしょう?

ツールチェーンからリポジトリー統合を変更、追加、または削除しました。これにより、パイプライン・トリガーまたは定義に保管されている統合への参照が無効になります。

ツールチェーンからリポジトリー統合を変更、追加、または削除すると、パイプライン構成に警告アイコンと検証エラーが表示されます。

特定のシナリオでは、ツールチェーンのリポジトリー統合を変更、追加、または削除すると、パイプライン・トリガーまたは定義に保管されているこれらの統合への参照が無効になる可能性があります。

一致するリポジトリー統合がツールチェーン内にある場合、パイプラインは、これらの参照を自動的に更新して、無効な統合参照を修正しようとします。 通知が UI に表示され、以下のいずれかのメッセージが表示されます:

  • Repository reference fixed in the following triggers: [list of triggers]
  • Repository reference fixed in the following definitions: [list of definitions]

これらの通知のいずれかが表示されても、構成に警告やエラーが表示されない場合は、これ以上のアクションは必要ありません。 それでも警告またはエラーが表示される場合は、トリガーまたは定義の再度の更新または作成が必要になる可能性があります。

パイプラインが IBM Cloud Object Storage プライベートエンドポイントに接続しようとするとタイムアウトするのはなぜですか?

パイプラインを実行すると、プライベートエンドポイントを使用する IBM Cloud Object Storageへのリクエストは、応答がないままタイムアウトします。 このタイムアウトは、パイプラインを失敗させる可能性がある。

IBM Cloud Object Storage プライベート・エンドポイントに、すべての IBM Cloud クラスター・タイプからアクセスできるわけではありません。 プライベート IBM Cloud Object Storage エンドポイントは、 IBM Cloud® Virtual Private Cloud (VPC) 内のクラスターで実行されるプライベート・ワーカーからはアクセスできません。

s3.private.* IBM Cloud Object Storage エンドポイントを s3.direct.* エンドポイントに置き換えます。 s3.direct.* エンドポイントは、任意の IBM Cloud クラスター・タイプから IBM Cloud Object Storage と通信する直接エンドポイントです。

セキュア・プロパティーに関連するエラーでパイプラインが失敗するのはなぜですか?

パイプライン実行の開始時にパイプラインのセキュア・プロパティーのいずれかが解決されないと、 PipelineRuns がエラーで失敗します。

シークレット・ストア、 Secrets Manager、 Key Protect、または HashiCorp Vault からシークレット値を取得できないパイプラインは、解決できないプロパティーを示すエラー・メッセージで失敗します。 トリガーされた実行でプロパティーが直接使用されていない場合でも、解決の失敗が発生する可能性があります。 例えば、解決の失敗は、ストア内のシークレットへのパスが有効でなくなった場合、シークレット・ストアにアクセスできない場合、または許可の問題の場合に発生する可能性があります。

現在解決されていないセキュア・プロパティーがパイプラインに含まれている場合は、これらのプロパティーを更新して、 Secrets Manager、 Key Protect、または HashiCorp Vault にある有効で取得可能なシークレットを参照するようにします。

パイプライン・レベルの環境プロパティーとしてではなく、トリガーされた PipelineRun を正常に完了するために必要なセキュア・プロパティーのみをパイプライン・トリガー・プロパティーとしてパイプラインが指定していることを確認してください。 パイプライン・レベルの環境プロパティーは、必要な場合にのみ使用してください。

パイプライン定義の取り出し中にパイプラインがエラーを報告するのはなぜですか?

パイプライン定義の取り出しに関連して、 Delivery Pipeline ページにエラーが表示されます。 あるいは、 PipelineRunをトリガーしようとしたときにエラーが発生します。

パイプラインの定義をフェッチするときに障害が発生する可能性がある理由はいくつかあります。 たとえば、定義が大規模なリポジトリで定義されている場合、定義を構築する前に大規模なリポジトリのクローンを作成するのが遅れるため、定義をフェッチする要求がタイムアウトすることがあります。 もう 1 つの例は、リポジトリーに存在しなくなったブランチまたはパスを定義入力のターゲットにする場合です。

以下のいずれかのオプションを使用して、問題の解決を試みてください。

  • ページを再ロードして、定義をフェッチする新しい要求を開始してください。 これが繰り返し失敗する場合は、以下のオプションを使用して続行してください。
  • 定義入力で参照されているすべてのブランチおよびパスが、リポジトリー内に存在するリソースと一致していることを確認してください。
  • Tekton 定義が含まれているリポジトリーのサイズを小さくしてください。 不要なファイルをリポジトリーから削除し、 .gitignore を更新して不要なファイルのアップロードを除外します。
  • パイプライン定義の最小限必要なファイルのみを含めます。リポジトリー全体をターゲットにしないでください。 すべてのTekton定義関連ファイルをリポジトリのサブフォルダに移動し、 Delivery Pipeline 設定の定義入力を編集して、サブフォルダのパスをターゲットにします。 このオプションにより、リポジトリーから定義ファイルを複製するために必要な時間が短縮されます。
  • Tektonの定義が大きい場合は、定義を複数のフォルダまたは複数のリポジトリに分割することを検討してください。 次に、 Delivery Pipelineの定義入力を更新して、必要なフォルダやレポをターゲットにします。

計算されたパイプライン定義のサイズ制限は 1 MB です。 パイプラインを保存または実行するときにエラーが発生した場合は、パイプライン定義のサイズを小さくするか、複数のパイプラインに分割する必要があります。

パイプラインが Red Hat OpenShift on IBM Cloud クラスターへの接続に失敗するのはなぜですか?

oc login を試行するパイプラインは、 Red Hat OpenShift on IBM Cloud バージョン 4.13 以降を実行しているターゲット・クラスターにログインできません。

この問題は Red Hat OpenShift on IBM Cloud のバージョン 4.13で導入された変更が原因です。

この問題を回避するには、以下のプロセスを使用します。

ibmcloud login --apikey "${IBMCLOUD_API_KEY}" -r "${REGION}" -g "${RESOURCE_GROUP}"
ibmcloud oc cluster config --cluster "${CLUSTER_NAME}" --endpoint private --admin
kubectl config current-context
oc version
oc get pods -A  # To verify connection

Git clone コマンドを実行するとパイプラインが失敗するのはなぜですか?

git-clone-repo コマンドタスクを使用しているTektonパイプラインで、以下のエラーが表示されて失敗することがあります:

Clone was not successful. Code 128 - Retrying shortly...
fatal: destination path '.' already exists and is not an empty directory.

この問題は、公的に管理されているパイプライン労働者のインフラにおけるパフォーマンスの変化が原因である。

この問題を解決するには:

  • パイプラインの[Settings]でtektonの定義を探し、[Path]で'git のエントリーを見つけます。 リポジトリのリンクをクリックして開きます。 git/task-clone-repo.yaml」に移動し、そのファイルの中で「clone-repo ステップを見つける。 最新のコードについては、 テクトンのカタログ例 を参照してください。
  • git clone 呼び出しの前に、 rm -rf "lost+found" を定義に追加する。 これにより、クローン用のディレクトリが空であることが保証される。
  • パイプラインを再実行します。

試用版アカウントからパイプラインを実行すると、管理対象ワーカーで開始できないのはなぜですか?

トライアルアカウントから実行したクラシックパイプラインが、以下のエラーにより起動しません:

This type of account is not entitled to use managed workers. Private workers can be used instead or to gain access managed worker capability the account must be upgraded to a paid plan.

この動作は、トライアル・アカウントの権限の改訂が原因で発生します。

この問題を解決するには、次のオプションを試してみます。

  • 独自のクラスタ上で動作するプライベートワーカーを使用してパイプラインを実行します。
  • ライト・プランでトライアル・アカウントを 従量課金(PAYG) アカウントにアップグレードします。

パイプラインがフォークされたリポジトリからのプルリクエストイベントのトリガーに失敗するのはなぜですか?

デフォルトのパイプラインは、フォークされたリポジトリからのプルリクエストイベントに応答しません

この動作は、パイプラインの不用意な実行を防ぐための設計である。

フォークしたリポジトリからのイベントに対してパイプラインを実行できるようにするには、以下のようにする:

  • Tektonパイプライン: Git トリガーウィンドウで、 Include pull request events from forks のトグルを有効にします
  • クラシックパイプライン:ステージ設定のInputタブで、'Include pull request events from forks トグルを有効にする