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.
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
Um dieses Git Problem der Ratenbegrenzung zu überwinden:
- Migrieren Sie von Git evidence locker zu COS evidence locker (auch bekannt als COS only). Siehe den entsprechenden Abschnitt in der Dokumentation IBM Cloud.
- Verwenden Sie unterschiedliche „ Git “-Token für Pipelines und/oder Trigger.
Der Schritt "check-registry" der containerisierten Task schlägt mit einem Fehler fehl.
Die IBM Cloud-Registry bietet ein begrenztes Kontingent. Es können zu viele Images mit einer Push-Operation übertragen werden.
- Wechseln Sie zu Images und löschen Sie die Images, die nicht benötigt werden.
- 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
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.
Vorlagen-und Pipeline-Probleme
Task wurde abgebrochen, da auf das Basisimage nicht zugegriffen werden kann
Ü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 .
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
-
Öffnen Sie einen Texteditor, der die Datei im Zeichenmodus LF (Line Feed, Zeilenvorschub) speichert.
-
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 -
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.
- Ersetzen Sie
-
Speichern Sie die Datei.
-
Stellen Sie sicher, dass die Datei in einem Verzeichnis mit Schreibberechtigungen gespeichert wird.
-
Führen Sie das Script aus.
-
Fügen Sie den Inhalt von
final_dockerconfig.txtals geheimen Schlüssel in den Pipelineumgebungseigenschaften fürartifactory-dockerconfigjsonhinzu. 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.
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.