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

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

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

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

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

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

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

    パイプラインを再度実行します
    図 1. 手動プロモーション・トリガー

IBM 環境の問題

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

ストレージ割り当て量エラー
図 2. ストレージ割り当て量エラー

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

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

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

ibmcloud cr quota

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

ログには
図 3 は表示されません。 ログに
が表示されない

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

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

ログのダウンロード
図 4. ログをダウンロードします。

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

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

基本イメージにアクセスしない
図 5. 基本イメージがアクセスされない

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

kubectl create secret docker-registry mysecret \
--dry-run \
--docker-server=wcp-compliance-automation-team-docker-local.artifactory.swg-devops.com  \
--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 を更新します
(図 6)。 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を使用している場合は、適切な手法を使用してこのファイルの内容を保存してください。

イメージ署名の問題

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

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

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

動的スキャン・ステージで CI パイプラインの実行が失敗する
図 7. 動的スキャン・ステージ
で 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."

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

コミュニティーのヘルプの使用

IBM Cloud 開発チームやその他のユーザーから直接ヘルプを入手できます。

DevSecOps チームは、 DevSecOps、 Continuous Delivery サービス、およびツールチェーンに関する質問について、Slack チャネルを積極的にモニターします。

Slack チャンネルで IBM にご意見をお送りください。