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 testo dell'errore e i casi root per il passo di origine Git non sono riusciti.
Il messaggio di errore contiene Cause principali potenziali
terminal prompts disabled
  • Il repository non è presente.
  • L'URL di origine è stato fornito utilizzando il protocollo HTTPS, ma il repository è privato e pertanto richiede il protocollo SSH. È stato utilizzato il protocollo errato.
Host key verification failed
  • L'URL di origine è stato fornito utilizzando il protocollo SSH, ma non è stato fornito alcun segreto. È stato utilizzato il protocollo errato oppure un segreto è mancante o non corretto.
Permission denied (publickey)
  • L'URL di origine è stato fornito utilizzando il protocollo SSH, ma un segreto manca o non è corretto.
Couldn't find remote ref
  • La revisione (nome ramo, nome tag, ID commit) specificata nella build non esiste.
Your SSH key has expired.
  • La chiave SSH è scaduta.

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.

  1. Eseguire il comando di ibmcloud ce buildrun get --name BUILDRUN_NAME per visualizzare i dettagli dell'esecuzione della build.
  2. Esaminare Reason nell'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.

  1. Utilizzare il comando ibmcloud ce build update per aggiornare la configurazione di build; ad esempio,

    ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO>
    
  2. Utilizzare il comando ibmcloud ce buildrun submit per inoltrare una nuova esecuzione di build. Per il comando buildrun submit, è necessario specificare l'opzione --build per fornire il nome della configurazione della build. Facoltativamente, è possibile specificare l'opzione --name per 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 comando ibmcloud 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.

  1. Utilizzare il comando ibmcloud ce build update per 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>
    
  2. Utilizzare il comando ibmcloud ce buildrun submit per inoltrare una nuova esecuzione di build. Per il comando buildrun submit, è necessario specificare l'opzione --build per fornire il nome della configurazione della build. Facoltativamente, è possibile specificare l'opzione --name per 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 comando ibmcloud 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 di ssh-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 di ssh-keygen. Per verificare se è codificato con una passphrase, eseguire il comando ssh-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,

  1. Eseguire il comando ibmcloud ce secret create --format ssh. Un segreto SSH viene utilizzato anche come segreto di accesso al repository Git. Il SSH_KEY_PATH deve 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 esempio github.com o gitlab.com nel 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>
    
  2. Utilizzare il comando ibmcloud ce build update per 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.

  1. Utilizzare il comando ibmcloud ce build update per 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>
    
  2. Utilizzare il comando ibmcloud ce buildrun submit per inoltrare una nuova esecuzione di build. Per il comando buildrun submit, è necessario specificare l'opzione --build per fornire il nome della configurazione della build. Facoltativamente, è possibile specificare l'opzione --name per 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 comando ibmcloud 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.

    1. In GitLab, utilizza la chiave pubblica SSH per creare una chiave di distribuzione o una chiave utente.

    2. 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 comando ibmcloud ce secret update --format ssh per 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.