Generazione non riuscita nel passo di origine
Dopo aver creato ed eseguito una build, la build non viene completata correttamente e si riceve un messaggio che indica che la build non riesce nel passo di origine.
Se si riceve un messaggio che indica che la fase di origine ha esito negativo durante una build, controllare i log della build per determinare la causa principale del problema.
Messaggio di errore di esempio
Summary: Failed to execute build run
Status: Failed
Reason: buildrun step step-source-default failed in pod <BUILDRUN_NAME>-zvcc9-pod-trsq2, for detailed information: ibmcloud ce buildrun logs -n <BUILDRUN_NAME>
Eseguire il comando ibmcloud ce buildrun logs. Concentrarsi sui log per la fase non riuscita,
ibmcloud ce buildrun logs -n <BUILDRUN_NAME>
[...]
<BUILDRUN_NAME>-zvcc9-pod-trsq2/step-source-default:
{"level":"info","ts":1625217529.370393,"logger":"git","msg":"ssh","path":"/usr/bin/ssh","version":"OpenSSH_8.0p1, OpenSSL 1.1.1g FIPS 21 Apr 2020"}
{"level":"info","ts":1625217529.3847454,"logger":"git","msg":"git","path":"/usr/bin/git","version":"git version 2.27.0"}
{"level":"info","ts":1625217529.3940003,"logger":"git","msg":"git-lfs","path":"/usr/bin/git-lfs","version":"git-lfs/2.11.0 (GitHub; linux amd64; go 1.14.4)"}
{"level":"debug","ts":1625217529.3940916,"logger":"git","msg":"/usr/bin/git clone --quiet --no-tags --branch main --depth 1 --single-branch -- https://github.com/IBM/CodeEngineX /workspace/source"}
{"level":"error","ts":1625217529.58695,"logger":"git","msg":"git command failed","command":"/usr/bin/git clone --quiet --no-tags --branch main --depth 1 --single-branch -- https://github.com/IBM/CodeEngineX /workspace/source","output":"fatal: could not read Username for 'https://github.com': terminal prompts disabled","error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled (exit code 128)","stacktrace":"main.git\n\tgithub.com/shipwright-io/build/cmd/git/main.go:324\nmain.clone\n\tgithub.com/shipwright-io/build/cmd/git/main.go:277\nmain.runGitClone\n\tgithub.com/shipwright-io/build/cmd/git/main.go:115\nmain.Execute\n\tgithub.com/shipwright-io/build/cmd/git/main.go:98\nmain.checkAndRun\n\tgithub.com/shipwright-io/build/cmd/git/main.go:90\nmain.main\n\tgithub.com/shipwright-io/build/cmd/git/main.go:70\nruntime.main\n\truntime/proc.go:204"}
{"level":"error","ts":1625217529.587297,"logger":"git","msg":"program failed with an error","error":"fatal: could not read Username for 'https://github.com': terminal prompts disabled (exit code 128)","stacktrace":"main.Execute\n\tgithub.com/shipwright-io/build/cmd/git/main.go:100\nmain.checkAndRun\n\tgithub.com/shipwright-io/build/cmd/git/main.go:90\nmain.main\n\tgithub.com/shipwright-io/build/cmd/git/main.go:70\nruntime.main\n\truntime/proc.go:204"}
[...]
Il testo dell'errore è diverso in base a ciò che non ha funzionato. La seguente tabella descrive il testo dell'errore e le potenziali cause principali per questo scenario.
| Il messaggio di errore contiene | Cause principali potenziali |
|---|---|
terminal prompts disabled |
|
Host key verification failed |
|
Permission denied (publickey) |
|
Couldn't find remote ref |
|
Your SSH key has expired. |
|
Prova una di queste soluzioni.
Se stai eseguendo la tua build nella console o nella CLI, utilizza la CLI per la risoluzione dei problemi con la tua build.
- Eseguire il comando di
ibmcloud ce buildrun get --name BUILDRUN_NAMEper visualizzare i dettagli dell'esecuzione della build. - Esaminare
Reasonnell'output del comando.
Dopo aver controllato i log e identificato le potenziali cause principali, utilizzare le seguenti azioni di risoluzione per risolvere il problema.
Risoluzione per un repository inesistente durante la build
Utilizza i seguenti comandi per aggiornare la build esistente per fare riferimento alla tua origine del repository Git e inoltrare l'esecuzione della build.
-
Utilizzare il comando
ibmcloud ce build updateper aggiornare la configurazione di build; ad esempio,ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO> -
Utilizzare il comando
ibmcloud ce buildrun submitper inoltrare una nuova esecuzione di build. Per il comandobuildrun submit, è necessario specificare l'opzione--buildper fornire il nome della configurazione della build. Facoltativamente, è possibile specificare l'opzione--nameper fornire il nome per questa esecuzione di build. Se si specifica l'opzione--name, assicurarsi di utilizzare un nome di esecuzione build diverso da quello dell'esecuzione build non riuscita oppure assicurarsi di eliminare l'esecuzione build non riuscita utilizzando il comandoibmcloud ce buildrun delete. Ad esempio,ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
Risoluzione per un protocollo errato o segreto mancante durante la build
L'URL di un repository Git può essere specificato utilizzando il protocollo HTTPS o SSH. GitHub e GitLab forniscono un modo per attivare / disattivare il formato URL nell'IU Git. Il protocollo HTTPS non richiede autenticazione ma può essere utilizzato solo se il repository è pubblico. Per i database privati, è necessario utilizzare il protocollo SSH e fornire un segreto per il repository. I repository in una configurazione GitHub Enterprise possono essere pubblici ma richiedono ancora l'autenticazione e tali repository GitHub Enterprise possono anche essere utilizzati solo utilizzando il protocollo SSH.
Per repository pubblici
Se l'errore si è verificato per un repository pubblico, aggiornare la build esistente per utilizzare l'URL HTTPS del repository Git ed eseguirla.
-
Utilizzare il comando
ibmcloud ce build updateper aggiornare la configurazione di build in modo da utilizzare l'URL HTTPS del repository Git ; ad esempio,ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO> -
Utilizzare il comando
ibmcloud ce buildrun submitper inoltrare una nuova esecuzione di build. Per il comandobuildrun submit, è necessario specificare l'opzione--buildper fornire il nome della configurazione della build. Facoltativamente, è possibile specificare l'opzione--nameper fornire il nome per questa esecuzione di build. Se si specifica l'opzione--name, assicurarsi di utilizzare un nome di esecuzione build diverso da quello dell'esecuzione build non riuscita oppure assicurarsi di eliminare l'esecuzione build non riuscita utilizzando il comandoibmcloud ce buildrun delete. Ad esempio,ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
Per repository privati
Se l'errore si è verificato per un repository privato, creare un segreto SSH e utilizzare il protocollo SSH. Un segreto SSH contiene le credenziali per accedere al repository privato che contiene il codice sorgente per creare la tua immagine
contenitore. Un segreto SSH viene utilizzato anche come segreto di accesso al repository Git. Il segreto SSH contiene una chiave privata mentre la chiave pubblica corrispondente viene memorizzata con il provider del repository Git. Per ulteriori
informazioni sulla creazione di una coppia di chiavi e sull'archiviazione della parte pubblica in GitHub o GitLab, consulta Accesso ai repository di codice privati. È importante
che il tuo file della chiave privata non sia codificato con una passphrase prima di poterlo caricare in Code Engine. Il formato del file della chiave privata può variare, il che rende complicato valutare se il file è codificato. A seconda
della versione dello strumento ssh-keygen utilizzato per creare la coppia di chiavi, il file potrebbe avere una delle seguenti intestazioni:
-
Se il file inizia con
-----BEGIN RSA PRIVATE KEY-----, utilizza il formato PEM ed è stato creato con una versione precedente dissh-keygen. Se il file è crittografato con una passphrase, di solito contiene una riga come questa:Proc-Type: 4,ENCRYPTED. -
Se il file inizia con
-----BEGIN OPENSSH PRIVATE KEY-----, è stato creato con una versione più recente dissh-keygen. Per verificare se è codificato con una passphrase, eseguire il comandossh-keygen -p -f <ID_FILE>.ssh-keygen -p -f <ID_FILE> Enter old passphrase:ssh-keygen -p -f <ID_FILE> Key has comment '<COMMENT>' Enter new passphrase (empty for no passphrase):È possibile ignorare il comando utilizzando
Ctrl+C. Se il comando richiede la vecchia passphrase (primo esempio), il file originale è stato codificato, altrimenti richiede direttamente la passphrase del nuovo file (secondo esempio).Per decodificare un file di chiave privata codificata, eseguire il seguente comando e lasciare vuota la nuova passphrase.
$ ssh-keygen -p -f <ID_FILE> Enter old passphrase: <PASSPHRASE> Key has comment '<COMMENT>' Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.Questo comando modifica il file della chiave privata. Se è necessario conservare la versione crittografata, creare prima una copia.
Per creare un segreto SSH e utilizzare il protocollo SSH,
-
Eseguire il comando
ibmcloud ce secret create --format ssh. Un segreto SSH viene utilizzato anche come segreto di accesso al repository Git. IlSSH_KEY_PATHdeve puntare al file della chiave privata che corrisponde alla chiave pubblica nel tuo account o alla chiave di distribuzione nel repository. Questo comando richiede un nome e un percorso chiave e consente anche altri argomenti facoltativi come il percorso del file host noto. Se specifichi l'opzione--known-hosts-path, includi l'host del tuo repository Git, ad esempiogithub.comogitlab.comnel tuo file degli host noti. Per ulteriori informazioni, consultare Accesso ai repository di codice privati.ibmcloud ce secret create --format ssh --name <GIT_REPO_SECRET> --key-path <SSH_KEY_PATH> --known-hosts-path <PATH_TO_KNOWN_HOSTS_FILE> -
Utilizzare il comando
ibmcloud ce build updateper aggiornare la configurazione di build per utilizzare l'URL SSH del repository Git e fare riferimento al segreto SSH,<GIT_REPO_SECRET>. Ad esempio,ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO> --git-repo-secret <GIT_REPO_SECRET>Nell'esempio precedente, specifica l'indirizzo URL SSH utilizzando il prefisso
git@per la tua origine, ad esempio--source git@github.com:IBM/CodeEngine.git.
Risoluzione per una revisione errata durante la build
Una configurazione di build specifica il repository di origine utilizzando il relativo URL e facoltativamente una revisione. La revisione può essere il nome di un ramo o tag o un identificativo di commit. Per impostazione predefinita, viene
creato il ramo main. Esaminare il messaggio di errore per informazioni su qualcosa che è stato specificato ma che non esiste.
-
Utilizzare il comando
ibmcloud ce build updateper aggiornare la configurazione di build in modo da utilizzare una revisione (o commit) corretta; ad esempio,ibmcloud ce build update --name <BUILD_NAME> --commit <COMMIT> -
Utilizzare il comando
ibmcloud ce buildrun submitper inoltrare una nuova esecuzione di build. Per il comandobuildrun submit, è necessario specificare l'opzione--buildper fornire il nome della configurazione della build. Facoltativamente, è possibile specificare l'opzione--nameper fornire il nome per questa esecuzione di build. Se si specifica l'opzione--name, assicurarsi di utilizzare un nome di esecuzione build diverso da quello dell'esecuzione build non riuscita oppure assicurarsi di eliminare l'esecuzione build non riuscita utilizzando il comandoibmcloud ce buildrun delete. Ad esempio,ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
Risoluzione per una chiave SSH scaduta durante la generazione
Quando utilizzi una chiave SSH per connetterti al tuo repository di origine e ricevi un errore che indica che la chiave SSH è scaduta, assicurati di verificare le impostazioni per la chiave SSH che utilizzi come segreto di accesso al repository di codice nella build non riuscita.
Devi sapere in che modo è stata creata la chiave SSH, se la chiave è stata creata per un utente specifico o se la chiave SSH è una chiave di distribuzione Git al repository. È possibile che sia stata specificata una scadenza per la chiave. L'impostazione di una scadenza per una chiave è una funzione di GitLab.
IBM Cloud® Continuous Delivery si basa su GitLab. Per ulteriori informazioni, vedi Continuous Delivery Git repos and issue tracking.
Per risolvere questo errore, effettuare le seguenti azioni.
-
Se conosci la chiave SSH che stai utilizzando in Code Engine, aggiorna la chiave di distribuzione o utente con la stessa chiave pubblica SSH in GitLab. Con l'aggiornamento, non utilizzare una scadenza o un aggiornamento a una data di scadenza diversa. Poiché stai utilizzando la stessa chiave SSH nel tuo segreto in Code Engine, non devi aggiornare il segreto di accesso del repository di codice in Code Engine.
-
Aggiornare il segreto di accesso al repository di codice per utilizzare la nuova chiave SSH.
-
In GitLab, utilizza la chiave pubblica SSH per creare una chiave di distribuzione o una chiave utente.
-
In Code Engine, aggiorna il segreto di accesso del repository del codice per utilizzare la nuova chiave privata SSH.
Ad esempio, si supponga di voler aggiornare il segreto di accesso al repository di codice
mysecret-ssh. Utilizza il comandoibmcloud ce secret update --format sshper aggiornare un segreto per autenticare il tuo repository Git.ibmcloud ce secret update --format ssh --name mysecret-ssh --key-path $HOME/.ssh/id_rsa --known-hosts-path $HOME/.ssh/known_hosts
-
Per ulteriori informazioni sull'utilizzo delle chiavi SSH per un repository di codice, consultare Accesso ai repository di codice privati.