ビルド履歴のAPI
この機能は、Incredibuild のEnterprise Plan でのみ利用可能です。
ビルドに関するデータをJSONファイルで受け取ることができます。これにより、このデータをサードパーティのツールを使用したダッシュボードへの表示、参照や分析のための保存が可能です。
データは、時間、Build Group、その他のフィールドでフィルタリングすることがでできます。このAPIには、API キーおよびEnterpriseライセンスが必要です。
Incredibuildは過去200,000回のビルドのみをデータベースに保存しています。
リクエスト
エンドポイント
GET https://<coordinator IP>:8000/api/builds?coordinatorId=<coordinator ID>&version=<API version>&<other filters>
ここでのバージョン とは Incredibuild API のバージョンです。Build Data APIについては、現在バージョン1.3.0のみがサポートされています。
ヘッダー
リクエストには、client-api-key というキーを持つヘッダーと、API キー の値を文字列として含める必要があります。
エンドポイントフィルター:
リクエスト エンドポイントに以下のフィルターを追加して、結果を制限することができます。
フィールド | 値 | 値 |
---|---|---|
buildStartTimeFrom | この時間より以前に開始したビルドのみを含める | ISOフォーマット。例:2022-09-28T16:01:29.000 |
buildEndTimeTo | この時間より以前に終了したビルドのみを含める | ISOフォーマット。例:2022-09-28T16:01:29.000 |
initiatorID | 特定のイニシエータによって開始したビルドのみを含む。 | string |
buildGroup | 特定のBuild Groupのイニシエータによって実行されたビルドのみを含める | string |
buildTitle | 指定されたタイトルのビルドのみを含める | string |
buildStatus |
特定のステータスに一致するビルドのみを含める |
{a,b,c,d} |
buildDurationFrom |
少なくともこの長さのビルドのみを含める |
整数(秒) |
buildDurationTo |
この値より短いビルドのみを含める |
整数(秒) |
buildType |
特定のビルドタイプに一致するビルドのみを含める |
(ビルド、クリーン、リビルド、不明) |
コマンドの例:
-
すべてのビルドを返す。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0
-
特定の時間以降に開始したビルドを返す。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&buildStartTimeFrom=2023-08-17T16:01:29.000Z
-
デフォルトのBuild Groupから実行されたビルドを返す。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&buildGroup=Default
-
ビルドタイプ=Rebuildのビルドを返す
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&buildType=Rebuild
以下の例が示す通り、結果が300以上のビルドを返した場合、totalCountは300以上ですが、billsCountの値は300であることが分かります。次の300ビルドを表示するには、nextPageToken の値をコピーし、次のように別のリクエストで使用します。
GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&nextPageToken="< 以下のJSONの値>"
応答
応答は、最大300ビルドを含むJSONファイルです。
フィールド | 説明 |
---|---|
totalCount | リクエストに一致したビルドの総数 |
buildsCount | このJSONに含まれるビルド数。この数値がtotalCount以下の場合は、ビルドが300以上あり、それらをすべて1つのJSONに含めることができないことという事を意味します。次の300ビルドを表示するには、「nextPageToken」の値をコピーし、別のリクエストのパラメータとして使用します。例: GET https://10.132.15.166:8000/api/builds?coordinatorId=12345&version=1.3.0&nextPageToken="NjAw" |
nextPageToken | buildsCount を参照してください |
ビルド |
ファイルに含まれるビルドの配列 |
coordinatorId |
このビルドに関連するコーディネーターのID |
buildId |
ビルドのID |
initiatorId |
ビルドを開始したエージェントのID |
startTime |
ビルドが開始した時間 |
endTime |
ビルドが終了した時間 |
Duration |
ビルドの長さ(秒) |
buildPriority |
ヘルパーを獲得するために、他のビルドよりもこのビルドに与えられた優先順位(1が最高、5が最低) |
buildTitle |
このビルドを説明するために追加したメタデータ(オプション) |
buildStatus |
ビルド完了時のステータス |
buildType |
ビルド、クリーニング、リビルドなど。 |
ヘルパー |
このビルドに参加したヘルパーのリスト |
totalWorkingHelpers |
このビルドをアシストした一意のヘルパー総数 |
maxInitiatorCores |
このビルドの実行に使用される イニシエータ コアの最大数 |
avgInitiatorCores |
このビルドの実行に使用される イニシエータ コアの平均数 |
maxConcurrentWorkingHelpers |
このビルド中に一度に動作する一意のヘルパーの最大数 |
avgConcurrentWorkingHelpers |
このビルド中、一度に動作する一意のヘルパーの平均数 |
avgBusyHelperCores |
このビルド中、一度に動作したヘルパーコアの平均数 |
maxBusyHelperCores |
このビルド中、一度に動作したヘルパーコアの最大数 |
avgBusyCloudHelperCores |
このビルド中、一度に動作したクラウドヘルパーコアの平均数 |
maxBusyCloudHelperCores |
このビルド中、一度に動作するクラウドヘルパーコアの最大数 |
maxNeededHelperCores |
要求されたヘルパーコアの最大数 |
avgNeededHelperCores |
要求されたヘルパーコアの平均数 |
numberOfLocalTasks |
このビルドに対して イニシエータ 上で実行されたタスクの総数 |
numberOfRemoteTasks |
リモートで実行されたタスクの総数 |
numberOfCloudTasks |
クラウドマシン上でリモート実行されたタスクの総数 |
remoteCoreTime |
リモート(物理およびクラウド)でのタスク実行に使用された時間の合計(秒) |
coreLimit |
ビルドごとに許可される同時ヘルパーコアの最大数の設定 |
totalCacheableTasks |
出力をキャッシュできるタスクの総数。 |
cacheTaskHits |
Build Cacheを使用している場合、Build Cacheからの出力を再利用することによって省略されたタスクの数。 |
cacheTaskMiss |
Build Cacheを使用している場合、Build Cacheで一致するタスクの検索に失敗した後に実行されたタスクの数。 |
cacheInitiatorRole |
Initiator がキャッシュからのリードのみを行うのか、キャッシュへのライトも行うのか。 |
cacheTaskHitsOriginalDuration |
Build Cacheから取得されたすべてのタスクの実行時間(ミリ秒単位)。 |
cacheServiceEndpoint |
Build Cacheサービスのアドレス |
cacheLicenseAllowed |
Build Cacheに十分なCache Core(Build CacheでIncredibuild for Cloudを使用している場合はCloud Hour)があるかどうか。 |
createdAt |
この応答を生成したAPIコールの日時。 |
応答例
次の例は、このJSONに含まれる最初のビルドを表示します。
{
"totalCount":400
"buildsCount":300
"nextPageToken":"NjAw"
"builds": [
{
"coordinatorId": "c407c0b4-b257-490a-91da-70b7bb5f0c8f",
"buildId": "{0312b602-8d53-4443-afe5-2bd9f00c33d7}",
"initiatorId": "64b4d714-fcde-4768-82ac-cdbdfbfa5343",
"initiatorName": "Initiator#313",
"startTime": "2023-08-18T20:05:42.708Z",
"endTime": "2023-08-18T22:41:27.097Z",
"duration": 9344389,
"buildPriority": 3,
"buildGroup": "Build Group 17",
"buildTitle": "Build Title 5",
"buildStatus": "Failure",
"buildType": "Rebuild",
"helpers": [
"helper0",
"helper1",
"helper2",
"helper3",
"helper4",
"helper5",
"helper6",
"helper7",
"helper8",
"helper9",
"helper10",
"helper11",
"helper12",
"helper13",
"helper14",
"helper15",
"helper16",
"helper17",
"helper18",
"helper19",
"helper20"
],
"totalWorkingHelpers": 9,
"maxInitiatorCores": 48,
"avgInitiatorCores": 94,
"maxConcurrentWorkingHelpers": 97,
"avgConcurrentWorkingHelpers": 91,
"avgConcurrentBusyHelpers": 1,
"maxConcurrentBusyHelpers": 30,
"avgConcurrentBusyCloudHelpers": 50,
"maxConcurrentBusyCloudHelpers": 59,
"maxNeededHelperCores": 29,
"avgNeededHelperCores": 84,
"numberOfLocalTasks": 36,
"numberOfRemoteTasks": 83,
"numberOfCloudTasks": 94,
"remoteCoreTime": 78,
"coreLimit": 11,
"totalCacheableTasks": 32,
"cacheTaskHits": 8,
"cacheTaskMiss": 31,
"cacheInitiatorRole": 72,
"savedTime": 81,
"cacheServiceEndpoint": "endpoint",
"cacheLicenseAllowed": true,
"createdAt": "2023-08-20T07:27:30.425Z"
}]
データからより多くのビルドを引き出す
ビルド履歴をダウンロード完了後、選択したデータベースでビルド履歴にアクセスできます。これにより、データをクエリし、さらに詳細情報を閲覧できます。以下にクエリの例をあげます。
select initiator_id, count(distinct build_id) as builds from builds b group by initiator_id
select build_id , total_working_helpers from builds b
select date(start_time) as date, sum(remote_core_time)/60000 as total_remote_minutes
from builds b
group by 1
order by 1
select date(start_time) as date, count(distinct initiator_id) as unique_initiators
from builds b
group by 1
order by 1
WITH RECURSIVE split_cte (start_time ,build_id , helpers , rest) AS (
SELECT
start_time,
build_id ,
SUBSTR(SUBSTRING(helpers,2,LENGTH(helpers)-1) , 1, INSTR(helpers, ',')-2),
SUBSTR(helpers , INSTR(helpers, ',')+1)
FROM builds
WHERE total_working_helpers > 1
UNION ALL
SELECT
start_time,
build_id ,
SUBSTR(rest, 1, INSTR(rest, ',')-1),
SUBSTR(rest, INSTR(rest, ',')+1)
FROM split_cte
WHERE INSTR(rest, ',') > 0
UNION ALL
SELECT
start_time,
build_id ,
substring(rest,1,LENGTH(rest)-1),
NULL
FROM split_cte
WHERE INSTR(rest, ',') = 0
)
-- Select the split values
select date(start_time) as date, count(distinct helpers)
from
(SELECT start_time,build_id, helpers
FROM split_cte
UNION ALL
SELECT start_time,build_id, helpers
FROM split_cte
WHERE rest IS NOT NULL
union all
select start_time,build_id,SUBSTRING(helpers,2,LENGTH(helpers)-2)
from builds
where total_working_helpers=1)
group by date(start_time)
order by 1
SELECT date(start_time) as date,count(build_id) as builds from builds
where build_status not in ('CancelledByUser','Success')
group by date(start_time)
select build_id ,number_of_local_tasks + number_of_remote_tasks as total_tasks, total_cacheable_tasks ,
round(total_cacheable_tasks*1.000/(number_of_local_tasks + number_of_remote_tasks),3)*100 as cacheable_percentage,
cache_task_hits , round(cache_task_hits*1.000 /total_cacheable_tasks,3)*100 as hits_percentage
from builds b
where cache_task_miss + cache_task_hits = total_cacheable_tasks