DevSecOps 故障诊断
使用这些提示可帮助您对使用 DevSecOps 时可能迂到的问题进行故障诊断。
常规故障诊断方法
-
如果 UI 运行缓慢或日志无法装入,请重新装入该页面。
-
在 状态页面 上检查中断
-
再次运行管道。
图 1。 手动提升触发器
IBM 环境问题
容器化任务的检查注册表步骤失败,发生错误

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
在管道属性中,使用 .dockerconfigjson
值更新 artifactory-dockerconfigjson
参数。

有关更多信息,请查看 kubectl documentation on create a secret(: external)。
管道提前失败
当管道提前发生故障时,会显示以下消息:
Pipeline could not run, resource failed to apply - Kind: "Secret", Name: "pipeline-pull-secret" ResourceError
在这种情况下,在管道中发生故障,因为它未引导。 因此,没有可用的日志。
从 IBM Container Registry 拉取此管道所使用的 Docker 映像的 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 密钥或服务标识 API 密钥。
管道无法从多个 artifactory 存储库中拉取映像
管道已成功从一个存储库中拉取映像,但未从另一个存储库中拉取映像。
管道失败,因为它已配置为从单个存储库中拉取映像。
手动创建新的 artifactory dockerconfigjson
私钥以支持对多个存储库进行认证。
要支持认证以从 Artifactory中的多个存储库拉取映像,请生成新的 dockerconfigjson
并将私钥类型 artifactory-dockerconfigjson
环境属性添加到一个或多个管道。
以下脚本是用于生成用于为两个不同的 artifactory 存储库提供认证详细信息的 artifactory dockerconfigjson
的样本。 这是可定制的脚本。
先决条件
必须安装 kubectl
和 jq
命令。
步骤
-
打开文本编辑器,该编辑器在 LF (换行) 字符方式行尾中对文件进行 ssaves。
-
创建文件并复制以下脚本的内容:
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>
替换为与认证关联的电子邮件。 - 将
<second_repo_host>
替换为指向第二个存储库的链接。 - 将
<second_artifactory_token>
替换为第二个存储库的认证令牌。
- 将
-
保存文件。
-
确保文件保存在具有写许可权的目录中。
-
运行脚本。
-
将
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 团队主动监视 Slack 通道,以获取有关 DevSecOps,Continuous Delivery 服务和工具链的问题。