IBM Cloud Docs
La compilación falla en el paso de origen

La compilación falla en el paso de origen

Después de crear y ejecutar una compilación, esta no se completa correctamente y se recibe un mensaje que indica que la compilación falla en el paso de origen.

Si recibe un mensaje que indica que el paso de origen falla durante una compilación, compruebe los registros de la compilación para determinar la causa raíz del problema.

Mensaje de error de ejemplo

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>

Ejecute el mandato ibmcloud ce buildrun logs. Céntrese en los registros correspondientes al paso anómalo,

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"}
[...]

El texto del error es distinto en función de lo que haya fallado. En la tabla siguiente se describe el texto de error y las causas raíz potenciales para este caso de ejemplo.

Texto de error y causas raíz para el paso erróneo de origen de Git.
El mensaje de error contiene Causas raíz potenciales
terminal prompts disabled
  • El repositorio no existe.
  • El URL de origen se ha proporcionado utilizando el protocolo HTTPS, pero el repositorio es privado y, por lo tanto, requiere el protocolo SSH. Se ha utilizado el protocolo incorrecto.
Host key verification failed
  • El URL de origen se ha proporcionado utilizando el protocolo SSH, pero no se ha proporcionado ningún secreto. Se ha utilizado el protocolo incorrecto o falta un secreto o es incorrecto.
Permission denied (publickey)
  • El URL de origen se ha proporcionado utilizando el protocolo SSH, pero falta un secreto o el secreto es incorrecto.
Couldn't find remote ref
  • La revisión (nombre de rama, nombre de etiqueta, ID de envío) especificada en la compilación no existe.
Your SSH key has expired. -La clave SSH ha caducado.

Pruebe una de estas soluciones.

Tanto si ejecuta la compilación en la consola como en la CLI, utilice la CLI para resolver problemas con la compilación.

  1. Ejecute el comando ibmcloud ce buildrun get --name BUILDRUN_NAME para visualizar los detalles de la ejecución de la compilación.
  2. Revise Reason en la salida del mandato.

Después de comprobar los registros e identificar las posibles causas raíz, emprenda las siguientes acciones de resolución que le ayuden a resolver el problema.

Resolución en el caso de que no exista un repositorio durante la compilación

Utilice los mandatos siguientes para actualizar la compilación existente para que haga referencia al origen del repositorio Git y enviar la ejecución de la compilación.

  1. Utilice el mandato ibmcloud ce build update para actualizar la configuración de compilación; por ejemplo,

    ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO>
    
  2. Utilice el mandato ibmcloud ce buildrun submit para enviar una nueva ejecución de compilación. Para el mandato buildrun submit, debe especificar la opción --build para proporcionar el nombre de la configuración de compilación. Opcionalmente, puede especificar la opción --name para proporcionar el nombre de esta ejecución de compilación. Si especifica la opción --name, asegúrese de utilizar un nombre de ejecución de compilación distinto del de la ejecución errónea o asegúrese de suprimir la ejecución de compilación errónea con el mandato ibmcloud ce buildrun delete. Por ejemplo:

    ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
    

Resolución en el caso de que un protocolo sea incorrecto o falte el secreto durante la compilación

El URL a un repositorio Git se puede especificar mediante el protocolo HTTPS o SSH. GitHub y GitLab proporcionan una forma de conmutar el formato de URL en la interfaz de usuario de Git. El protocolo HTTPS no requiere autenticación, pero solo se puede utilizar si el repositorio es público. Para repositorios privados, debe utilizar el protocolo SSH y proporcionar un secreto para el repositorio. Los repositorios de una configuración de GitHub Enterprise pueden ser públicos, pero todavía requieren autenticación, y los repositorios de GitHub Enterprise solo se pueden utilizar mediante el protocolo SSH.

Para repositorios públicos

Si el error se ha producido para un repositorio público, actualice la compilación existente para que utilice el URL de HTTPS del repositorio Git y ejecute la compilación.

  1. Utilice el mandato ibmcloud ce build update para actualizar la configuración de compilación para que utilice el URL HTTPS del repositorio Git; por ejemplo,

    ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO>
    
  2. Utilice el mandato ibmcloud ce buildrun submit para enviar una nueva ejecución de compilación. Para el mandato buildrun submit, debe especificar la opción --build para proporcionar el nombre de la configuración de compilación. Opcionalmente, puede especificar la opción --name para proporcionar el nombre de esta ejecución de compilación. Si especifica la opción --name, asegúrese de utilizar un nombre de ejecución de compilación distinto del de la ejecución errónea o asegúrese de suprimir la ejecución de compilación errónea con el mandato ibmcloud ce buildrun delete. Por ejemplo:

    ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
    

Para repositorios privados

Si la anomalía se ha producido para un repositorio privado, cree un secreto SSH y utilice el protocolo SSH. Un secreto SSH contiene las credenciales para acceder al repositorio privado que contiene el código fuente para crear la imagen de contenedor. Un secreto SSH también se utiliza como un secreto de acceso al repositorio Git. El secreto SSH contiene una clave privada mientras que la clave pública correspondiente se almacena con el proveedor de repositorio Git. Para obtener más información sobre cómo crear un par de claves y almacenar la parte pública en GitHub o GitLab, consulte Acceso a repositorios de código privado. Es importante que el archivo de claves privadas no esté cifrado con una frase de contraseña para poder cargarlo en Code Engine. El formato del archivo de claves privadas puede variar, lo que hace que sea complicado evaluar si el archivo está cifrado. En función de la versión de la herramienta ssh-keygen que se ha utilizado para crear el par de claves, el archivo puede tener una de las cabeceras siguientes:

  • Si el archivo empieza por -----BEGIN RSA PRIVATE KEY-----, significa que utiliza el formato PEM y se ha creado con una versión anterior de ssh-keygen. Si el archivo está cifrado con una frase de contraseña, normalmente contiene una línea como la siguiente: Proc-Type: 4,ENCRYPTED.

  • Si el archivo empieza por -----BEGIN OPENSSH PRIVATE KEY-----, significa que se ha creado con una versión más reciente de ssh-keygen. Para verificar si está cifrado con una frase de contraseña, ejecute el mandato 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):
    

    Puede interrumpir el mandato con Ctrl+C. Si el mandato necesita la frase de contraseña antigua (primer ejemplo), significa que el archivo original se ha cifrado; de lo contrario, se solicita directamente la frase de contraseña del nuevo archivo (segundo ejemplo).

    Para descifrar un archivo de claves privadas cifrado, ejecute el mandato siguiente y deje la nueva frase de contraseña vacía.

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

    Este mandato modifica el archivo de claves privadas. Si necesita conservar la versión cifrada, cree primero una copia.

Para crear un secreto SSH y utilizar el protocolo SSH,

  1. Ejecute el mandato ibmcloud ce secret create --format ssh. Un secreto SSH también se utiliza como un secreto de acceso al repositorio Git. El valor SSH_KEY_PATH debe apuntar al archivo de claves privadas que coincide con la clave pública de su cuenta o la clave de despliegue en el repositorio. Este mandato requiere un nombre y una vía de acceso de clave, y también permite otros argumentos opcionales como, por ejemplo, la vía de acceso al archivo de hosts conocidos. Si especifica la opción --known-hosts-path, incluya el host del repositorio Git, por ejemplo github.com o gitlab.com en el archivo de hosts conocidos. Para obtener más información, consulte Acceso a repositorios de código privado.

    ibmcloud ce secret create --format ssh --name <GIT_REPO_SECRET> --key-path <SSH_KEY_PATH> --known-hosts-path  <PATH_TO_KNOWN_HOSTS_FILE>
    
  2. Utilice el mandato ibmcloud ce build update para actualizar la configuración de compilación para utilizar el URL SSH del repositorio Git y hacer referencia al secreto SSH, <GIT_REPO_SECRET>. Por ejemplo:

    ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO> --git-repo-secret <GIT_REPO_SECRET>
    

    En el ejemplo anterior, especifique el URL de SSH utilizando el prefijo git@ para el origen, como por ejemplo --source git@github.com:IBM/CodeEngine.git.

Resolución en el caso de una revisión errónea durante la compilación

Una configuración de compilación especifica el repositorio de origen utilizando su URL y opcionalmente una revisión. La revisión puede ser el nombre de una rama o etiqueta o un identificador de confirmación. De forma predeterminada, se compila la rama main. Revise el mensaje de error para obtener información sobre algo que se ha especificado pero que no existe.

  1. Utilice el mandato ibmcloud ce build update para actualizar la configuración de la compilación para que utilice una revisión (o confirmación) correcta; por ejemplo,

    ibmcloud ce build update --name <BUILD_NAME> --commit <COMMIT>
    
  2. Utilice el mandato ibmcloud ce buildrun submit para enviar una nueva ejecución de compilación. Para el mandato buildrun submit, debe especificar la opción --build para proporcionar el nombre de la configuración de compilación. Opcionalmente, puede especificar la opción --name para proporcionar el nombre de esta ejecución de compilación. Si especifica la opción --name, asegúrese de utilizar un nombre de ejecución de compilación distinto del de la ejecución errónea o asegúrese de suprimir la ejecución de compilación errónea con el mandato ibmcloud ce buildrun delete. Por ejemplo:

    ibmcloud ce buildrun submit --build <BUILD_NAME> --name <BUILDRUN_NAME>
    

Resolución de una clave SSH caducada durante la compilación

Cuando utilice una clave SSH para conectarse al repositorio de origen y reciba un error que indique que la clave SSH ha caducado, asegúrese de comprobar los valores de la clave SSH que utiliza como secreto de acceso de repositorio de código en la compilación anómala.

Debe saber cómo se ha creado la clave SSH, si se ha creado la clave para un usuario específico o si la clave SSH es una clave de despliegue de Git en el repositorio. Quizás ha especificado una caducidad para la clave. El establecimiento de una caducidad para una clave es una función de GitLab.

IBM Cloud® Continuous Delivery se basa en GitLab. Para obtener más información, consulte Continuous Delivery Git repositorios y seguimiento de problemas.

Para resolver este error, realice las acciones siguientes.

  • Si conoce la clave SSH que está utilizando en Code Engine, actualice el despliegue o la clave de usuario con la misma clave pública SSH en GitLab. Con la actualización, no utilice una fecha de caducidad o actualización a una fecha de caducidad diferente. Puesto que está utilizando la misma clave SSH en el secreto en Code Engine, no es necesario actualizar el secreto de acceso al repositorio de código en Code Engine.

  • Actualice el secreto de acceso al repositorio de código para utilizar la nueva clave SSH.

    1. En GitLab, utilice la clave pública SSH para crear una clave de despliegue o una clave de usuario.

    2. En Code Engine, actualice el secreto de acceso al repositorio de código para utilizar la nueva clave privada SSH.

      Por ejemplo, supongamos que desea actualizar el secreto de acceso al repositorio de código de mysecret-ssh. Utilice el mandato ibmcloud ce secret update --format ssh para actualizar un secreto para autenticar el repositorio Git.

      ibmcloud ce secret update --format ssh --name mysecret-ssh --key-path $HOME/.ssh/id_rsa --known-hosts-path $HOME/.ssh/known_hosts
      

Para obtener más información sobre cómo trabajar con claves SSH para un repositorio de código, consulte Acceso a repositorios de código privado.