Solución de problemas para DevSecOps

Siga estos consejos para solucionar los problemas que puedan surgirle al utilizar DevSecOps.

Métodos generales de resolución de problemas

  • Vuelva a cargar la página en caso de que la interfaz de usuario sea lenta o los registros no se carguen.

  • Compruebe si hay paradas en la página de estado

  • Vuelva a ejecutar la interconexión.

    Ejecutar de nuevo el pipeline
    Activación manual de la promoción

Problemas de entorno de IBM

El funcionamiento de las tuberías es lento debido a la limitación de velocidad de Git

La ejecución del pipeline parece más lenta, las ejecuciones del pipeline tardan más en ejecutarse, completarse.

Además, se puede encontrar la siguiente entrada en varios lugares de los registros:

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

Los pipelines utilizan internamente las solicitudes de la API Git (establecer estados Git, crear / actualizar incidencias,...). Existe un límite de tarifa Git de Solicitudes API, por token Git, por hora. Cuando este límite está a punto de alcanzarse, existe un mecanismo interno de canalización que pausará las peticiones (y, por tanto, también la ejecución del canal) para evitar que el canal se interrumpa antes de tiempo. Esto podría dar lugar a largas canalizaciones.

Para superar este problema de limitación de la velocidad Git:

  1. Migración del almacén de pruebas Git al almacén de pruebas COS (también conocido como sólo COS). Véase la sección correspondiente en la documentación de IBM Cloud.
  2. Utilice diferentes tokens Git para los pipelines y/o los desencadenadores.

El paso de registro de comprobación de la tarea contenerizada falla con un error

Error de cuota de almacenamiento
Error de cuota de almacenamiento

El registro de IBM Cloud ofrece una cuota limitada, enviando demasiadas imágenes que se pueden superar.

  1. Vaya a las imágenes y suprima las imágenes que no son necesarias.
  2. Vuelva a ejecutar el conducto.

Puede comprobar los límites de cuota y el uso utilizando el mandato siguiente:

ibmcloud cr quota

Los registros no se muestran para el paso

Los registros no muestran
' Los registros no muestran

Esto es un problema con el entorno de Tekton.

Intente volver a cargar la página. Descargue los registros utilizando el botón de descarga.

Descarga de registros
' Descarga de registros

Problemas de plantilla y conducto

La tarea se ha cancelado porque no se puede acceder a la imagen base

No se accede a la imagen base
' No se accede a la imagen base

Compruebe si las credenciales de artifactory son correctas. Aquí se puede crear una nueva señal artifactory. Puede crear un secreto manualmente ejecutando:

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

Genera algo similar a lo siguiente:

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

En las propiedades de interconexión, actualice el parámetro artifactory-dockerconfigjson con el valor .dockerconfigjson .

Actualizar artifactory-dockerconfigjson
Actualizar artifactory-dockerconfigjson

Para obtener más información, consulte la documentación de kubectl sobre la creación de un secreto(: external).

La interconexión falla pronto

Cuando una interconexión falla con antelación con el mensaje siguiente:

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

En este caso, la anomalía se ha producido en el conducto porque no se ha arrancado. Por lo tanto, no hay registros disponibles.

El dockerconfig.json secreto, que extrae las imágenes Docker de IBMContainer Registry utilizado por este canal no es correcto.

Este secreto puede ser incorrecto o la clave de API asociada a este secreto se rota o se revoca.

Genere un nuevo dockerconfig.json y utilice este nuevo valor secreto en su canalización (ya sea como parámetro de canalización o almacenado en Secrets Manager ).

Para generar un nuevo dockerconfig.json, ejecute el siguiente 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"]'

Donde <apikey> es la clave de API de nube de IBM Cloud o una clave de API de ID de servicio.

El conducto no puede extraer imágenes de varios repositorios de artifactory

La interconexión ha tenido éxito al extraer imágenes de un repositorio pero no de otro repositorio.

La interconexión ha fallado porque está configurada para extraer imágenes de un único repositorio.

Cree manualmente un nuevo secreto de artifactory dockerconfigjson para dar soporte a la autenticación en varios repositorios.

Para dar soporte a la autenticación para extraer imágenes de varios repositorios en Artifactory, genere un nuevo dockerconfigjson y añada una propiedad de entorno de tipo secreto artifactory-dockerconfigjson a una o varias interconexiones.

El script siguiente es un ejemplo para generar un dockerconfigjson artifactory que proporciona detalles de autenticación para dos repositorios artifactory diferentes. Este es un script personalizable.

Requisitos previos

Los mandatos kubectl y jq deben estar instalados.

Pasos

  1. Abra un editor de texto que guarda el archivo en terminaciones de línea en modalidad de caracteres LF (salto de línea).

  2. Cree un archivo y copie el contenido del script siguiente:

    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. Sustituya los valores de marcador por los detalles de autenticación reales:

    • Sustituya <artifactory_repo_host> por el enlace al primer repositorio.
    • Sustituya <artifactory_token> por la señal de autenticación para el primer repositorio.
    • Sustituya <email> por el correo electrónico asociado a la autenticación.
    • Sustituya <second_repo_host> por el enlace al segundo repositorio.
    • Sustituya <second_artifactory_token> por la señal de autenticación para el segundo repositorio.
  4. Guarde el archivo.

  5. Asegúrese de que el archivo se guarda en un directorio con permisos de escritura.

  6. Ejecute el script .

  7. Añada el contenido de final_dockerconfig.txt como un secreto en las propiedades de entorno de conducto para artifactory-dockerconfigjson. Si utiliza Secrets Manager o Key Protect, guarde el contenido de este archivo utilizando las técnicas adecuadas.

La compilación de CRA o Docker falla porque faltan archivos de submódulos

Cuando falla una etapa del pipeline como CRA o Docker build, es posible que aparezca un mensaje de error similar a:

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 error se produce porque tu repositorio contiene submódulos Git, pero las canalizaciones no clonan submódulos de forma predeterminada. Cada etapa del pipeline se ejecuta en su propio contenedor y realiza una nueva comprobación del repositorio, por lo que los contenidos de los submódulos se pierden a menos que se inicialicen explícitamente.

Para resolver esto, debes asegurarte de que el submódulo Git esté inicializado en cada etapa que lo requiera. Para CRA específicamente, puede añadir la inicialización del submódulo a su script CRA personalizado.

Por ejemplo, actualice su script para incluir:

git submodule update --init --recursive

Esto garantiza que el submódulo esté disponible antes de que se ejecute el proceso de creación de CRA.

Problemas de firma de imágenes

Si la tarea de firma de imagen falla, consulte la documentación de firma de imagen para verificar que la clave de firma se ha generado y almacenado correctamente.

Problemas relacionados con la etapa de exploración dinámica no definidos en la configuración de interconexión

La ejecución de la interconexión de AC falla con un error.

Error en la ejecución del proceso CI Pipeline en la fase de
escaneo dinámicoError en la ejecución del proceso CI Pipeline en la fase de escaneo dinámico

El error se produce cuando la configuración de conducto de AC no contiene una definición de tarea para ejecutar la exploración dinámica. Añada el siguiente fragmento de código en .pipeline-config.yaml y personalice el paso para que se ajuste a su aplicación.

   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 obtener más información sobre las etapas, consulte Scripts personalizados.

Obtención de soporte

  • Puedes consultar Stack Overflow para ver si otros usuarios se han encontrado con el mismo problema. Cuando utilices el foro para hacer una pregunta, etiqueta tu pregunta con "ibm-cloud" y "DevSecOps" para que sea vista por los equipos de desarrollo de IBM Cloud.
  • IBM Cloud watsonx, que funciona con la tecnología de IBM, está diseñado para ayudarle a aprender a trabajar en IBM Cloud y a crear soluciones con el catálogo de ofertas disponible. Consulte Cómo obtener ayuda del asistente de IA.
  • Si todavía no puede resolver el problema, puede abrir un tíquet de soporte de IBM. Para obtener información sobre cómo abrir un caso de soporte o sobre las gravedades y tiempos de respuesta, consulte Trabajar con casos de soporte o Escalado de casos de soporte.