16

TeamCity 7 を使用していますが、前のステップが失敗した場合にのみステップを実行できるかどうか疑問に思いましたか? ビルド ステップ構成のオプションにより、ステップが失敗した場合でも、すべてのステップが成功した場合にのみ実行するか、常に実行するかを選択できます。

前のステップが失敗した場合にのみステップを実行する手段はありますか?

4

4 に答える 4

9

前のステップが失敗した場合にのみステップを実行するようにセットアップする方法はありません。

これに最も近いのは、最初のビルドが終了した後に常に実行される「Finish Build」トリガーを持つビルドをセットアップすることです。(成功失敗は問いません。)

次に、その 2 番目のビルドで、TeamCity REST API を使用して、最初のビルドの最後の実行が成功したかどうかを判断できます。それがうまくいかなかったとしても、やりたいことは何でもできます。

于 2013-10-31T02:04:21.117 に答える
0

TeamCity が 2021 年にすぐにサポートしていないことに驚きました。しかし、API は多くの便利な機能を提供し、それを実行できます。

解決策として、bash スクリプトを作成し、内部で TeamCity API を呼び出す必要があります

  1. MySettings & Tools で API キーをセットアップ => アクセス トークン
  2. API トークンで環境変数を作成する
  3. Execute step を使用して構成内にステップを作成します: 前のステップの一部が失敗した場合でも
  4. jq を使用して独自のコンテナーを構築するか、jq をサポートする既存のコンテナーを使用する
  5. このbashスクリプトを配置します
    #!/bin/bash
    set -e -x
    
    declare api_response=$(curl -v -H "Authorization: Bearer %env.teamcity_internal_api_key%" -H "Accept: application/json" %teamcity.serverUrl%/app/rest/latest/builds?locator=buildType:%system.teamcity.buildType.id%,running:any,canceled:all,count:2\&fields=build\(id,status\))
    
    declare current_status=`echo ${api_response} | jq '.build[0].status'`
    declare prev_status=`echo ${api_response} | jq '.build[1].status'`
    
    if [ "$current_status" != "$prev_status" ]; then
            do you code here
    fi

上記のコードの説明。API 呼び出しを使用すると、現在の buildType の最後の 2 つのビルドを取得できます。これは最後のビルドであり、以前のビルドです。変数にステータスを割り当て、ifステートメントでそれらを比較した後。現在のビルドが使用に失敗した場合にコードを実行する必要がある場合

if [ "$current_status" = "FAILURE" ]; then
    write your code here
fi
于 2021-07-12T19:53:41.933 に答える