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

时间:2014-08-20 08:43:49

标签: php git github ssh 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"
    }
}

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

但是,当我们运行composer update时,存储库的提取失败,因为composer无法访问存储库。

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

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

4 个答案:

答案 0 :(得分:29)

我理解问题标题特别提及使用'vcs'类型,但这是使用私有git repos将项目部署为包的alternate method

"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密钥。

答案 1 :(得分:14)

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

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

答案 2 :(得分:8)

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

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

应该是

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

我遇到了同样的问题并修复了它。

答案 3 :(得分:4)

let pageIndex: Int = Int(bitPattern: bytes) / pageSize
let pageAlignedAddress: UnsafeMutableRawPointer? = UnsafeMutableRawPointer(bitPattern: pageIndex * pageSize)

我非常感谢答案和指导;但是,可以让解决方案适合我。并且,我认为答案可能会使用一些关于这里似乎正在发生的事情的更多细节。

  • 供应商:包"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}": "*" } 中使用的供应商名称。
  • package-name:包中composer.json的包名用户。
  • 任意版本:随机版本号;不需要作为GitHub中的版本存在。
  • github-username: repo所在的GitHub用户帐户。
  • github-repository: GitHub存储库名称。
  • branch:签出代码时使用的GitHub分支。

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

猜想点和不确定性:

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