在 GitHub 上使用 Composer 和私有存储库在构建服务器上使用 VCS


Using Composer and Private Repository on GitHub using VCS on Build Server

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 克隆时,它可以完美运行并且不要求任何凭据。

但是,当我们运行作曲家

更新时,存储库的获取失败,因为作曲家无法访问存储库。

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

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

我知道问题标题特别提到使用类型"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.0 的提交将在 composer update 上拉取。

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

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

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

原始问题中的网址缺少冒号:

"url": "git@github.com/company/private.git"

应该是

"url": "git@github.com:/company/private.git"

我只是遇到了同样的问题,这解决了它。

"name": "{vendor}/{package-name}",    
"repositories": [
    {
        "type": "package",
        "package": {
            "name": "{vendor}/{package-name}",
            "version": "{arbitrary-version}",
            "type": "package",
            "source": {
                "url": "git@github.com:{github-username}/{github-repository}.git",
                "type": "git",
                "reference": "{branch}"
            }
        }
    }
]
"require": {
    "{vendor}/{package-name}": "*"
}

我真的很感激他们的答案和指导;但是,无法获得适合我的解决方案。而且,我认为答案可能会使用一些关于这里似乎正在发生的事情的补充细节。

    供应商
  • 软件包composer.json中使用的供应商名称。
  • 包名
  • :包composer.json中的包名用户。
  • 任意版本:随机版本号;不需要作为版本存在于 GitHub 中。
  • github-username:存储库所在的 GitHub 用户帐户。
  • github-repository:GitHub 存储库名称。
  • 分支
  • 签出代码时要使用的 GitHub 分支。

给我带来最大问题的两件事是冒号(:(不(不应该?(后跟正斜杠(/(。不要忘记把.git放在url的末尾。

猜想和不确定性点:

  1. 我不确定如果您将package.name成员更改为不正确的内容会发生什么。换句话说,我不知道这是否是仅针对require的内部参考;或者,如果那里会发生其他事情。
  2. 不确定分支是否真的改变了什么,我无法进行测试。