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 中失败。
我们尝试过的东西:
刷新 Travis 缓存
在安装之前清除作曲家缓存 - .travis.bash
添加:
"github-protocols": ["https"]
- 希望它会消失...
到目前为止运气不好。
不幸的是,我们现在只是在本地测试并忽略了 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
背景
我们有一个 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 中失败。
我们尝试过的东西:
刷新 Travis 缓存
在安装之前清除作曲家缓存 -
.travis.bash
添加:
"github-protocols": ["https"]
- 希望它会消失...
到目前为止运气不好。
不幸的是,我们现在只是在本地测试并忽略了 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