Dépannage pour DevSecOps

Ces conseils vous aideront à résoudre les problèmes que vous pouvez rencontrer lorsque vous utilisez DevSecOps.

Méthodes générales de traitement des incidents

  • Rechargez la page si l'interface utilisateur est lente ou si le chargement des journaux échoue.

  • Recherchez les indisponibilités sur la page de statut

  • Exécutez à nouveau le pipeline.

    Relancer le pipeline
    Déclenchement manuel de la promotion

Problèmes d'environnement IBM

L'exécution du pipeline est lente en raison de la limitation du débit sur le site Git

L'exécution du pipeline semble plus lente, l'exécution et l'achèvement du pipeline prennent plus de temps.

En outre, l'entrée suivante peut être trouvée à divers endroits des journaux :

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

Les pipelines utilisent en interne les requêtes de l'API Git (définir les statuts de Git, créer / mettre à jour les questions,...). La limite du taux de Git est de Demandes API, par jeton d' Git, par heure. Lorsque cette limite est sur le point d'être atteinte, un mécanisme interne du pipeline met les demandes en pause - et donc le pipeline également - afin d'éviter que le pipeline ne s'interrompe prématurément. Il peut en résulter des conduites de longue durée.

Pour résoudre ce problème de limitation du taux Git:

  1. Migration de l'armoire à archives Git vers l'armoire à archives COS (également connue sous le nom de COS only). Voir la section correspondante dans la documentation IBM Cloud.
  2. Utilisez différents jetons d' Git s pour les pipelines et/ou les déclencheurs.

L'étape check-registry de la tâche conteneurisée échoue avec une erreur

Erreur de quota de stockage
Erreur de quota de stockage

Le registre IBM Cloud offre un quota limité, l'envoi d'un trop grand nombre d'images peut être dépassé.

  1. Accédez aux images et supprimez celles qui ne sont pas requises.
  2. Réexécutez le pipeline.

Vous pouvez vérifier vos limites de quota et votre utilisation à l'aide de la commande suivante:

ibmcloud cr quota

Les journaux ne s'affichent pas pour l'étape

Les journaux n'affichent pas
Les journaux n'affichent pas

Il s'agit d'un problème lié à l'environnement Tekton.

Essayez de recharger la page. Téléchargez les journaux à l'aide du bouton de téléchargement.

Télécharger les journaux
Télécharger les journaux

Problèmes liés aux modèles et aux pipelines

La tâche est annulée car l'image de base est inaccessible

L'image de base n'est pas accessible
L'image de base n'est pas accessible
L'image de base n'est pas accessible

Vérifiez si vos données d'identification artifactory sont correctes. Un nouveau jeton artifactory peut être créé ici. Vous pouvez créer un secret manuellement en exécutant:

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

Il génère une sortie similaire à la suivante:

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

Dans les propriétés du pipeline, mettez à jour le paramètre artifactory-dockerconfigjson avec la valeur .dockerconfigjson .

Mise à jour de artifactory-dockerconfigjson
Mise à jour de artifactory-dockerconfigjson

Pour plus d'informations, consultez la documentation kubectl sur la création d'un secret(externe).

Echec anticipé du pipeline

Lorsqu'un pipeline est en avance, il échoue avec le message suivant:

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

Dans ce cas, l'échec s'est produit dans le pipeline car il ne s'est pas amorcé. Par conséquent, aucun journal n'est disponible.

Le dockerconfig.json secret, qui extrait les images Docker s de IBMContainer Registry utilisé par ce pipeline, n'est pas correct.

Il se peut que ce secret soit incorrect ou que la clé d'API associée à ce secret soit modifiée ou révoquée.

Générez un nouveau dockerconfig.json puis utilisez cette nouvelle valeur secrète dans votre pipeline (soit comme paramètre de pipeline, soit stockée dans Secrets Manager ).

Pour générer un nouveau site dockerconfig.json, exécutez la commande suivante :

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> est votre clé d'API cloud IBM Cloud ou une clé d'API d'ID de service.

Le pipeline ne peut pas extraire des images de plusieurs référentiels artifactory

Le pipeline a réussi à extraire des images d'un référentiel mais pas d'un autre.

Le pipeline a échoué car il est configuré pour extraire des images d'un référentiel unique.

Créez manuellement un nouveau secret artifactory dockerconfigjson pour prendre en charge l'authentification auprès de plusieurs référentiels.

Pour prendre en charge l'authentification pour l'extraction d'images à partir de plusieurs référentiels dans Artifactory, générez un nouveau dockerconfigjson et ajoutez une propriété d'environnement de type secret artifactory-dockerconfigjson à un ou plusieurs pipelines.

Le script suivant est un exemple permettant de générer un dockerconfigjson artifactory qui fournit des détails d'authentification pour deux référentiels artifactory différents. Il s'agit d'un script personnalisable.

Prérequis

Les commandes kubectl et jq doivent être installées.

Procédure

  1. Ouvrez un éditeur de texte qui sauvegarde le fichier dans les fins de ligne en mode caractères LF (saut de ligne).

  2. Créez un fichier et copiez le contenu du script suivant:

    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. Remplacez les valeurs de marque de réservation par les détails d'authentification réels:

    • Remplacez <artifactory_repo_host> par le lien vers le premier référentiel.
    • Remplacez <artifactory_token> par le jeton d'authentification pour le premier référentiel.
    • Remplacez <email> par le courrier électronique associé à l'authentification.
    • Remplacez <second_repo_host> par le lien vers le deuxième référentiel.
    • Remplacez <second_artifactory_token> par le jeton d'authentification du deuxième référentiel.
  4. Sauvegardez le fichier.

  5. Assurez-vous que le fichier est sauvegardé dans un répertoire avec des droits d'accès en écriture.

  6. Exécutez le script.

  7. Ajoutez le contenu de final_dockerconfig.txt en tant que secret dans les propriétés d'environnement de pipeline pour artifactory-dockerconfigjson. Si vous utilisez Secrets Manager ou Key Protect, sauvegardez le contenu de ce fichier en utilisant les techniques appropriées.

La construction de CRA ou de Docker échoue en raison de l'absence de fichiers de sous-modules

Lorsqu'une étape du pipeline telle que CRA ou Docker build échoue, vous pouvez voir un message d'erreur similaire à celui-ci :

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

Cette erreur se produit parce que votre référentiel contient des sous-modules d' Git, mais les pipelines ne clonent pas les sous-modules par défaut. Chaque étape du pipeline s'exécute dans son propre conteneur et effectue une nouvelle extraction du référentiel, de sorte que le contenu des sous-modules est manquant à moins d'être explicitement initialisé.

Pour résoudre ce problème, vous devez vous assurer que le sous-module Git est initialisé à chaque étape qui le nécessite. Pour l'ARC en particulier, vous pouvez ajouter l'initialisation du sous-module à votre script personnalisé de l'ARC.

Par exemple, mettez à jour votre script pour inclure :

git submodule update --init --recursive

Cela garantit que le sous-module est disponible avant l'exécution du processus de construction de l'ARC.

Problèmes de signature d'image

Si votre tâche de signature d'image échoue, consultez la documentation de signature d'image pour vérifier que la clé de signature a été correctement générée et stockée.

Problèmes liés à l'étape d'analyse dynamique non définie dans la configuration de pipeline

L'exécution du pipeline d'EC échoue avec une erreur.

Échec de l'exécution du pipeline CI à l'étape du balayage dynamique
Échec de l'exécution du pipeline CI à l'étape du balayage dynamique

L'erreur se produit lorsque la configuration de pipeline d'EC ne contient pas de définition de tâche pour exécuter l'analyse dynamique. Ajoutez le fragment suivant dans .pipeline-config.yaml et personnalisez l'étape en fonction de votre application.

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

Pour plus d'informations sur les étapes, voir Scripts personnalisés.

Obtenir de l'aide

  • Vous pouvez consulter Stack Overflow pour voir si d'autres utilisateurs ont rencontré le même problème. Lorsque vous utilisez le forum pour poser une question, marquez votre question avec "ibm-cloud" et "DevSecOps" afin qu'elle soit vue par les équipes de développement de IBM Cloud.
  • IBM Cloud IBM l'assistant IA de , qui est alimenté par l' watsonx de , est conçu pour vous aider à découvrir comment travailler dans l' IBM Cloud, et à créer des solutions avec le catalogue d'offres disponible. Voir Obtenir de l'aide de l'assistant IA.
  • Si vous n'arrivez toujours pas à résoudre le problème, ouvrez un cas de support. Pour plus d'informations sur l'ouverture d'un dossier de support ou sur la gravité des cas et les temps de réponse, voir Utilisation des dossiers de support ou Escalades de dossiers de support.