在Build Server上使用VCS在GitHub上使用Composer和Private Repository

Sim*_*mon 27 php git ssh github composer-php

我的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"
    }
}
Run Code Online (Sandbox Code Playgroud)

我们设置了SSH密钥并将它们添加到我们的登台服务器上的授权密钥.当我们运行git clone时,它工作得很好,而不是要求任何凭据.

但是,当我们运行composer update时,获取存储库会失败,因为composer无法访问存储库.

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

我们可以做些什么来让作曲家在构建过程中访问我们的私人回购?

myo*_*yol 31

我理解问题标题特别提到使用类型'vcs',但这是使用私有git repos将项目部署为包的另一种方法.

"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": "*"
}
Run Code Online (Sandbox Code Playgroud)

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

以这种方式定义仓库将允许您提取特定的标记版本.在这种情况下,带有标记的提交0.1.0将被启用composer update.

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


mic*_*l_w 14

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

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


小智 9

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

"url": "git@github.com/company/private.git"
Run Code Online (Sandbox Code Playgroud)

应该

"url": "git@github.com:/company/private.git"
Run Code Online (Sandbox Code Playgroud)

我只是遇到了同样的问题并修复了它.


Jos*_*uce 5

"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}": "*"
}
Run Code Online (Sandbox Code Playgroud)

我真的很感谢答案和指导;但是,无法找到适合我的解决方案。而且,我认为答案可能会在此处似乎正在发生的事情上使用更多细节。

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

给我最大问题的两件事是冒号(:)不(不应该吗?)后跟正斜杠(/)。别忘了放在.git末尾url

猜想和不确定点:

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