在 GitHub 上使用编译服务器上的 VCS 使用 Composer 和私有存储库

2022-08-30 14:32:32

My compsoser.json 使用来自我们组织 Github 帐户的 2 个私有仓库,如下所示。

{
    "name": "API",
    "repositories": [
      {
        "type": "vcs",
        "url": "git@github.com/company/private.git"
      },
      {
        "type": "vcs",
        "url": "git@github.com/company/private2.git"
      }
    ],
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": ">2.1.3",
        "doctrine/mongodb-odm": "dev-master",
        "doctrine/doctrine-mongo-odm-module": "dev-master",
        "company/private": "dev-master",
        "company/private2": "dev-master"
    }
}

我们已设置 SSH 密钥,并将其添加到暂存服务器上的授权密钥。当我们运行git clone时,它可以完美地工作,并且不要求任何凭据。

但是,当我们运行 Composer 更新时,获取存储库会失败,因为 composer 无权访问存储库。

由于这是以非交互式方式运行的,因为这是构建脚本的一部分,因此我们无法输入凭据,并且希望将其自动化。

我们可以做些什么来让作曲家在构建期间访问我们的私有存储库?


答案 1

我知道问题标题特别提到使用类型“vcs”,但这是使用私有git存储库将项目部署为包的另一种方法

"repositories": [
  {
    "type": "package",
    "package": {
      "name": "company/private",
      "version": "0.1.0",
      "type": "package",
      "source": {
        "url": "git@github.com:/company/private.git",
        "type": "git",
        "reference": "master"
      }
    }
  }
],
"require": {
  "company/private": "*"
}

限制是,如果需要最新版本,则必须在每次部署时手动更改版本号。但是,这也是它的优势。

以这种方式定义存储库将允许您提取特定的标记版本。在这种情况下,将拉动 带有标记的提交。0.1.0composer update

您需要在 github 帐户中添加要部署到的服务器的 SSH 密钥。


答案 2

您可以将 Composer 配置为使用密钥文件访问私有存储库。

更多信息: https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#security


推荐