ondram/ci-detector

检测持续集成环境并提供对当前构建属性的一体化访问

4.2.0 2024-03-12 13:22 UTC

This package is auto-updated.

Last update: 2024-08-25 12:30:50 UTC


README

Latest Stable Version Packagist Downloads Coverage Status GitHub Actions Build Status Travis Build Status AppVeyor Build Status

PHP 库,用于检测持续集成环境并读取当前构建的信息。

为什么

如果你需要检测某些 CLI 脚本/工具是否在自动化环境中运行(在 CI 服务器上),则此库非常有用。基于此,你的脚本可能表现不同。例如,它可以隐藏只对真实人物相关的信息,如进度条。

此外,你可能还想检测一些关于当前构建的信息:构建 ID、git 提交、分支等。例如,如果你想在日志中记录这些值,发布到 Slack 等。

如何使用

检测基于每个 CI 服务器注入到构建环境的环境变量。然而,这些变量在每个 CI 中的命名都不同。此库包含许多支持 CI 服务器适配器以处理这些差异,因此你可以使你的脚本(特别是 CLI 工具)可移植到多个构建环境。

支持的持续集成服务器

以下 CI 服务器当前被识别

如果你最喜欢的 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”库存在,例如