4

1時間あたり、1日あたりの集計など、日付に依存するデータを処理するjenkinsタスクが多数あります。

それらはすべて定期的に実行するように構成されていますが、ネイティブjenkinsは動的パラメーターを使用して定期的なジョブを自動的にトリガーすることはできません。また、実行時にスクリプト内で必要なパラメーターを計算する必要があります(bashスクリプトコードなど)。

PREVHOUR=$(date --date="-1 hour" "+%Y-%m-%d %H")

$ BUILD_ID環境変数を使用して、ビルドの開始時間を取得することもできます。

問題は次のとおりです。 すべてのスロット(ワーカー)がビジー状態の場合、jenkinsはこのジョブを キューに入れます。また、そのようなタスクがトリガーされてから1時間後に実行されると、パラメーターの計算が間違ってしまいます。

したがって、開始時刻を作成するのではなくTRIGGER時刻を取得する方法を見つけることができません。

もちろん、次のような不便な解決策はほとんどありません。

  • 予約済みのマシンで単純な定期的なジョブを実行し、パラメータを使用したURLによって他のジョブをトリガーします
  • スクリプトの最後の実行時間を追跡するファイル

ニーズに合ったプラグインを見つけようとしましたが、 このプラグインは手動(UIの「今すぐビルド」クリック)モードでのみ機能します。

Jenkinsが定期的なトリガー時に動的パラメーターを計算するためのプラグインはありますか?

ありがとう!

4

2 に答える 2

4

ScriptTriggerプラグインを使用できます。Groovyスクリプトを定期的に評価し、パラメーター化されたビルドをサポートします。

  1. TRIGGER_TIMEプロジェクトにパラメータを追加します。
  2. Groovyスクリプトを使用します。

    now = new Date();
    param = new File("trigger.time");
    param.write("TRIGGER_TIME="+now.toString());
    return true;
    

    ポーリングのたびにプロパティファイル" trigger.time"にトリガー時間が書き込まれ、新しいビルドがトリガーされます。

  3. (詳細設定Properties File Pathで)「trigger.time」に設定すると、スケジュールされたすべてのビルドがTRIGGER_TIME指定された時間のパラメーターを取得します。
于 2012-05-15T10:35:27.847 に答える
2

2つの提案:

  1. トリガージョブ、IMHOは、完全に合理的なソリューションです。ただし、ジョブをトリガーするためのはるかに便利な方法を使用できます-パラメーター化されたトリガープラグイン

  2. 別のアプローチは、EnvInjectプラグインを使用することです。たとえば、スクリプトでパラメータを計算し、それらをプロパティファイルに保存してから、プラグインを使用してファイルから環境変数を挿入できます。この回答を参照してください

于 2012-05-15T05:56:18.723 に答える