IBM Cloud Docs
DevSecOps 故障诊断

DevSecOps 故障诊断

使用这些提示可帮助您对使用 DevSecOps 时可能迂到的问题进行故障诊断。

常规故障诊断方法

  • 如果 UI 运行缓慢或日志无法装入,请重新装入该页面。

  • 状态页面 上检查中断

  • 再次运行管道。

    再次运行管道
    图 1。 手动提升触发器

IBM 环境问题

容器化任务的检查注册表步骤失败,发生错误

存储器配额错误
图 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

在管道属性中,使用 .dockerconfigjson 值更新 artifactory-dockerconfigjson 参数。

更新 artifactory-dockerconfigjson
图 6。 更新 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 的样本。 这是可定制的脚本。

先决条件

必须安装 kubectljq 命令。

步骤

  1. 打开文本编辑器,该编辑器在 LF (换行) 字符方式行尾中对文件进行 ssaves。

  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> 替换为与认证关联的电子邮件。
    • <second_repo_host> 替换为指向第二个存储库的链接。
    • <second_artifactory_token> 替换为第二个存储库的认证令牌。
  4. 保存文件。

  5. 确保文件保存在具有写许可权的目录中。

  6. 运行脚本。

  7. final_dockerconfig.txt 的内容作为私钥添加到 artifactory-dockerconfigjson 的管道环境属性中。 如果使用的是 Secrets Manager 或 Key Protect,请使用相应的方法来保存此文件的内容。

映像签名问题

如果映像签名任务失败,请参阅 映像签名文档 以验证是否正确生成并存储了签名密钥。

未在管道配置中定义与动态扫描阶段相关的问题

CI 管道运行失败,发生错误。

针对 Dynamic-Scan 阶段的 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 团队主动监视 Slack 通道,以获取有关 DevSecOps,Continuous Delivery 服务和工具链的问题。

在 Slack 通道上向我们介绍。