IBM Cloud Code Engine 无法为私有存储库构建

问题描述

我正在使用 IBM Cloud Code Engine to build the source code from a private git repo。我试了很多次,buildrun 总是失败。以下是我已经完成的步骤。

  1. 将我的公钥 (/root/.ssh/id_rsa.pub) 作为部署密钥添加到我的私有仓库中

  2. 使用 IBM Cloud Code Engine CLI 创建存储库访问凭证 ibmcloud ce repo create --name ibmgithub --key-path /root/.ssh/id_rsa --host github.ibm.com

  3. 使用 IBM Cloud Code Engine CLI 创建构建,然后提交构建运行 ibmcloud ce build create --name minion --image us.icr.io/mynamespace/myimg --rs ce-default-icr-us-south --git-repo-secret ibmgithub --source https://github.ibm.com/myaccount/myrepo --strategy dockerfile --size medium

  4. 构建运行总是失败

#:~/synthetics-private-minion# ibmcloud ce bd get -n minion
Getting build 'minion'
OK
Name:          minion  
ID:            0abc63a0-07d5-42c5-b70a-227e52310276  
Project Name:  private location  
Project ID:    25491342-e9e8-4ac7-90ff-b9994cda9242  
Age:           6m24s  
Created:       2021-03-31T04:11:41-05:00  
Status:        Succeeded  
Reason:        all validations succeeded  
Image:            us.icr.io/mynamespace/myimg 
Registry Secret:  ce-default-icr-us-south  
Build Strategy:   kaniko-medium  
Timeout:          10m0s  
Source:           https://github.ibm.com/myaccount/myrepo  
Commit:           main  
Dockerfile:       Dockerfile  
Repo Secret:      ibmgithub  
Build Runs:    
  Name              Status                                                                                                                                                                                                                                                                                                                            Age  
  minion-run-sj5fl  "step-git-source-source-cm7pc" exited with code 1 (image: "icr.io/obs/codeengine/tekton-pipeline/git-init-4874978a9786b6625dd8b6ef2a21aa70@sha256:47b8008fa1910fa36c8284871eb9d8e7fbab8bc3a1db4cdd97c61d88727cc58f"); for logs run: kubectl -n 7pztl5cw3ad logs minion-run-sj5fl-nbzft-pod-rx9x9 -c step-git-source-source-cm7pc  5m42s  
  1. 我怀疑构建运行未能从我的私人存储库中获取代码。我检查了 repo UI,它显示了部署密钥 Never used

谁能解释一下?谢谢。

解决方法

IBM Cloud Code Engine 的构建功能可以访问公共和私有存储库中的源代码。存储库公开有两个条件:

  1. 必须在您的存储库提供商(例如 GitHub 或 GitLab)处将存储库标记为公开。
  2. 必须无需任何身份验证即可访问存储库。这对 GitHub Enterprise 安装起到了作用,例如 github.ibm.com,它可以在前面放置额外的身份验证以防止匿名访问。

从代码引擎的角度来看,第二个条件使您的存储库成为私有存储库。要在代码引擎构建中处理存储库,有一个简单的规则:

  • 对于公共仓库,使用仓库的 HTTPS URL,没有仓库访问密码
  • 对于私有仓库,使用仓库的 SSH URL 和仓库访问密码

您正确指定了存储库访问密钥,但必须更改源 URL 以使用 SSH 协议。找到 URL 的最简单方法是 GitHub 中的代码下拉列表:

GitHub Code drop-down

所以在您的情况下应该是 [email protected]/myaccount/myrepo

进一步参考:

有关如何设置存储库访问密码的说明可以在 Accessing private code repositories 中找到。

可以在 Troubleshooting tips for builds 中找到 BuildRun 失败的故障排除。它包括从 BuildRun 检索日志的说明,并将您看到的错误消息转换为根本原因,并提供解决步骤。

,

由于您使用的是 ssh 密钥,请确保您的 git 存储库的 URL 以 git@ 而不是 https:// 开头。因此,在您的情况下,它应该是 [email protected]/myaccount/myrepo

有关构建失败的更多问题,您可以查看相关的 troubleshooting buildruns section in the Code Engine docs