composer require bbaga/buildkite-phpPsrHttpClientClientInterface実装はbbaga/buildkite-php-guzzle-clientパッケージで利用できます。
use bbaga BuildkiteApi Api RestApi ;
/** @var PsrHttpClientClientInterface $client */
$ client = new MyHttpClient ();
$ api = new RestApi ( $ client , ' MY_BUILDKITE_API_TOKEN ' ); use bbaga BuildkiteApi Api GraphQLApi ;
/** @var PsrHttpClientClientInterface $client */
$ client = new MyHttpClient ();
$ api = new GraphQLApi ( $ client , ' MY_BUILDKITE_API_TOKEN ' ); 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 )); 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 FluentOrganization[] $organizations */
$ organizations = ( new Fluent Organizations ( $ api ))-> get ();
/** @var FluentOrganization $organization */
$ organization = $ organizations [ 0 ];
/** @var FluentPipeline $pipelines */
$ pipelines = $ organization -> getPipelines ();
/** @var FluentPipeline $pipeline */
$ pipeline = $ pipelines [ 0 ];
/** @var FluentBuild[] $builds */
$ builds = $ pipeline -> getBuilds ();
/** @var FluentBuild $build */
$ build = $ builds [ 0 ];
/** @var FluentJob[] $jobs */
$ jobs = $ build -> getJobs ();
/** @var FluentEmoji[] $emojis */
$ emojis = $ organizations [ 0 ]-> getEmojis ();
/** @var FluentAgent[] $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 ' => ' [email protected]: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->organization()を介して公開されます
組織APIの詳細なドキュメントはこちらから入手できます
$ api -> organization ()-> list (); $ api -> organization ()-> get ( ' my-organization ' );パイプライン関連方法は$api->pipeline()を介して公開されます
パイプラインAPIの詳細なドキュメントはこちらから入手できます
$ api -> pipeline ()-> list ( ' my-organizations ' ); $ api -> pipeline ()-> get ( ' my-organization ' , ' my-pipeline ' ); $ pipelineData = [
' name ' => ' My Pipeline ' ,
' repository ' => ' [email protected]:acme-inc/my-pipeline.git ' ,
' steps ' => [
[
' type ' => ' script ' ,
' name ' => ' Build :package: ' ,
' command ' => ' script/release.sh ' ,
],
],
];
$ api -> pipeline ()-> create ( ' my-organization ' , $ pipelineData ); $ pipelineData = [
' repository ' => ' [email protected]:acme-inc/new-repo.git ' ,
];
$ api -> pipeline ()-> update ( ' my-organization ' , ' my-pipelines ' , $ pipelineData ); $ api -> pipeline ()-> delete ( ' my-organization ' , ' my-pipeline ' );ビルド関連方法は$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 ' => ' [email protected] ' ,
],
' 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->job()を介して公開されます
Jobs 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->artifact()を介して公開されます
Artifacts 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->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->annotation()を介して公開されます
Annotations APIの詳細なドキュメントはこちらから入手できます
$ buildNumber = 12 ;
$ api -> annotation ()-> list ( ' my-organization ' , ' my-pipeline ' , $ buildNumber );ユーザー関連の方法は$api->user()を介して公開されます
ユーザーAPIの詳細なドキュメントはこちらから入手できます
$ api -> user ()-> whoami ();絵文字関連の方法は$api->emoji()を介して公開されます
ユーザーAPIの詳細なドキュメントはこちらから入手できます
$ api -> emoji ()-> list ( ' my-organization ' );make test統合テストにはBuildKiteアカウントとランニングエージェントが必要であり、次の環境変数を設定する必要があります。
BK_TEST_TOKENBK_TEST_ORGBK_TEST_PREFIXGITHUB_REFGITHUB_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