9

TeamCity (7.0) REST API を使用して、開発者がカスタム ビルドをトリガーできるようにします。次のようにビルドをキューに追加します。

http://teamcity/httpAuth/action.html?add2Queue=[buildTypeId]&name=[propName]&value=[propValue]

私の質問は、トリガーされたばかりのビルドの進行状況をどのように追跡するのが最善かということです。REST 呼び出しは、ビルドに割り当てられたビルド ID に関する情報を返さないため、ビルド (実行中/終了) のリストをポーリングしても、そのうちの 1 つがトリガーしたものであるかどうかはわかりません。キューには同じ buildTypeId に対して複数のビルドが存在する可能性があるため、後で実行するビルドを分離する方法が必要です。

キューに入れられた各ビルドに一意の値を持つビルド プロパティを追加し、後でビルド リストをポーリングして、その正確なプロパティ値を持つものを探すことができるという提案をどこかで読みました。ただし、ビルドのプロパティを一覧表示する方法が見つからないため、まだ行き詰まっています。この REST 呼び出しは、プロパティに関する情報を提供しません。

http://teamcity/httpAuth/app/rest/builds/?locator=buildType:[buildTypeId]

これを解決する方法について何か提案はありますか? 理想的には、ビルドがキューにあるかどうか、実行中かどうか、完了したらステータスを取得したいかどうかを知りたいです。ただし、最も重要なのは、それが完了したかどうか、およびステータスがどのようなものかを知ることです。

4

3 に答える 3

11

さらに調査した後、私はこれに対する解決策を思いつきました。これはうまくいくようです:

「/builds/?locator=buildType:x」呼び出しを使用してカスタム ビルド プロパティに関する情報を取得できなくても、そのリスト内の各ビルドのビルド ID を抽出して実行できることがわかりました。特定のビルドに関する詳細を取得するための別の REST 呼び出し。残りの呼び出しは次のようになります。

http://teamcity/httpAuth/app/rest/builds/id:{0}

この呼び出しからの応答は、特にビルド プロパティのリストを含む「ビルド オブジェクト」を提供します。

ビルドの進行状況を追跡するための私のソリューションは、次のようになりました。

ビルドが TeamCity キューに追加されると、まず「BuildIdentifier」という URL にプロパティを追加します。値は単なる GUID です。この識別子をクライアント アプリケーションに渡すと、クライアントはサーバーのポーリングを開始し、この特定の識別子を使用してビルドのステータスを要求します。次に、サーバーはいくつかの手順を実行して、ビルドの現在の段階を識別します。

1: ビルドが実行されているかどうかを確認します。「/builds?locator=running:true」という呼び出しで実行中のビルドのリストを取得し、ビルドを繰り返し、ビルド ID を使用して REST API に詳細を問い合わせます。次に、実行中の各ビルドの詳細を調べて、クライアントから受け取ったものと一致する "BuildIdentifier" プロパティを持つビルドを探します。実行中のビルドの 1 つに一致するものがある場合、ビルドが x パーセント (ビルド オブジェクトの PercentageComplete プロパティ) で実行されているというメッセージを含む応答を、進行状況を追跡しているクライアントに送信します。一致するものが見つからない場合は、ステップ 2 に進みます。

2: 完了したかどうかを確認します。まず、「/builds/?locator=buildType:x」呼び出しを使用して最新のビルド リストを取得します。次に、ステップ 1 と同じことを行い、リストから X 個の最新ビルドを抽出します (私は 5 つを選択しました)。REST 呼び出しの数を制限するために、ビルドが完了した場合、ビルドが最新の 5 つのビルドになるという前提を設定しました。次に、BuildIdentifier で一致するものを探し、一致するものが見つかった場合は、ビルドのステータス (FAILED、SUCCESS など) を返します。

3: ステップ 1 または 2 で BuildIdentifier に一致するものがない場合、ビルドがキューにあると想定できるので、それを現在のステータスとして返します。

クライアント側では、ステータスがビルドがキューに入っているか実行中であることを示している限り、x 秒ごとにサーバーにステータスをポーリングします。

同じ問題を抱えている人が他にいる場合、この解決策が役立つことを願っています! TeamCity REST API を使用する場合、トリガーされたビルドの進行状況を追跡することはかなり一般的なタスクだと思います。

于 2012-08-17T06:32:34.080 に答える
4

Queued Builds rest api はこれを達成するための最良の方法ですが、バージョン 8.1 以降でしか利用できません。

  • ビルドを開始するには、~/httpAuth/app/rest/buildQueueこのように POST リクエストを送信します

    {
        buildType: { id: "bt667" },
        branchName: "master",
        properties: {
            property: [
                { "name": "Property", "value": "test" }
            ]
        }
    }
    
  • 応答には、ビルドのステータスを確認するために使用できる href が含まれています。

    {
        ...
        "href": "/httpAuth/app/rest/buildQueue/taskId:49337",
        ...
    }
    
  • キューに入れられたビルドのステータスを確認するには、手順 1 の応答で指定された href に GET 要求を送信します。

これは、以前の API から大幅に改善されています。

于 2014-08-06T22:51:19.613 に答える
1

TeamCity 8.1 以降、REST API はビルドをトリガーするための専用の方法を取得し、ビルド キュー要求がビルドの現在のステータスを追跡するために後で使用できるキューに入れられたビルドへのリンクを返すため、キューに入れられたビルド結果を追跡することがはるかに簡単になりました。詳細については、TeamCity のドキュメントを参照してください。

于 2014-07-31T11:44:09.217 に答える