我有一个composer.json
文件,它检查了我在Docker中构建的两个私有Bitbucket存储库。
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:repo/service.git"
},
{
"type": "vcs",
"url": "git@bitbucket.org:repo/package.git"
}
]
目前,我可以让它工作的唯一方法是将 SSH 密钥注入映像,以便它可以拉取私有存储库。反过来,这要求我们将密钥签入 SCM,这并不理想(总体上是一种非常糟糕的做法(。
ADD ./build_id_rsa /home/user/.ssh/id_rsa
ADD ./build_id_rsa.pub /home/user/.ssh/id_rsa.pub
参考文档,看起来SSH密钥是唯一受支持的选项 - https://getcomposer.org/doc/05-repositories.md#using-private-repositories。
唯一的要求是为 git 客户端安装 SSH 密钥。
我希望有一种方法可以通过用户名和密码进行身份验证,我可以使用您可以保护的 Bitbucket 存储库变量传入。
我还将采用其他人想出的任何其他解决方法来构建一个运行composer install
的 Docker 映像,该映像会签出私有 git 存储库。
我不熟悉作曲家,但这是我能想到的一个选项,可能会对您有所帮助。
使用 ssh 密钥创建基础映像,并将映像存储在专用 docker 注册表中
然后从映像中分层每个生成,其中已有密钥,这样就不必将密钥保存在源代码管理中。
此外,您甚至不必使用此映像,实际上您可以使用 docker 多阶段构建并将密钥从基础映像复制到您想要使用的任何映像,这样您仍然可以使用您想要的任何 docker 映像构建并具有 not from 源代码管理。
附言
bitbucket中有选项可以使用URL中的用户名和密码进行身份验证,如下所示。https://username:password@bitbucket.org/username/repo.git
也许这可能很有用。
无需将密钥烘焙到容器中 - 可以在存储库管理面板中的管道中添加私钥。
该过程看起来有点像这样:
- 转到存储库管理面板,然后单击"SSH 密钥"链接。
- 添加现有私钥,或让管道为你生成 2048 位 RSA 密钥。 如果使用 Pipelines 生成的密钥,请复制公钥
- ;如果使用现有密钥,请复制其公钥。将复制的密钥添加到
service
,并将package
存储库作为"访问密钥"(在这些存储库管理面板上的"访问密钥"屏幕中(。 - 让 bitbucket-pipelines.yml 像往常一样使用 SSH。SSH 密钥屏幕中的密钥将是连接尝试的默认密钥;Bitbucket 已经知道自己的主机密钥指纹,因此您不必更新known_hosts,并且访问密钥设置提供对存储库的只读访问权限,而无需刻录用户席位。
https://confluence.atlassian.com/bitbucket/use-ssh-keys-in-bitbucket-pipelines-847452940.html 是这方面的文档。