Travis CI 构建 PHP 项目并从 Composer 中提取依赖项,尝试使用 git@ 而不是 https

Travis CI building PHP project and pulling dependencies from Composer, tries to use git@ instead of https

背景

我们有一个 PHP project that was working fine with Travis CI 直到某个时间点,从那以后就完全停止工作了。该项目无法使用 Composer 进行构建。

详情

上次成功构建是: this one

最近失败的构建是: this one, in the branch Naming Collisions which is this commit

不断出现的错误是:

Failed to execute git clone --mirror 'git@github.com:edmondscommerce/Faker.git' '/home/travis/.composer/cache/vcs/git-github.com-edmondscommerce-Faker.git/' 

最新分支是 NamingCollisions, this is the latest commit

composer.json we are using a fork for the Faker library中的通知:

  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/edmondscommerce/Faker.git"
    }
  ],

这对我们的本地测试来说一切正常,它只在 Travis 中失败。

我们尝试过的东西:

 "github-protocols": ["https"]

composer.json

到目前为止运气不好。

不幸的是,我们现在只是在本地测试并忽略了 Travis,因为它现在一直在失败,即使代码工作正常。

希望你们中的一位读者能帮助解决这个问题!

我们选择了什么

最终我们决定按照 Everon 的建议将 "no-api": true 添加到 repositories 配置中。

这会强制作曲家不再使用 github API (docs):

If you set the no-api key to true on a github repository it will clone the repository as it would with any other git repository instead of using the GitHub API.

我查看了这个,这不是 Travis 本身的问题。

在 Docker 实例中查看 Travis 和 运行 本地 Travis 环境后,我能够重现该问题。

Travis 抱怨无法通过 Github 进行身份验证。

您需要使用 Travis 环境变量,该变量随后可用于设置访问令牌,以便 Composer 可以执行安装 Faker 的 VCS 存储库分支所需的操作。

您可以在 Travis 的存储库设置中定义变量,然后它可以作为标准 Bash 变量在您的 travis before_script 数组或 [=40] 中使用=] 脚本。

构建日志中的令牌:

Setting environment variables from repository settings
$ export GITHUB_TOKEN=[secure]

您在此处定义所需的访问令牌: https://github.com/settings/tokens/new?scopes=repo

然后可以像这样在之前的脚本中设置它:

before_script:
  - composer config github-oauth.github.com ${GITHUB_TOKEN};
  - bash -x .travis.bash

另一种选择是将 "no-api" 添加到您的 Faker 分支 - 见下文。

...
"repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/edmondscommerce/Faker.git",
      "no-api": true
    }
]
...

构建(失败但已超过您遇到的问题) https://travis-ci.org/everon/doctrine-static-meta/jobs/352620456