DevSecOps のトラブルシューティング
以下のヒントを使用して、 DevSecOps の使用時に発生する可能性のある問題のトラブルシューティングに役立ててください。
一般的なトラブルシューティング方法
-
UI が低速であるか、ログのロードに失敗した場合は、ページを再ロードしてください。
-
状況ページ で停止を確認します。
-
パイプラインを再度実行します。
図 1. 手動プロモーション・トリガー
IBM 環境の問題
コンテナー化タスクの check-registry ステップがエラーで失敗する

IBM Cloud レジストリーは、制限された割り当て量を提供し、超過できるイメージの数が多すぎます。
- イメージに移動し、不要なイメージを削除します。
- パイプラインを再実行します。
以下のコマンドを使用して、割り当て量の制限と使用量を確認できます。
ibmcloud cr quota
ステップのログが表示されない

これは、Tekton 環境の問題です。
ページを再ロードしてみてください。 ダウンロード・ボタンを使用してログをダウンロードします。

テンプレートとパイプラインの問題
基本イメージにアクセスできないため、タスクはキャンセルされました

ご使用の 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
値で更新します。

詳しくは、 シークレットの作成に関する 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
コマンドをインストールする必要があります。
ステップ
-
LF (改行) 文字モードの行末にファイルを保存するテキスト・エディターを開きます。
-
ファイルを作成し、以下のスクリプトの内容をコピーします。
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
-
プレースホルダー値を実際の認証の詳細に置き換えます。
<artifactory_repo_host>
を最初のリポジトリーへのリンクに置き換えます。<artifactory_token>
を最初のリポジトリーの認証トークンに置き換えます。<email>
を、認証に関連付けられた E メールに置き換えます。<second_repo_host>
を 2 番目のリポジトリーへのリンクに置き換えます。<second_artifactory_token>
を、2 番目のリポジトリーの認証トークンに置き換えます。
-
ファイルを保存します。
-
ファイルが書き込み許可のあるディレクトリーに保存されていることを確認してください。
-
スクリプトを実行します。
-
final_dockerconfig.txt
の内容をシークレットとしてartifactory-dockerconfigjson
のパイプライン環境プロパティーに追加します。 Secrets Manager または Key Protectを使用している場合は、適切な手法を使用してこのファイルの内容を保存してください。
イメージ署名の問題
イメージ署名タスクが失敗した場合は、 イメージ署名の資料 を参照して、署名鍵が正しく生成されて保管されていることを確認してください。
パイプライン構成に定義されていない動的スキャン・ステージに関連する問題
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 チャネルを積極的にモニターします。