A construção falha na etapa de origem

Depois de criar e executar uma construção, sua construção não é concluída com sucesso e você recebe uma mensagem de que a construção falha na etapa de origem.

Se você receber uma mensagem de que a etapa de origem falha durante uma construção, verifique os logs da construção para determinar a causa raiz do problema.

Exemplo de Mensagem de Erro

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>

Execute o comando ibmcloud ce buildrun logs. Concentre-se nos logs da etapa com falha,

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

O texto do erro é diferente com base no que deu errado. A tabela a seguir descreve o texto do erro e potenciais causas raiz para este cenário.

Texto do erro e causas raiz para a etapa de origem do Git com falha.
A mensagem de erro contém Potenciais causas raiz
terminal prompts disabled
  • O repositório não existe.
  • A URL de origem foi fornecida utilizando-se protocolo HTTPS, mas o repositório é privado e, portanto, requer o protocolo SSH. O protocolo errado foi usado.
Host key verification failed
  • A URL de origem foi fornecida com o uso do protocolo SSH, mas nenhum segredo foi fornecido. O protocolo errado foi usado, está faltando um segredo ou está incorreto.
Permission denied (publickey)
  • A URL de origem foi fornecida usando-se o protocolo SSH, mas um segredo está ausente ou incorreto.
Couldn't find remote ref
  • A revisão (nome da ramificação, nome da tag, ID de confirmação) especificada na construção não existe.
Your SSH key has expired. A chave SSH expirou.

Tente uma dessas soluções.

Se você está executando sua construção no console ou na CLI, use a CLI para solucionar problemas em sua construção.

  1. Execute o comando ibmcloud ce buildrun get --name BUILDRUN_NAME para exibir os detalhes de sua execução de construção.
  2. Revise a Reason na saída de comando.

Após verificar os logs e identificar possíveis causas raiz, use as ações de resolução a seguir para ajudá-lo a resolver o problema.

Resolução para um repositório não existente durante a construção

Use os comandos a seguir para atualizar a construção existente para referenciar sua origem do repositório Git e enviar a execução da construção.

  1. Use o comando ibmcloud ce build update para atualizar a configuração de construção; por exemplo,

    ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO>
    
  2. Use o comando ibmcloud ce buildrun submit para enviar uma nova execução de compilação. Para o comando buildrun submit, deve-se especificar a opção --build para fornecer o nome de sua configuração de construção. Opcionalmente, é possível especificar a opção --name para fornecer o nome para esta execução de compilação. Se você especificar a opção --name, certifique-se de usar uma execução de compilação diferente da execução de compilação com falha ou assegure-se de excluir a execução de compilação com falha usando o comando ibmcloud ce buildrun delete. Por exemplo,

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

Resolução para um protocolo errado ou um segredo ausente durante a construção

A URL para um repositório Git pode ser especificada usando o protocolo HTTPS ou SSH. O GitHub e o GitLab fornecem uma maneira de alternar o formato da URL na IU do Git. O protocolo HTTPS não requer autenticação, mas poderá ser usado apenas se o repositório for público. Para repositórios privados, deve-se usar o protocolo SSH e fornecer um segredo para o repositório. Repositórios em uma configuração do GitHub Enterprise podem ser públicos, mas ainda requerem autenticação e esses repositórios do GitHub Enterprise também podem ser usados apenas usando o protocolo SSH.

Para repositórios públicos

Se a falha tiver acontecido para um repositório público, atualize a construção existente para usar a URL HTTPS do repositório Git e execute a construção.

  1. Use o comando ibmcloud ce build update para atualizar a configuração de construção para usar a URL de HTTPS do repositório Git; por exemplo,

    ibmcloud ce build update --name <BUILD_NAME> --source <GIT_REPO>
    
  2. Use o comando ibmcloud ce buildrun submit para enviar uma nova execução de compilação. Para o comando buildrun submit, deve-se especificar a opção --build para fornecer o nome de sua configuração de construção. Opcionalmente, é possível especificar a opção --name para fornecer o nome para esta execução de compilação. Se você especificar a opção --name, certifique-se de usar uma execução de compilação diferente da execução de compilação com falha ou assegure-se de excluir a execução de compilação com falha usando o comando ibmcloud ce buildrun delete. Por exemplo,

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

Para repositórios privados

Se a falha ocorreu para um repositório privado, crie um segredo SSH e use o protocolo SSH. Um segredo de SSH contém as credenciais para acessar o repositório privado que contém o código-fonte para construir a sua imagem de contêiner Um segredo do SSH também é usado como um segredo de acesso do repositório do Git O segredo do SSH contém uma chave privada enquanto a chave pública correspondente é armazenada com seu provedor de repositório Git. Para obter mais informações sobre a criação de um par de chaves e armazenar a parte pública no GitHub ou no GitLab, consulte Acessando repositórios de código privado. É importante que o seu arquivo de chave privado não esteja criptografado com uma passphrase para fazer upload dele no Code Engine. O formato do arquivo de chave privada pode variar, o que dificulta a avaliação do arquivo quanto à criptografia. Dependendo da versão da ferramenta ssh-keygen que foi usada para criar o par de chaves, o arquivo pode ter um dos cabeçalhos a seguir:

  • Se o arquivo for iniciado com -----BEGIN RSA PRIVATE KEY-----, ele usará o formato PEM e terá sido criado com uma versão mais antiga de ssh-keygen. Se o arquivo for criptografado com uma passphrase, geralmente ele conterá uma linha como esta: Proc-Type: 4,ENCRYPTED.

  • Se o arquivo for iniciado com -----BEGIN OPENSSH PRIVATE KEY-----, ele terá sido criado com uma versão mais recente de ssh-keygen. Para verificar se ele é criptografado com uma passphrase, execute o 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):
    

    É possível escapar o comando usando Ctrl+C. Se o comando requerer a passphrase antiga (primeiro exemplo), o arquivo original terá sido criptografado, caso contrário, ele solicitará diretamente a passphrase do novo arquivo (segundo exemplo).

    Para decriptografar um arquivo de chave privada criptografada, execute o comando a seguir e deixe a nova passphrase vazia.

    $ 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 comando modifica o arquivo de chave privada. Se for necessário reter sua versão criptografada, crie uma cópia primeiro.

Para criar um segredo SSH e usar o protocolo SSH,

  1. Execute o comando ibmcloud ce secret create --format ssh. Um segredo do SSH também é usado como um segredo de acesso do repositório do Git O SSH_KEY_PATH precisa apontar para o arquivo de chave privado que corresponde à chave pública em sua conta ou à chave de implementação no repositório. Esse comando requer um nome e um caminho de chave e também permite outros argumentos opcionais como o caminho para o arquivo de hosts conhecidos. Se você especificar a opção --known-hosts-path, inclua o host do repositório Git, por exemplo github.com ou gitlab.com em seu arquivo de hosts conhecidos. Para obter mais informações, consulte Acessando repositórios 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. Use o comando ibmcloud ce build update para atualizar a configuração de compilação para usar a URL SSH do repositório Git e referenciar o segredo do SSH, <GIT_REPO_SECRET> Por exemplo,

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

    No exemplo prévio, especifique a URL de SSH usando o prefixo git@ para sua origem, como --source git@github.com:IBM/CodeEngine.git.

Resolução para uma revisão errada durante a construção

Uma configuração de construção especifica o repositório de origem usando sua URL e, opcionalmente, uma revisão. A revisão pode ser o nome de uma ramificação ou de uma tag ou um identificador de confirmação. Por padrão, a ramificação main é construída. Revise a mensagem de erro para obter informações sobre algo que foi especificado, mas que não existe.

  1. Use o comando ibmcloud ce build update para atualizar a configuração de construção para usar uma revisão correta (ou confirmação); por exemplo,

    ibmcloud ce build update --name <BUILD_NAME> --commit <COMMIT>
    
  2. Use o comando ibmcloud ce buildrun submit para enviar uma nova execução de compilação. Para o comando buildrun submit, deve-se especificar a opção --build para fornecer o nome de sua configuração de construção. Opcionalmente, é possível especificar a opção --name para fornecer o nome para esta execução de compilação. Se você especificar a opção --name, certifique-se de usar uma execução de compilação diferente da execução de compilação com falha ou assegure-se de excluir a execução de compilação com falha usando o comando ibmcloud ce buildrun delete. Por exemplo,

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

Resolução para uma chave SSH expirada durante a construção.

Quando você usar uma chave SSH para se conectar ao seu repositório de origem e receber um erro que indica que a chave SSH expirou, certifique-se de verificar as configurações para a chave SSH que você usa como um segredo de acesso do repositório de código na construção com falha

Deve-se saber como a chave SSH foi criada, se a chave foi criada para um usuário específico ou se a chave SSH é uma chave de implementação Git no repositório. Talvez você tenha especificado uma expiração para a chave. Configurar uma expiração para uma chave é uma função de GitLab.

IBM Cloud® Continuous Delivery é baseado em GitLab. Para obter mais informações, consulte Continuous Delivery Git repos e rastreamento de problemas..

Para resolver esse erro, execute as ações a seguir:

  • Se você souber a chave SSH que está usando no Code Engine, atualize a chave de implementação ou do usuário com a mesma chave pública SSH no GitLab. Com a atualização não use uma expiração ou atualização para uma data de expiração diferente. Como você está usando a mesma chave SSH em seu segredo no Code Engine, não é necessário atualizar o segredo de acesso do repositório de código no Code Engine.

  • Atualize o segredo de acesso do repositório de código para usar a nova chave SSH.

    1. No GitLab, use a chave pública SSH para criar uma chave de implementação ou uma chave do usuário

    2. No Code Engine, atualize o segredo de acesso do repositório de código para usar a chave privada SSH.

      Por exemplo, suponha que você deseja atualizar o segredo de acesso do repositório de código do mysecret-ssh Use o comando ibmcloud ce secret update --format ssh para atualizar um segredo para autenticar seu repositório do Git

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

Para obter mais informações sobre como trabalhar com chaves SSH para um repositório de código, consulte Acessando repositórios de código privado..