bbaga / buildkite-php
用于消费 Buildkite API 的 PHP 客户端库
Requires
- ext-json: *
- guzzlehttp/psr7: ^1.6
- psr/http-client: ^1.0
Requires (Dev)
- bbaga/buildkite-php-guzzle-client: ^2.0
- phpunit/phpunit: ^8.5
- psalm/plugin-phpunit: ^0.10.0
- symplify/easy-coding-standard: ^7.2
- vimeo/psalm: ^3.11
Suggests
- bbaga/buildkite-php-guzzle-client: Provides basic, off the shelf http client implementation
This package is auto-updated.
Last update: 2024-09-25 03:27:29 UTC
README
安装
composer require bbaga/buildkite-php
使用方法
设置 API 对象
\Psr\Http\Client\ClientInterface
实现可在 bbaga/buildkite-php-guzzle-client
包中找到。
Rest API
use bbaga\BuildkiteApi\Api\RestApi; /** @var \Psr\Http\Client\ClientInterface $client */ $client = new MyHttpClient(); $api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN');
GraphQL API
use bbaga\BuildkiteApi\Api\GraphQLApi; /** @var \Psr\Http\Client\ClientInterface $client */ $client = new MyHttpClient(); $api = new GraphQLApi($client, 'MY_BUILDKITE_API_TOKEN');
与 Buildkite 的 GraphQL API 交互
use bbaga\BuildkiteApi\Api\GraphQLApi; use bbaga\BuildkiteApi\Api\GuzzleClient; $query = ' query example($slug: ID!, $first: Int){ viewer { user { name } } organization(slug: $slug) { pipelines(first: $first) { edges { node { id slug } } } } }'; $variables = json_encode(['slug' => 'my-org', 'first' => 5]); $client = new GuzzleClient(); $api = new GraphQLApi($client, 'MY_BUILDKITE_API_TOKEN'); $api->getResponseBody($api->post($query, $variables));
与 Buildkite 的 REST API 交互
遍历资源的示例
use bbaga\BuildkiteApi\Api\GuzzleClient; use bbaga\BuildkiteApi\Api\Rest\Fluent; use bbaga\BuildkiteApi\Api\RestApi; $client = new GuzzleClient(); $api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN'); /** Getting all the organizations that are visible with the TOKEN */ /** @var Fluent\Organization[] $organizations */ $organizations = (new Fluent\Organizations($api))->get(); /** @var Fluent\Organization $organization */ $organization = $organizations[0]; /** @var Fluent\Pipeline $pipelines */ $pipelines = $organization->getPipelines(); /** @var Fluent\Pipeline $pipeline */ $pipeline = $pipelines[0]; /** @var Fluent\Build[] $builds */ $builds = $pipeline->getBuilds(); /** @var Fluent\Build $build */ $build = $builds[0]; /** @var Fluent\Job[] $jobs */ $jobs = $build->getJobs(); /** @var Fluent\Emoji[] $emojis */ $emojis = $organizations[0]->getEmojis(); /** @var Fluent\Agent[] $emojis */ $agents = $organizations[0]->getAgents();
不遍历访问资源
在不遍历层次结构的情况下获取特定构建的数据。
use bbaga\BuildkiteApi\Api\GuzzleClient; use bbaga\BuildkiteApi\Api\Rest\Fluent; use bbaga\BuildkiteApi\Api\RestApi; $client = new GuzzleClient(); $api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN'); /** * Builds are identified by the follwoing three values */ $organizationSlug = 'my-org'; $pipelineSlug = 'my-pipeline'; $buildNumber = 23; $organization = new Fluent\Organization($api, ['slug' => $organizationSlug]); $pipeline = new Fluent\Pipeline($api, $organization, ['slug' => $pipelineSlug]); $build = new Fluent\Build($api, $organization, ['number' => $buildNumber, 'pipeline' => $pipeline]); $build->fetch()->getJobs();
创建新的管道
use bbaga\BuildkiteApi\Api\GuzzleClient; use bbaga\BuildkiteApi\Api\Rest\Fluent; use bbaga\BuildkiteApi\Api\RestApi; $client = new GuzzleClient(); $api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN'); $organization = new Fluent\Organization($api, ['slug' => 'my-org']); $pipeline = $organization->createPipeline( [ 'name' => 'my-pipeline', 'repository' => 'git@github.com:some/repo.git', 'steps' => [ [ 'type' => 'script', 'name' => 'upload artifact', 'command' => 'echo "Hello" > artifact.txt \ && buildkite-agent artifact upload artifact.txt \ && cat artifact.txt | buildkite-agent annotate --style "success" --context "junit"', ], [ 'type' => 'manual', 'name' => 'Needs to be unblocked', 'command' => 'echo "Unblocked!"', ], ] ] ); /** * Pipeline is ready, we can kick off the first build */ $buildSettings = [ 'commit' => 'HEAD', 'branch' => 'master', 'message' => 'Testing all the things :rocket:', ]; $pipeline->createBuild($buildSettings);
直接 API 调用
组织 API
通过 $api->organization()
暴露与组织相关的方
组织 API 的详细文档可在 此处 找到。
列出组织
$api->organization()->list();
获取特定组织
$api->organization()->get('my-organization');
管道 API
通过 $api->pipeline()
暴露与管道相关的方
管道 API 的详细文档可在 此处 找到。
列出组织中的管道
$api->pipeline()->list('my-organizations');
获取特定管道
$api->pipeline()->get('my-organization', 'my-pipeline');
创建管道
$pipelineData = [ 'name' => 'My Pipeline', 'repository' => 'git@github.com:acme-inc/my-pipeline.git', 'steps' => [ [ 'type' => 'script', 'name' => 'Build :package:', 'command' => 'script/release.sh', ], ], ]; $api->pipeline()->create('my-organization', $pipelineData);
更新管道
$pipelineData = [ 'repository' => 'git@github.com:acme-inc/new-repo.git', ]; $api->pipeline()->update('my-organization', 'my-pipelines', $pipelineData);
删除管道
$api->pipeline()->delete('my-organization', 'my-pipeline');
构建 API
通过 $api->build()
暴露与构建相关的方
构建 API 的详细文档可在 此处 找到。
列出所有组织中的所有构建
$api->build()->listAll($queryParameters);
获取特定构建
$buildNumber = 1; $api->build()->get('my-organization', 'my-pipeline', $buildNumber);
获取组织中的构建
$api->build()->getByOrganization('my-organization', $queryParameters);
获取管道中的构建
$api->build()->getByPipeline('my-organization', 'my-pipeline', $queryParameters);
创建新的构建
$buildSettings = [ 'commit' => 'abcd0b72a1e580e90712cdd9eb26d3fb41cd09c8', 'branch' => 'master', 'message' => 'Testing all the things :rocket:', 'author' => [ 'name' => 'Keith Pitt', 'email' => 'me@keithpitt.com', ], 'env' => [ 'MY_ENV_VAR' => 'some_value', ], 'meta_data' => [ 'some build data' => 'value', 'other build data' => true, ], ]; $api->build()->create('my-organization', 'my-pipeline', $buildSettings);
取消正在运行的构建
$buildNumber = 12; $api->build()->cancel('my-organization', 'my-pipeline', $buildNumber);
重启构建
$buildNumber = 12; $api->build()->rebuild('my-organization', 'my-pipeline', $buildNumber);
作业 API
通过 $api->job()
暴露与作业相关的方
作业 API 的详细文档可在 此处 找到。
重试作业
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $api->job()->retry('my-organization', 'my-pipeline', $buildNumber, $jobId);
取消作业锁定
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $api->job()->unblock('my-organization', 'my-pipeline', $buildNumber, $jobId);
获取作业日志
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $api->job()->getLogOutput('my-organization', 'my-pipeline', $buildNumber, $jobId);
删除作业日志
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $api->job()->deleteLogOutput('my-organization', 'my-pipeline', $buildNumber, $jobId);
获取作业的环境变量
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $api->job()->getEnvironmentVariables('my-organization', 'my-pipeline', $buildNumber, $jobId);
工件 API
通过 $api->artifact()
暴露与工件相关的方
工件 API 的详细文档可在 此处 找到。
获取构建上传的工件
$buildNumber = 12; $api->artifact()->getByBuild('my-organization', 'my-pipeline', $buildNumber);
获取作业上传的工件
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $api->artifact()->getByJob('my-organization', 'my-pipeline', $buildNumber, $jobId);
获取特定工件
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $artifactId = '567038da5f03724b02a1cbf07a12fbcedfg'; $api->artifact()->get( 'my-organization', 'my-pipeline', $buildNumber, $jobId, $artifactId );
删除特定工件
$buildNumber = 12; $jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd'; $artifactId = '567038da5f03724b02a1cbf07a12fbcedfg'; $api->artifact()->delete( 'my-organization', 'my-pipeline', $buildNumber, $jobId, $artifactId );
代理 API
通过 $api->agent()
暴露与代理相关的方
代理 API 的详细文档可在 此处 找到。
列出组织的代理
$api->agent()->list('my-organization');
获取特定代理
$agentId = '1d633306-de28-4944-ad84-fde0d50a6c9e'; $api->agent()->list('my-organization', $agentId);
停止代理
$agentId = '1d633306-de28-4944-ad84-fde0d50a6c9e'; $api->agent()->list('my-organization', $agentId);
注释 API
通过 $api->annotation()
暴露与注释相关的方
注释 API 的详细文档可在 此处 找到。
获取构建上传的注释
$buildNumber = 12; $api->annotation()->list('my-organization', 'my-pipeline', $buildNumber);
用户 API
通过 $api->user()
暴露与用户相关的方
用户 API 的详细文档可在 此处 找到。
获取当前用户
$api->user()->whoami();
表情符号 API
通过$api->emoji()
公开与表情符号相关的函数。
有关用户API的详细文档,请参阅此处
列出可用的表情符号
$api->emoji()->list('my-organization');
贡献
测试
make test
集成测试
进行集成测试需要一个Buildkite账户和一个正在运行的代理,以下环境变量必须设置。
BK_TEST_TOKEN
BK_TEST_ORG
BK_TEST_PREFIX
GITHUB_REF
GITHUB_REPOSITORY
这些可以在复制phpunit.xml.dist
并使用以下片段进行扩展的phpunit.xml
中设置
<php> <env name="BK_TEST_TOKEN" value="my-buildkite-api-token"/> <env name="BK_TEST_ORG" value="my-organization-slug"/> <env name="BK_TEST_PREFIX" value="something-uniqe"/> <env name="GITHUB_REF" value="refs/heads/master"/> <env name="GITHUB_REPOSITORY" value="your-name/buildkite-php"/> </php>
一旦设置了环境变量,就可以启动测试套件。
make integration