在构建服务器上使用 VCS 在 GitHub 上使用 Composer 和 Private Repository

Posted

技术标签:

【中文标题】在构建服务器上使用 VCS 在 GitHub 上使用 Composer 和 Private Repository【英文标题】:Using Composer and Private Repository on GitHub using VCS on Build Server 【发布时间】:2014-10-13 13:18:56 【问题描述】:

我的 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 无权访问存储库,因此获取存储库失败。

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

我们可以做些什么来让 composer 在构建过程中访问我们的私有仓库?

【问题讨论】:

【参考方案1】:
"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": "*"

我非常感谢您的回答和指导;但是,无法找到适合我的解决方案。而且,我认为答案可能会使用一些关于这里似乎正在发生的事情的额外细节。

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

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

猜想点和不确定性:

    我不确定如果将package.name 成员更改为不正确的内容会发生什么。换句话说,我不知道这是否只是require 的内部引用;或者,如果那里会发生其他事情。 我不确定分支是否真的改变了任何东西,我无法测试。

【讨论】:

我需要在哪里提及这个? magento root 的 composer.json 或模块的 composer.json composer.json - “repositories”是一个根键。一切就绪后,您就可以运行 composer update。 我在这上面花了很长时间。因此,感谢您跟进并发布您的解决方案。非常感谢。 当然。很高兴它有帮助。它也适用于本地软件包;因此,您可以在本地服务器上拥有“私人包”,只是为了将其分开。【参考方案2】:

原始问题中的 URL 缺少冒号:

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

应该是

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

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

【讨论】:

【参考方案3】:

我理解问题标题特别提到了使用“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": "*"

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

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

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

【讨论】:

@PaulPreibisch 我想你已经解决了这个问题?如果没有,请粘贴您的代码,我们会看看。 正如 stuart 下面解释的那样,“url”参数缺少一个冒号 (:)。我已尝试编辑答案,但不允许编辑一个字符。 当我尝试上述解决方案时出现以下错误....谁能帮帮我....?执行 git clone --mirror 'https://***:***@github.com//company/project.git' '/home/xyz/.cache/composer/vcs/git- github.com 失败--company-project.git/'克隆到裸存储库'/home/xyz/.cache/composer/vcs/git-github.com--company-project.git'... 致命:无法访问'https: //***:***@github.com//company/project.git/': 请求的 URL 返回错误:400【参考方案4】:

您可以配置 composer 使用密钥文件访问私有仓库。

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

【讨论】:

以上是关于在构建服务器上使用 VCS 在 GitHub 上使用 Composer 和 Private Repository的主要内容,如果未能解决你的问题,请参考以下文章

pycharm 配置 github 版本控制 VCS

在不同的设置上使 SQL Server 中的 Microsoft Access 表相同

React:在没有构建的情况下运行生产

二次采样比例图像视图 - 在 Imageview 上使引脚标记可点击

如何使用自动布局在情节提要上使网格并排 uiview 响应

如何在微控制器按钮上使while循环更快?