Solução de problemas para DevSecOps

Use estas dicas para ajudar a solucionar problemas que você pode encontrar ao usar o site DevSecOps.

Métodos gerais de resolução de problemas

  • Recarregue a página no caso de a IU estar lenta ou os logs falharem ao carregar.

  • Verifique se há interrupções na página de status

  • Execute o pipeline novamente..

    Executar o pipeline novamente
    Acionador de promoção manual

Problemas do Ambiente IBM

As execuções do pipeline são lentas devido à limitação da taxa de Git

A execução do pipeline parece mais lenta, as execuções do pipeline demoram mais para serem executadas e concluídas.

Além disso, a seguinte entrada pode ser encontrada em vários locais dos registros:

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

Os pipelines usam internamente as solicitações da API Git (definir status de Git, criar/atualizar problemas,...). Há um limite de taxa de Git de Solicitações de API, por token Git, por hora. Quando esse limite estiver prestes a ser atingido, há um mecanismo interno de pipeline que pausará as solicitações - portanto, pausando também a execução do pipeline - para evitar que a execução do pipeline seja abortada antecipadamente. Isso pode resultar em pipelines de longa duração.

Para superar esse problema de limitação da taxa de Git:

  1. Migrar do armário de evidências Git para o armário de evidências COS (também conhecido como somente COS). Consulte a seção correspondente na documentação do site IBM Cloud.
  2. Use tokens diferentes Git para pipelines e/ou gatilhos.

A etapa de registro de verificação da tarefa conteinerizada falha com erro

Erro de cota de armazenamento
' Erro de cota de armazenamento

O registro IBM Cloud oferece uma cota limitada, enviando por push muitas imagens que podem ser excedidas.

  1. Acesse as imagens e exclua as imagens que não são necessárias
  2. Execute novamente o pipeline

É possível verificar seus limites de cota e uso usando o comando a seguir:

ibmcloud cr quota

Logs não são mostrados para a etapa

Os registros não exibem
Os registros não exibem

Este é um problema com o ambiente Tekton.

Tente recarregar a página. Faça o download dos logs usando o botão de download

Download de logs
Download de logs

Problemas de modelo e pipeline

A tarefa foi cancelado porque a imagem base não pode ser acessada..

A imagem base não foi acessada
A imagem base não foi acessada

Verifique se as suas credenciais de artefato estão corretas Um novo token de artefato pode ser criado aqui É possível criar um segredo manualmente executando:

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

Ele produz algo semelhante ao seguinte:

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

Nas propriedades de pipeline, atualize o parâmetro artifactory-dockerconfigjson com o valor .dockerconfigjson .

Atualizar o artifactory-dockerconfigjson
Atualizar o artifactory-dockerconfigjson

Para obter mais informações, consulte a documentação do kubectl sobre como criar um segredo(: external).

O pipeline falha antecipadamente

Quando um pipeline falha antecipadamente com a mensagem a seguir:

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

Nesse caso, a falha ocorreu no pipeline porque ele não foi inicializado Portanto, não há registros disponíveis.

O dockerconfig.json segredo, que extrai as imagens Docker de IBMContainer Registry, usado por este pipeline, não está correto.

Esse segredo pode estar incorreto ou a chave de API associada a esse segredo é girada ou revogada.

Gere um novo dockerconfig.json e utilize esse novo valor secreto em seu pipeline (como parâmetro do pipeline ou armazenado em Secrets Manager ).

Para gerar um novo dockerconfig.json, execute o seguinte comando:

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"]'

Em que <apikey> é sua chave de API do IBM Cloud Cloud ou uma chave de API do ID de serviço.

O pipeline não pode extrair imagens de vários repositórios de artefatos

O pipeline foi bem-sucedido em extrair imagens de um repositório, mas não de outro repositório

O pipeline falhou porque ele está configurado para extrair imagens de um único repositório

Crie manualmente um novo segredo do dockerconfigjson de artefato para suportar a autenticação em vários repositórios.

Para suportar a autenticação para extrair imagens de diversos repositório no Artifactory, gere um novo dockerconfigjson e inclua uma propriedade do ambiente artifactory-dockerconfigjson de tipo de segredo para um ou mais pipelines

O script a seguir é uma amostra para gerar um dockerconfigjson artifactory que fornece detalhes de autenticação para dois repositórios de artefatos diferentes. Este é um script customizável

Pré-requisitos

Os comandos kubectl e jq devem estar instalados..

Etapas

  1. Abra um editor de texto que ssaves arquivo em terminações de linha do modo de caractere LF (Line Feed).

  2. Crie um arquivo e copie o conteúdo do seguinte script:

    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. Substitua os valores de item temporário pelos detalhes de autenticação reais:

    • Substitua <artifactory_repo_host> pelo link para o primeiro repositório..
    • Substitua <artifactory_token> pelo token de autenticação do primeiro repositório.
    • Substitua <email> pelo e-mail associado à autenticação..
    • Substitua <second_repo_host> pelo link para o segundo repositório..
    • Substitua <second_artifactory_token> pelo token de autenticação do segundo repositório.
  4. Salve o arquivo .

  5. Assegure que o arquivo seja salvo em um diretório com permissões de gravação.

  6. Execute o script.

  7. Inclua o conteúdo de final_dockerconfig.txt como um segredo nas propriedades de ambiente de pipeline para artifactory-dockerconfigjson Se você estiver usando Secrets Manager ou Key Protect, salve o conteúdo desse arquivo usando técnicas apropriadas.

A compilação de CRA ou Docker falha devido à falta de arquivos de submódulo

Quando um estágio do pipeline, como a compilação CRA ou Docker, falha, você pode ver uma mensagem de erro semelhante à seguinte:

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

Este erro ocorre porque seu repositório contém submódulos d Git, mas os pipelines não clonam submódulos por padrão. Cada estágio do pipeline é executado em seu próprio contêiner e executa um novo checkout do repositório, de modo que o conteúdo do submódulo fica ausente, a menos que seja explicitamente inicializado.

Para resolver isso, você deve garantir que o submódulo Git seja inicializado em todas as etapas que o exigirem. Especificamente para CRA, você pode adicionar a inicialização do submódulo ao seu script CRA personalizado.

Por exemplo, atualize seu script para incluir:

git submodule update --init --recursive

Isso garante que o submódulo esteja disponível antes da execução do processo de compilação do CRA.

Problemas de assinatura de imagem

Se a sua tarefa de assinatura de imagem falhar, consulte a documentação de assinatura de imagem para verificar se a chave de assinatura foi gerada e armazenada corretamente

Problemas relacionados ao Dynamic Scan Stage não definidos na configuração de pipeline

A execução do Pipeline de IC falha com um erro

Falha na execução do pipeline de CI para o estágio de varredura dinâmica
Falha na execução do pipeline de CI para o estágio de varredura dinâmica

O erro ocorre quando a configuração de pipeline de IC não contém uma definição da tarefa a ser executada na varredura dinâmica Inclua o fragmento a seguir no .pipeline-config.yaml e customize a etapa para adequar seu aplicativo.

   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."

Para obter mais informações sobre os estágios, consulte Scripts customizados..

Obtendo suporte

  • Você pode consultar o Stack Overflow para ver se outros usuários tiveram o mesmo problema. Ao usar o fórum para fazer uma pergunta, marque sua pergunta com "ibm-cloud" e "DevSecOps" para que ela seja vista pelas equipes de desenvolvimento do IBM Cloud.
  • IBM Cloud o assistente de IA da IBM, que é alimentado pela watsonx, foi projetado para ajudá-lo a aprender sobre como trabalhar na IBM Cloud e criar soluções com o catálogo de ofertas disponível. Consulte Obter ajuda do assistente de IA.
  • Se ainda não for possível resolver o problema, será possível abrir um caso de suporte. Para obter informações sobre a abertura de um caso de suporte ou severidades de caso e tempos de resposta, consulte Trabalhando com casos de suporte ou Direcionando casos de suporte.