Fehlerbehebung für DevSecOps

Verwenden Sie diese Tipps, um Probleme zu beheben, die bei der Verwendung von DevSecOps auftreten können.

Allgemeine Fehlerbehebungsmethoden

  • Laden Sie die Seite erneut, falls die Benutzerschnittstelle langsam ist oder die Protokolle nicht geladen werden können.

  • Suchen Sie auf der Statusseite nach Ausfällen.

  • Führen Sie die Pipeline erneut aus.

    Führen Sie die Pipeline erneut aus.
    Manueller Promotion-Trigger

Probleme mit der IBM-Umgebung

Pipeline-Läufe sind aufgrund der Git Ratenbegrenzung langsam

Die Pipeline-Ausführung sieht langsamer aus, Pipeline-Läufe brauchen länger, um ausgeführt und abgeschlossen zu werden.

Auch der folgende Eintrag findet sich an verschiedenen Stellen in den Protokollen:

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

Pipelines verwenden intern Git API-Anfragen ( Git Status setzen, Issues erstellen/aktualisieren,...). Es gibt eine Höchstgrenze von Git API-Anfragen pro „ Git ”-Token pro Stunde. Wenn diese Grenze bald erreicht ist, gibt es einen internen Pipeline-Mechanismus, der die Anfragen anhält - und damit auch den Pipeline-Lauf -, um einen vorzeitigen Abbruch des Pipeline-Laufs zu verhindern. Dies kann zu lang laufenden Pipelines führen.

Um dieses Git Problem der Ratenbegrenzung zu überwinden:

  1. Migrieren Sie von Git evidence locker zu COS evidence locker (auch bekannt als COS only). Siehe den entsprechenden Abschnitt in der Dokumentation IBM Cloud.
  2. Verwenden Sie unterschiedliche „ Git “-Token für Pipelines und/oder Trigger.

Der Schritt "check-registry" der containerisierten Task schlägt mit einem Fehler fehl.

Speicherkontingentfehler
Speicherkontingentfehler

Die IBM Cloud-Registry bietet ein begrenztes Kontingent. Es können zu viele Images mit einer Push-Operation übertragen werden.

  1. Wechseln Sie zu Images und löschen Sie die Images, die nicht benötigt werden.
  2. Führen Sie die Pipeline erneut aus.

Sie können die Kontingente und die Nutzung mit dem folgenden Befehl überprüfen:

ibmcloud cr quota

Protokolle werden für Schritt nicht angezeigt

Protokolle zeigen nicht
-Protokolle zeigen nicht

Dies ist ein Problem mit der Tekton-Umgebung.

Versuchen Sie, die Seite erneut zu laden. Laden Sie die Protokolle über die Schaltfläche zum Herunterladen herunter.

Protokolle herunterladen
Protokolle herunterladen

Vorlagen-und Pipeline-Probleme

Task wurde abgebrochen, da auf das Basisimage nicht zugegriffen werden kann

Auf das Basisbild wird nicht zugegriffen.
Auf das Basisbild wird nicht zugegriffen.

Überprüfen Sie, ob Ihre Artifactory-Berechtigungsnachweise korrekt sind. Hier kann ein neues Artifactory-Token erstellt werden. Sie können einen geheimen Schlüssel manuell erstellen, indem Sie Folgendes ausführen:

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

Es gibt eine Ausgabe ähnlich der folgenden aus:

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

Aktualisieren Sie in den Pipelineeigenschaften den Parameter artifactory-dockerconfigjson mit dem Wert .dockerconfigjson .

Artefakt-Dockerconfigjson aktualisieren
Artefakt-Dockerconfigjson aktualisieren

Weitere Informationen finden Sie in der kubectl-Dokumentation zum Erstellen eines geheimen Schlüssels(: extern).

Pipeline schlägt früh fehl

Wenn eine Pipeline in einem frühen Stadium mit der folgenden Nachricht fehlschlägt:

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

In diesem Fall ist der Fehler in der Pipeline aufgetreten, weil sie nicht gebootet wurde. Daher sind keine Protokolle verfügbar.

Das dockerconfig.json Geheimnis, das die Bilder „ Docker “ von IBMContainer Registry abruft, das von dieser Pipeline verwendet wird, ist nicht korrekt.

Möglicherweise ist dieser geheime Schlüssel falsch oder der diesem geheimen Schlüssel zugeordnete API-Schlüssel wurde turnusmäßig gewechselt oder widerrufen.

Generieren Sie einen neuen geheimen Wert und verwenden dockerconfig.json Sie diesen dann in Ihrer Pipeline (entweder als Pipeline-Parameter oder gespeichert unter „ Secrets Manager “).

Um eine neue dockerconfig.json zu erstellen, führen Sie den folgenden Befehl aus:

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

Dabei steht <apikey> für Ihren IBM Cloud-Cloud-API-Schlüssel oder einen Service-ID-API-Schlüssel.

Pipeline kann keine Images aus mehreren Artifactory-Repositorys extrahieren

Die Pipeline hat erfolgreich Images aus einem Repository extrahiert, aber nicht aus einem anderen Repository.

Die Pipeline ist fehlgeschlagen, weil sie für das Extrahieren von Images aus einem einzelnen Repository konfiguriert ist.

Erstellen Sie manuell einen neuen geheimen Artifactory- dockerconfigjson-Schlüssel, um die Authentifizierung bei mehreren Repositorys zu unterstützen.

Um die Authentifizierung für das Extrahieren von Images aus mehreren Repositorys in Artifactoryzu unterstützen, generieren Sie eine neue dockerconfigjson und fügen Sie den Pipelines eine Umgebungseigenschaft des Typs artifactory-dockerconfigjson für den geheimen Schlüssel hinzu.

Das folgende Script ist ein Beispiel zum Generieren einer Artifactory dockerconfigjson, die Authentifizierungsdetails für zwei verschiedene Artifactory-Repositorys bereitstellt. Dies ist ein anpassbares Script.

Voraussetzungen

Die Befehle kubectl und jq müssen installiert sein.

Schritte

  1. Öffnen Sie einen Texteditor, der die Datei im Zeichenmodus LF (Line Feed, Zeilenvorschub) speichert.

  2. Erstellen Sie eine Datei und kopieren Sie den Inhalt des folgenden Scripts:

    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. Ersetzen Sie die Platzhalterwerte durch die tatsächlichen Authentifizierungsdetails:

    • Ersetzen Sie <artifactory_repo_host> durch den Link zum ersten Repository.
    • Ersetzen Sie <artifactory_token> durch das Authentifizierungstoken für das erste Repository.
    • Ersetzen Sie <email> durch die E-Mail, die der Authentifizierung zugeordnet ist.
    • Ersetzen Sie <second_repo_host> durch den Link zum zweiten Repository.
    • Ersetzen Sie <second_artifactory_token> durch das Authentifizierungstoken für das zweite Repository.
  4. Speichern Sie die Datei.

  5. Stellen Sie sicher, dass die Datei in einem Verzeichnis mit Schreibberechtigungen gespeichert wird.

  6. Führen Sie das Script aus.

  7. Fügen Sie den Inhalt von final_dockerconfig.txt als geheimen Schlüssel in den Pipelineumgebungseigenschaften für artifactory-dockerconfigjson hinzu. Wenn Sie Secrets Manager oder Key Protectverwenden, speichern Sie den Inhalt der Datei mit den entsprechenden Verfahren.

CRA- oder Docker-Build schlägt aufgrund fehlender Submoduldateien fehl

Wenn eine Pipelinestufe wie CRA oder Docker build fehlschlägt, wird möglicherweise eine Fehlermeldung ähnlich der folgenden angezeigt:

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

Dieser Fehler tritt auf, weil Ihr Repository Submodule von „ Git “ enthält, Pipelines jedoch standardmäßig keine Submodule klonen. Jede Pipelinestufe wird in einem eigenen Container ausgeführt und führt einen neuen Checkout des Repositorys durch, so dass die Inhalte der Submodule fehlen, sofern sie nicht explizit initialisiert werden.

Um dieses Problem zu beheben, müssen Sie sicherstellen, dass das Submodul „ Git “ in jeder Phase initialisiert wird, in der es benötigt wird. Speziell für CRA können Sie die Initialisierung des Submoduls zu Ihrem benutzerdefinierten CRA-Skript hinzufügen.

Aktualisieren Sie zum Beispiel Ihr Skript, um es einzuschließen:

git submodule update --init --recursive

Dadurch wird gewährleistet, dass das Submodul verfügbar ist, bevor der CRA-Build-Prozess läuft.

Probleme beim Signieren von Images

Wenn Ihre Task zum Signieren von Images fehlschlägt, überprüfen Sie anhand der Dokumentation zur Imagesignierung, ob der Signierschlüssel ordnungsgemäß generiert und gespeichert wurde.

Probleme im Zusammenhang mit der Stage 'Dynamic Scan' sind in der Pipelinekonfiguration nicht definiert.

Die Ausführung der CI-Pipeline schlägt mit einem Fehler fehl.

CI-Pipeline-Ausführung schlägt für die Dynamic-Scan-Phase fehl.
CI-Pipeline-Ausführung schlägt für die Dynamic-Scan-Phase fehl.

Der Fehler tritt auf, wenn die Konfiguration der CI-Pipeline keine Aufgabendefinition zum Ausführen des dynamischen Scans enthält. Fügen Sie das folgende Snippet in .pipeline-config.yaml hinzu und passen Sie den Schritt an Ihre Anwendung an.

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

Weitere Informationen zu den Stages finden Sie unter Angepasste Scripts.

Unterstützung anfordern

  • Sie können bei Stack Overflow nachsehen, ob andere Benutzer das gleiche Problem hatten. Wenn Sie das Forum nutzen, um eine Frage zu stellen, markieren Sie Ihre Frage mit "ibm-cloud" und "DevSecOps", damit sie von den Entwicklungsteams von IBM Cloud gesehen wird.
  • IBM Cloud der KI-Assistent von IBM, der von watsonx unterstützt wird, soll Ihnen dabei helfen, sich mit der Arbeit in IBM Cloud vertraut zu machen und Lösungen mit dem verfügbaren Angebotskatalog zu erstellen. Siehe "Hilfe vom KI-Assistenten erhalten ".
  • Wenn Sie das Problem weiterhin nicht lösen können, können Sie einen Supportfall öffnen. Informationen zum Öffnen eines Supportfalls oder zu Fallprioritäten und Reaktionszeiten finden Sie in den Abschnitten Mit Supportfällen arbeiten oder Supportfälle eskalieren.