Composer-在DockerFile中使用用户名和密码(不带SSH密钥)在管道上克隆Git存储库(Bitbucket)

Composer-在DockerFile中使用用户名和密码(不带SSH密钥)在管道上克隆Git存储库(Bitbucket),git,docker,composer-php,bitbucket,Git,Docker,Composer Php,Bitbucket,我有一个composer.json文件,它检查我在Docker中构建的两个私有Bitbucket存储库 "repositories": [ { "type": "vcs", "url": "git@bitbucket.org:repo/service.git" }, { "type": "vcs", "url": "git@bitbucket.org:repo/package.git" } ]

我有一个
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,这并不理想(总体来说是一种非常糟糕的做法)

参考文档,SSH密钥似乎是唯一受支持的选项-

唯一的要求是为git客户端安装SSH密钥

我希望有一种通过用户名和密码进行身份验证的方法,我可以将其与Bitbucket存储库变量一起传递,您可以保护这些变量


我还将采用其他人提出的任何其他解决方法来构建一个Docker映像,该映像运行
composer安装
,用于检查私有git存储库。

我对composer不熟悉,但我可以想到一个可能对您有所帮助的选项。

使用ssh键创建一个基本映像,并将该映像存储在专用docker注册表中
然后从映像中开始每个构建,并且密钥已经在其中,这样您就不必在源代码管理中保存密钥。

此外,您甚至不必使用此映像实际上,您可以使用docker多级构建,并将密钥从基本映像复制到您想要使用的任何映像。这样,您仍然可以使用您想要的任何docker映像进行构建,并且不使用源代码管理

附加说明
bitbucket中有使用url中的用户名和密码进行身份验证的选项,如下所示。
https://username:password@bitbucket.org/username/repo.git

也许这会有用。

我对composer不熟悉,但我可以想出一个可能对您有所帮助的选项。

使用ssh键创建一个基本映像,并将该映像存储在专用docker注册表中
然后从映像中开始每个构建,并且密钥已经在其中,这样您就不必在源代码管理中保存密钥。

此外,您甚至不必使用此映像实际上,您可以使用docker多级构建,并将密钥从基本映像复制到您想要使用的任何映像。这样,您仍然可以使用您想要的任何docker映像进行构建,并且不使用源代码管理

附加说明
bitbucket中有使用url中的用户名和密码进行身份验证的选项,如下所示。
https://username:password@bitbucket.org/username/repo.git

这可能很有用。

无需将密钥烘焙到容器中-您可以在repo admin面板的管道中添加私钥

这个过程看起来有点像这样:

  • 转到repo管理面板并单击“SSH密钥”链接
  • 添加现有私钥,或让管道为您生成2048位RSA密钥
  • 如果您使用的是管道生成的密钥,则复制公钥;如果使用的是现有密钥,请复制其公钥。将复制的密钥添加到
    服务
    repos作为“访问密钥”(在这些repos的管理面板上的“访问密钥”屏幕中)
  • 让bitbucket-pipelines.yml正常使用SSH。SSH密钥屏幕中的密钥将是连接尝试的默认密钥;Bitbucket已经知道自己的主机密钥指纹,因此您不必更新已知的\u主机,并且访问密钥设置提供对repo的只读访问,而无需烧掉用户席位

  • 是这方面的文档。

    无需将密钥烘焙到容器中-您可以在repo admin面板的管道中添加私钥

    这个过程看起来有点像这样:

  • 转到repo管理面板并单击“SSH密钥”链接
  • 添加现有私钥,或让管道为您生成2048位RSA密钥
  • 如果您使用的是管道生成的密钥,则复制公钥;如果使用的是现有密钥,请复制其公钥。将复制的密钥添加到
    服务
    repos作为“访问密钥”(在这些repos的管理面板上的“访问密钥”屏幕中)
  • 让bitbucket-pipelines.yml正常使用SSH。SSH密钥屏幕中的密钥将是连接尝试的默认密钥;Bitbucket已经知道自己的主机密钥指纹,因此您不必更新已知的\u主机,并且访问密钥设置提供对repo的只读访问,而无需烧掉用户席位

  • 是这方面的文档。

    这是一个理想的解决方案,我确实尝试过,但对我的用例不起作用。我认为原因在于管道本身没有调用
    composer
    。实际上是
    docker build
    容器(在管道容器中)在做这项工作,它没有访问密钥的权限。我已经测试并可以直接在
    docker构建之外的管道上运行
    composer
    这是一个理想的解决方案,我尝试过,但对我的用例不起作用。我认为原因在于管道本身没有调用
    composer
    。实际上是
    docker build
    容器(在管道容器中)在做这项工作,它没有访问密钥的权限。我已经测试并可以直接在docker build外部的管道上运行
    composer
    。如果您的问题的一个答案是正确的,您应该接受它。如果您的问题的一个答案是正确的,您应该接受它。
    ADD ./build_id_rsa /home/user/.ssh/id_rsa
    ADD ./build_id_rsa.pub /home/user/.ssh/id_rsa.pub