ondram / ci-detector
检测持续集成环境并提供对当前构建属性的一体化访问
4.2.0
2024-03-12 13:22 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- ergebnis/composer-normalize: ^2.13.2
- lmc/coding-standard: ^3.0.0
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/extension-installer: ^1.1.0
- phpstan/phpstan: ^1.2.0
- phpstan/phpstan-phpunit: ^1.0.0
- phpunit/phpunit: ^9.6.13
README
PHP 库,用于检测持续集成环境并读取当前构建的信息。
为什么
如果你需要检测某些 CLI 脚本/工具是否在自动化环境中运行(在 CI 服务器上),则此库非常有用。基于此,你的脚本可能表现不同。例如,它可以隐藏只对真实人物相关的信息,如进度条。
此外,你可能还想检测一些关于当前构建的信息:构建 ID、git 提交、分支等。例如,如果你想在日志中记录这些值,发布到 Slack 等。
如何使用
检测基于每个 CI 服务器注入到构建环境的环境变量。然而,这些变量在每个 CI 中的命名都不同。此库包含许多支持 CI 服务器适配器以处理这些差异,因此你可以使你的脚本(特别是 CLI 工具)可移植到多个构建环境。
支持的持续集成服务器
以下 CI 服务器当前被识别
- AppVeyor
- AWS CodeBuild
- Azure DevOps Pipelines
- Bamboo
- Bitbucket Pipelines
- Buddy
- CircleCI
- Codeship
- continuousphp
- drone
- GitHub Actions
- GitLab
- Jenkins
- SourceHut
- TeamCity
- Travis CI
- Wercker
如果你最喜欢的 CI 服务器缺失,请随意发送 pull-request!
安装
使用 Composer 安装
$ composer require ondram/ci-detector
示例用法
<?php $ciDetector = new \OndraM\CiDetector\CiDetector(); if ($ciDetector->isCiDetected()) { // Make sure we are on CI environment echo 'You are running this script on CI server!'; $ci = $ciDetector->detect(); // Returns class implementing CiInterface or throws CiNotDetectedException // Example output when run inside GitHub Actions build: echo $ci->getCiName(); // "GitHub Actions" echo $ci->getBuildNumber(); // "33" echo $ci->getBranch(); // "feature/foo-bar" or empty string if not detected // Conditional code for pull request: if ($ci->isPullRequest()->yes()) { echo 'This is pull request. The target branch is: '; echo $ci->getTargetBranch(); // "main" } // Conditional code for specific CI server: if ($ci->getCiName() === OndraM\CiDetector\CiDetector::CI_GITHUB_ACTIONS) { echo 'This is being built on GitHub Actions'; } // Describe all detected values in human-readable form: print_r($ci->describe()); // Array // ( // [ci-name] => GitHub Actions // [build-number] => 33 // [build-url] => https://github.com/OndraM/ci-detector/commit/abcd/checks // [commit] => fad3f7bdbf3515d1e9285b8aa80feeff74507bde // [branch] => feature/foo-bar // [target-branch] => main // [repository-name] => OndraM/ci-detector // [repository-url] => https://github.com/OndraM/ci-detector // [is-pull-request] => Yes // ) } else { echo 'This script is not run on CI server'; }
API 方法参考
CiInterface
实例(由 $ciDetector->detect()
返回)的可用方法
每个 CI 服务器的支持属性
大多数 CI 服务器支持(✔)检测所有信息。然而,一些没有公开必要的环境变量,因此读取某些信息可能不受支持(❌)。
测试
检查代码风格、静态分析和运行单元测试
composer all
要自动修复代码风格违规,请运行
composer fix
独立 CLI 版本
如果你想在独立 CLI 命令(即不使用 PHP 项目的代码)中使用 CI Detector,请参阅 ci-detector-standalone 存储库,其中你可以下载作为独立 PHAR 文件具有简单命令行界面的 CI Detector。
变更日志
有关最新更改,请参阅 CHANGELOG.md 文件。此项目遵循 语义版本化。
其他语言的类似库
一些其他语言的“CI Info”库存在,例如
- Go - KlotzAndrew/ci-info
- JavaScript/Node.js - watson/ci-info
- Python - mgxd/ci-info
- Rust - sagiegurari/ci_info