DevSecOpsのためのトラブルシューティング

DevSecOps を使用する際に発生する可能性のある問題のトラブルシューティングに、これらのヒントをお役立てください。

一般的なトラブルシューティング方法

  • UI が低速であるか、ログのロードに失敗した場合は、ページを再ロードしてください。

  • 状況ページ で停止を確認します。

  • パイプラインを再度実行します。

    パイプラインの再実行
    手動プロモーショントリガー

IBM 環境の問題

Git のレート制限によりパイプラインの実行が遅い

パイプラインの実行が遅く見え、パイプラインの実行、完了に時間がかかる。

また、過去ログのあちこちに次のような記述がある:

Unable to use this tool because the git API rate limit is exceeded. Please try again in <n> minutes.

パイプラインは内部的に Git API リクエストを使用します ( Git ステータスの設定、issue の作成 / 更新など)。 Git のレート制限がある Git トークンごとのAPIリクエスト数(1時間あたり) この制限に達しそうになると、パイプラインの実行が早期にアボートするのを防ぐために、リクエストを一時停止し、パイプラインの実行も一時停止する内部パイプラインメカニズムがある。 その結果、パイプラインが長くなる可能性がある。

この Git レート制限の問題を克服する:

  1. Git 証拠品ロッカーからCOS証拠品ロッカー(COSのみとも呼ばれる)への移行。 IBM Cloud ドキュメントの 該当セクションを参照のこと。
  2. パイプラインおよびトリガーには、異なる Git トークンを使用してください。

コンテナー化タスクの check-registry ステップがエラーで失敗する

ストレージクォータエラー
ストレージクォータエラー

IBM Cloud レジストリーは、制限された割り当て量を提供し、超過できるイメージの数が多すぎます。

  1. イメージに移動し、不要なイメージを削除します。
  2. パイプラインを再実行します。

以下のコマンドを使用して、割り当て量の制限と使用量を確認できます。

ibmcloud cr quota

ステップのログが表示されない

ログが表示されない
ログが表示されない

これは、Tekton 環境の問題です。

ページを再ロードしてみてください。 ダウンロード・ボタンを使用してログをダウンロードします。

ログをダウンロードする
ログをダウンロードする

テンプレートとパイプラインの問題

基本イメージにアクセスできないため、タスクはキャンセルされました

ベース画像にアクセスできない
ベース画像にアクセスできない

ご使用の Artifactory 資格情報が正しいかどうかを確認してください。 ここで新規 Artifactory トークンを作成できます。 以下を実行して、シークレットを手動で作成できます。

kubectl create secret docker-registry mysecret \
--dry-run \
--docker-server=<artifactory-server-domain> \
--docker-username=<username> \
--docker-password=<artifactory token> \
--docker-email=<email> \
-o yaml

以下のような出力が表示されます。

apiVersion: v1
data:
  .dockerconfigjson: <your secret>
kind: Secret
metadata:
  creationTimestamp: null
  name: regcred
type: kubernetes.io/dockerconfigjson

パイプライン・プロパティーで、 artifactory-dockerconfigjson パラメーターを .dockerconfigjson 値で更新します。

artifactory-dockerconfigjsonの更新
artifactory-dockerconfigjsonの更新

詳しくは、 シークレットの作成に関する kubectl 資料(: external) を参照してください。

パイプラインが早期に失敗する

パイプラインが早期に失敗すると、以下のメッセージが表示されます。

Pipeline could not run, resource failed to apply - Kind: "Secret", Name: "pipeline-pull-secret" ResourceError

この場合、パイプラインがブートしなかったため、パイプラインで障害が発生しました。 そのため、ログは残っていない。

このパイプラインで使用されている、 Docker の画像を IBM Container Registry から取得する秘密 dockerconfig.json は正しくありません。

このシークレットが正しくないか、このシークレットに関連付けられている API キーがローテートまたは取り消されている可能性があります。

新しいシークレット dockerconfig.json 値を生成し、この新しいシークレット値をパイプラインで使用します(パイプラインパラメータとして、または Secrets Manager に保存して使用します)。

新しい dockerconfig.json を生成するには、以下のコマンドを実行する:

kubectl create secret docker-registry my-registry-secret \
 -o json \
 --dry-run=client \
 --docker-server=icr.io \
 --docker-username=iamapikey \
 --docker-email=john-doe@ibm.com \
 --docker-password=<apikey> \
  | jq -r '.data[".dockerconfigjson"]'

ここで、 <apikey> は IBM Cloud Cloud API キーまたはサービス ID API キーです。

パイプラインが複数の Artifactory リポジトリーからイメージをプルできない

パイプラインは、あるリポジトリーからイメージをプルするのに成功しましたが、別のリポジトリーからは成功しませんでした。

単一のリポジトリーからイメージをプルするように構成されているため、パイプラインが失敗しました。

複数のリポジトリーに対する認証をサポートするために、新規 Artifactory dockerconfigjson 秘密を手動で作成します。

Artifactory内の複数のリポジトリーからイメージをプルするための認証をサポートするには、新しい dockerconfigjson を生成し、シークレット・タイプ artifactory-dockerconfigjson 環境プロパティーを 1 つ以上のパイプラインに追加します。

以下のスクリプトは、2 つの異なる Artifactory リポジトリーの認証詳細を提供する artifactory dockerconfigjson を生成するためのサンプルです。 これはカスタマイズ可能なスクリプトです。

前提条件

kubectl コマンドと jq コマンドをインストールする必要があります。

ステップ

  1. LF (改行) 文字モードの行末にファイルを保存するテキスト・エディターを開きます。

  2. ファイルを作成し、以下のスクリプトの内容をコピーします。

    dockerconfig_1=$(kubectl create secret docker-registry my-registry-secret \
    --output json \
    --dry-run=client \
    --docker-server="<artifactory_repo_host>" \
    --docker-username="<email>" \
    --docker-email="<email>" \
    --docker-password="<artifactory_token>" \
    | jq -r '.data[".dockerconfigjson"]')
    
    dockerconfig_2=$(kubectl create secret docker-registry my-registry-secret \
    --output json \
    --dry-run=client \
    --docker-server="<second_repo_host>" \
    --docker-username="<email>" \
    --docker-email="<email>" \
    --docker-password="<second_artifactory_token>" \
    | jq -r '.data[".dockerconfigjson"]')
    
    echo $dockerconfig_1 | base64 -d > first_secret.json
    echo $dockerconfig_2 | base64 -d > second_secret.json
    new_dockerconfig=$(jq -s '.[0] * .[1]' first_secret.json second_secret.json | base64 -w0)
    echo ${new_dockerconfig} > final_dockerconfig.txt
    
  3. プレースホルダー値を実際の認証の詳細に置き換えます。

    • <artifactory_repo_host> を最初のリポジトリーへのリンクに置き換えます。
    • <artifactory_token> を最初のリポジトリーの認証トークンに置き換えます。
    • <email> を、認証に関連付けられた E メールに置き換えます。
    • <second_repo_host> を 2 番目のリポジトリーへのリンクに置き換えます。
    • <second_artifactory_token> を、2 番目のリポジトリーの認証トークンに置き換えます。
  4. ファイルを保存します。

  5. ファイルが書き込み許可のあるディレクトリーに保存されていることを確認してください。

  6. スクリプトを実行します。

  7. final_dockerconfig.txt の内容をシークレットとして artifactory-dockerconfigjson のパイプライン環境プロパティーに追加します。 Secrets Manager または Key Protectを使用している場合は、適切な手法を使用してこのファイルの内容を保存してください。

サブモジュール・ファイルが見つからないため、CRA または Docker のビルドに失敗する

CRAや Docker ビルドなどのパイプラインステージが失敗すると、次のようなエラーメッセージが表示されることがある:

failed to calculate checksum of ref moby::...: failed to walk /var/lib/docker/tmp/buildkit-mount.../common-dev-assets/module-assets/ci: lstat ... no such file or directory

このエラーは、リポジトリに Git サブモジュールが含まれているにもかかわらず、パイプラインではデフォルトでサブモジュールがクローンされないために発生します。 各パイプラインステージは独自のコンテナで実行され、リポジトリのフレッシュチェックアウトを行うため、明示的に初期化しない限りサブモジュールの内容は欠落します。

この問題を解決するには、 Git サブモジュールが必要となるすべての段階で初期化されていることを確認する必要があります。 特にCRAの場合は、カスタムCRAスクリプトにサブモジュールの初期化を追加できます。

例えば、スクリプトを更新して、以下を含める:

git submodule update --init --recursive

これにより、CRAのビルドプロセスが実行される前にサブモジュールが利用可能であることが保証される。

イメージ署名の問題

イメージ署名タスクが失敗した場合は、 イメージ署名の資料 を参照して、署名鍵が正しく生成されて保管されていることを確認してください。

パイプライン構成に定義されていない動的スキャン・ステージに関連する問題

CI パイプラインの実行がエラーで失敗します。

ダイナミックスキャンステージ
」でCIパイプラインの実行が失敗する ダイナミックスキャンステージ
」でCIパイプラインの実行が失敗する

このエラーは、CI パイプライン構成に動的スキャンを実行するためのタスク定義が含まれていない場合に発生します。 .pipeline-config.yaml に以下のスニペットを追加し、ご使用のアプリケーションに合わせてステップをカスタマイズします。

   dynamic-scan:
      dind: true
      abort_on_failure: false
      image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.12@sha256:ff4053b0bca784d6d105fee1d008cfb20db206011453071e86b69ca3fde706a4
      script: |
      #!/usr/bin/env bash
      echo "Please insert script to invoke/execute dynamic scan tool like OWASP ZAP on the built and deployed application."

ステージについて詳しくは、 カスタム・スクリプト を参照してください。

サポートの利用

  • Stack Overflowで、他のユーザーが同じ問題に遭遇したかどうかを確認することができます。 フォーラムを使用して質問する場合は、「ibm-cloud」と「 "DevSecOps" 」のタグを付けて、 IBM Cloud の開発チームが見られるようにしてください。
  • IBM Cloud IBM の を搭載した のAIアシスタントは、 での作業や、利用可能なカタログのサービスを使ったソリューションの構築について学ぶお手伝いをします。 watsonx IBM Cloud AIアシスタントのヘルプを参照してください
  • それでも問題を解決できない場合は、サポート Case をオープンできます。 サポート・ケースのオープン、事例の重要度、応答時間に関する情報については、サポート・ケースの利用 または サポート・ケースのエスカレーションを参照してください。