silverstripe / travis-support
为 SilverStripe 测试提供 Travis 支持
Requires (Dev)
- phpunit/phpunit: 3.7.*-dev
This package is auto-updated.
Last update: 2024-09-14 14:56:32 UTC
README
简介
Travis 是一个开源的持续集成平台,主要意味着每次你向代码库提交时都会运行单元测试。该平台对开源项目免费,并且与 Github 集成良好。由于每个 SilverStripe 模块都需要在 SilverStripe 项目中进行测试,因此除了标准的 Composer 依赖项管理之外,还需要进行一些设置工作。
这些脚本允许你在多个分支上进行测试,并重写 composer.json
以匹配依赖项。脚本将测试你的模块与多个核心版本以及多个数据库(如果支持)进行兼容。
为什么要这么做?因为它表明你关心你的代码库的质量,并且向用户清晰地展示了其当前状态。这也有助于你管理针对多个数据库、SilverStripe 核心版本和其他依赖项的编码复杂性。
还没有编写单元测试?那么现在是时候开始使用 SilverStripe 测试指南 了。
Composer 设置
由于此脚本基于 Composer,你需要向你的模块添加一些元数据。将 composer.json
复制到你的模块根目录,并根据需要调整它。如果你有支持不同核心版本的模块分支,则将文件提交到每个分支。确保设置正确的 依赖项版本。
没有分支?你应该有,这样你的用户就可以信任发布版本的稳定性,并且可以清楚地了解依赖项。有关版本号的详细信息,请参阅 semver.org。
仅支持 SS 2.4 的分支的简化的 composer.json
{ "name":"some-vendor-prefix/my-awesome-module", ... 'require': {"silverstripe/framework": "2.4.*", "silverstripe/cms": "2.4.*"} }
支持 SS 3.0 及更高版本的分支的简化的 composer.json
{ "name":"some-vendor-prefix/my-awesome-module", ... 'require': {"silverstripe/framework": "~3.0", "silverstripe/cms": "~3.0"} }
现在将文件提交到各种模块分支,并在 Packagist 上注册它们,以便它们可以被 Composer 发现。
Travis 设置
免费的 Travis CI 服务通过在模块根目录中放置一个隐藏的 .travis.yml
文件进行配置(阅读有关 Travis YML 格式 的说明)。
以下是一个示例 .travis.yml
language: php php: - 5.3 env: matrix: - DB=MYSQL CORE_RELEASE=3.0 - DB=MYSQL CORE_RELEASE=3.1 - DB=MYSQL CORE_RELEASE=master - DB=PGSQL CORE_RELEASE=master matrix: include: - php: 5.4 env: DB=MYSQL CORE_RELEASE=master before_script: - phpenv rehash - composer self-update - git clone git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support - php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss - cd ~/builds/ss script: - vendor/bin/phpunit <yourmodule>/tests/
在设置过程中,为了避免反复推送以触发服务钩子,你应该通过 Travis WebLint 检查你的配置来节省时间。
现在调整 .travis.yml
中的 <yourmodule>
路径,在上述示例中,它将是 my-awesome-module
。调整 .travis.yml
中的支持的 PHP 版本、SS 核心版本和数据库(阅读有关 Travis PHP 配置 的更多信息)。考虑 黑名单或白名单 构建,以将单个构建的数量保持在合理水平。
上面的示例文件将运行以下构建
- DB=MYSQL CORE_RELEASE=3.0, php: 5.3
- DB=MYSQL CORE_RELEASE=3.1, php: 5.3
- 数据库=MYSQL 核心版本=master, php: 5.3
- 数据库=PGSQL 核心版本=master, php: 5.3
- 数据库=MYSQL 核心版本=master, php: 5.4
提交文件后,作为最后一步,您需要在travis-ci.org上启用您的模块。首次构建应在几分钟内开始。
作为额外奖励,您可以在README中包含构建状态图像,以宣传您的模块重视质量并持续集成。
添加额外模块
如果在设置过程中需要添加未在模块composer要求中明确包含的额外模块,可以使用--require
参数。
例如:
php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/behat-extension
您也可以通过逗号分隔名称或添加多个--require
标志来指定多个模块。每个名称也可以附加:<version>
以添加版本依赖。
例如:
php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/behat-extension:dev-master --require silverstripe-cms:4.0.x-dev
或等价于:
php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/behat-extension:dev-master,silverstripe-cms:4.0.x-dev
PDO 数据库连接器
许多数据库连接器支持通过PDO进行连接。如果您想包括PDO支持,也可以添加PDO=1环境变量。
请注意,此功能仅在SilverStripe 3.2或更高版本中受支持,在3.1或以下版本中将被忽略。
env: matrix: - DB=MYSQL CORE_RELEASE=3.2 PDO=1 - DB=MYSQL CORE_RELEASE=3.2
处理拉取请求
逻辑依赖于根据CORE_RELEASE
常量拉取不同的核心版本。这可能导致不一致,例如,当拉取请求依赖于其他分支时,例如当cms
模块的拉取请求依赖于framework
模块的等效分支。虽然无法干净利落地告诉Travis使用哪些分支,但临时修改travis.yml
可以帮助证明构建在正确的依赖项下通过。
- 将自定义fork
repositories
添加到模块的composer.json
中。它们将自动拉取到根composer.json
中。 - 将
CORE_RELEASE
环境变量设置为fork上的分支名称。 - 在
cms
和framework
模块上创建具有相同名称的分支。 - 在
installer
上创建分支或设置不同的CORE_INSTALLER_RELEASE
环境变量。 - 设置
CORE_ALIAS
环境变量以满足约束(例如4.0.x-dev
)。
请注意,这些fork中的.travis.yml
更改是临时的,在拉取请求合并之前需要撤销。不幸的是,Travis CI不支持版本控制之外的构建配置设置。
Github速率限制
Composer严重依赖于GitHub的API来检索存储库信息和下载存档。GitHub对未认证请求的速率限制很低。这意味着根据您的构建运行频率(以及每个构建中执行的API请求数量),构建可能会因为这些副作用而失败。
此脚本支持GITHUB_API_TOKEN
值。如果设置,它将将其写入全局composer配置(详情请见此处)。它可以通过Travis的安全环境变量加密。
为了激活配置,请在.travis.yml
中的env.global
添加一个条目。
env: global: - GITHUB_API_TOKEN=<token> matrix: - ...
或者,您可以通过Travis CI的仓库“设置”区域添加Token。
Behat和Selenium
这些脚本还允许通过Behat进行行为测试。启动此功能的最简单方法是使用本地运行的Selenium服务器和PHP内置的web服务器。以下是一个示例设置:
language: php matrix: include: - php: 5.3 env: DB=MYSQL CORE_RELEASE=3.1 - php: 5.4 env: DB=MYSQL CORE_RELEASE=3.1 BEHAT_TEST=1 before_script: - composer self-update - phpenv rehash - git clone -b tmp/travis-artifacts git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support - "if [ \"$BEHAT_TEST\" = \"\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss; fi" - "if [ \"$BEHAT_TEST\" = \"1\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/behat-extension; fi" - cd ~/builds/ss - php ~/travis-support/travis_setup_selenium.php --if-env BEHAT_TEST - php ~/travis-support/travis_setup_php54_webserver.php --if-env BEHAT_TEST script: - "if [ \"$BEHAT_TEST\" = \"\" ]; then vendor/bin/phpunit framework/tests; fi" - "if [ \"$BEHAT_TEST\" = \"1\" ]; then vendor/bin/behat @framework; fi"
工件上传
由于Travis构建是无状态的,因此构建完成后,您无法检查除实际构建日志之外的内容。这对于服务器日志等大文件以及图像来说是一个问题。
您可以使用 https://github.com/travis-ci/artifacts 来实现此目的,允许上传到Amazon S3。由于Behat已经创建任何失败测试步骤的截图,这对任何Behat脚本来说都是一个有用的补充。通过 travis_setup_selenium.php
创建的 behat.yml
已经设置为将截图保存到 artifacts/screenshots/
。
language: php env: global: - ARTIFACTS_REGION=us-east-1 - ARTIFACTS_BUCKET=silverstripe-travis-artifacts - secure: "..." # Encrypted ARTIFACTS_KEY - secure: "..." # Encrypted ARTIFACTS_SECRET matrix: include: - ... before_script: - ... script: - ... after_script: - php ~/travis-support/travis_upload_artifacts.php --if-env BEHAT_TEST,ARTIFACTS_BUCKET,ARTIFACTS_KEY,ARTIFACTS_SECRET --target-path artifacts/$TRAVIS_REPO_SLUG/$TRAVIS_BUILD_ID/$TRAVIS_JOB_ID --artifacts-base-url https://s3.amazonaws.com/$ARTIFACTS_BUCKET/
故障排除
在本地测试travis_setup.php
虽然不是100%准确,但您可以在自己的环境中相当接近地重现Travis的行为。只需查看之前的Travis构建的CLI输出即可开始。以下是一个在 translatable
模块的 1.0
分支上构建特定提交的示例
export TRAVIS_BRANCH=1.0 export TRAVIS_COMMIT=dd792af2fba119cfa22423203dd9f2e70676e651 export TRAVIS_REPO_SLUG=silverstripe/silverstripe-translatable export DB=MYSQL export CORE_RELEASE=3.0 git clone --depth=50 --branch=1.0 git://github.com/silverstripe/silverstripe-translatable.git silverstripe/silverstripe-translatable cd silverstripe/silverstripe-translatable git checkout -qf dd792af2fba119cfa22423203dd9f2e70676e651 git clone git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss cd ~/builds/ss phpunit translatable/tests
注意:每个SilverStripe模块都只能在SilverStripe项目的子文件夹上下文中工作,并且至少需要SilverStripe框架。因此,我们需要确保Travis默认执行的普通模块检出被重写为这一点。