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.
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
Para superar este problema de limitación de la velocidad Git:
- 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.
- 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
El registro de IBM Cloud ofrece una cuota limitada, enviando demasiadas imágenes que se pueden superar.
- Vaya a las imágenes y suprima las imágenes que no son necesarias.
- 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
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.
Problemas de plantilla y conducto
La tarea se ha cancelado porque no se puede acceder 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 .
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
-
Abra un editor de texto que guarda el archivo en terminaciones de línea en modalidad de caracteres LF (salto de línea).
-
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 -
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.
- Sustituya
-
Guarde el archivo.
-
Asegúrese de que el archivo se guarda en un directorio con permisos de escritura.
-
Ejecute el script .
-
Añada el contenido de
final_dockerconfig.txtcomo un secreto en las propiedades de entorno de conducto paraartifactory-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.
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.