63

Promoted Build PluginfromをインストールしましたJenkinsが、既存のジョブからのビルドを促進するためにいくつかの問題に直面しています。シナリオは次のとおりです。

  1. Nightly Build必要なすべてのテストとメトリックを実行して毎晩実行される既存のジョブがあります。

  2. Deploy Buildパラメータ${BUILD_NUMBER}を受け入れ、対応する${BUILD_NUMBER}を持つビルドをデプロイする既存のものがあります。Nightly Build

    • [Nightly Build]が実行され、アーティファクト#39が正常にビルドされたとします。
    • これで、パラメーターとして#39を渡す[DeployBuild]を実行できます。
      • [Nightly Build]#39のアーティファクトがデプロイされます

ここまでは順調ですね。今、私が追加したい部分Build Promotionsです...

これはまさに私が達成する必要があることです

Nightly Build #39から(以前にすでに構築されていることに注意してください)を宣伝する方法はありDeploy Buildますか?あるいは、どこか別の場所からでも、率直に言って、私はここで迷子になっています:(

明確なアップストリーム/ダウンストリームの関係がないため、次のようには見えません。実行中に常にこのビルドを実行し、次に他のビルドを実行します。[Deploy Build]は時々のみ実行され、[Nightlyビルド]

4

2 に答える 2

122

パラメータ化されたトリガープラグインのバージョン2.23以降の更新:

バージョン2.23以降では、動作が変更されました(指摘してくれたAbhijeetKambleに感謝します)。呼び出し(ビルド)ジョブの事前定義パラメーターセクションによって渡されるパラメーターは、呼び出された(デプロイ)ジョブに存在する必要があります。さらに、呼び出されたジョブのパラメーターの制限が適用されるため、呼び出されたジョブのパラメーターが選択である場合は、(プロモーションからの)すべての可能な値が事前に入力されている必要があります。または、Textパラメータタイプを使用します。

解決

はい、まったく同じセットアップがあります。ビルドジョブ(SVNコミットに基づく)と手動で実行されたデプロイジョブです。ユーザーがビルドジョブ(古いビルドを含む)からビルドを選択すると、[プロモーションステータス]リンクに移動して、さまざまなデプロイプロモーション(DEVへのデプロイ、QAへのデプロイなど)を実行できます。

ビルドジョブでプロモーションを設定する方法は次のとおりです。

  • 次のプラグインが必要になります:パラメータ化されたトリガープラグインプロモートビルドプラグイン
  • また、このビルドジョブでデフォルトのアーカイブアーティファクトのビルド後アクションを設定する必要があります。
  • チェックマーク[ビルドをプロモートする]
  • 名前「DeploytoDEV」を定義します
  • 基準チェックマークの下で手動で承認された場合のみ
  • [アクション]で、他のプロジェクトでトリガー/呼び出しビルドを使用します
  • ビルドするプロジェクトで、ここにデプロイジョブの名前を入力します
  • トリガーされたプロジェクトがビルドを完了するまで、[ブロック]にチェックマークを付けます
  • トリガーされたビルドが次の値以下の場合、このビルドを失敗としてマークします:FAILURE(デプロイジョブのステータスに応じて調整します)
  • 事前定義されたパラメータ (コードA)

コードA:

Server=IP_of_my_dev_server`  
Job=$PROMOTED_JOB_NAME`  
BuildSelection=<SpecificBuildSelector><buildNumber>$PROMOTED_NUMBER</buildNumber></SpecificBuildSelector>

上記の[定義済みパラメーター]セクションで、=の左側の名前は、デプロイジョブで定義されているパラメーターです。=の右側には、このプロモーションの実行時にこれらのパラメーターに割り当てられる値があります。Server3つのパラメータ、、Jobを定義しますBuildSelection

私のデプロイジョブは複数のサーバーにデプロイできるため、パラメーターServer=は私自身のものです。ただし、デプロイジョブが常に特定の場所にデプロイするようにハードコーディングされている場合は、それは必要ありません。

Job=パラメーターは必須ですが、パラメーターの名前は、デプロイジョブで設定した内容によって異なります(構成についてはそこで説明します)。値$PROMOTED_JOB_NAMEはそのままにしておく必要があります。これは、プロモーションプロセスが認識し、ビルドジョブの名前(プロモーションプロセスが構成されているジョブ)を参照する環境変数です。

BuildSelection=パラメータは必須です。この行全体をそのままにしておく必要があります。渡された値はです$PROMOTED_NUMBER。これもプロモーションが認識しています。あなたの例では、それはです#39

トリガーされたプロジェクトがビルドを完了するまでブロックするチェックマークを付けると、デプロイジョブが完了するまでプロモーションプロセスが待機します。そうでない場合、プロモーションプロセスは展開ジョブをトリガーし、成功して終了します。デプロイジョブが終了するのを待つことには、デプロイジョブが失敗した場合、プロモーションスターにも失敗のマークが付けられるという利点があります。

(ここで少し注意してください:プロモーションスターは、デプロイジョブの実行中に成功したように見えます。デプロイに失敗した場合、デプロイジョブが終了した後にのみ失敗に変わります。論理的です...しかし、次の場合は少し混乱する可能性があります。展開が完了する前にプロモーションスターを見てください)

デプロイジョブを設定する方法は次のとおりです

  • アーティファクトのコピープラグインが必要になります
  • このビルドではパラメータ化されています
  • タイプChoice(またはText)のパラメーターを名前で構成します(この名前は、前のセクションのプロモーションの 事前定義パラメーターServerの構成と一致する必要があります)
  • 選択肢:前のセクションでプロモーションの事前定義されたパラメーターによって使用される可能性のあるサーバーIPのリストを入力します(以下の更新ノートを参照) 。
  • タイプChoice(またはText)のパラメーターを名前で構成します(この名前は、前のセクションのプロモーションの 事前定義パラメーターJobの構成と一致する必要があります)
  • 選択肢:デフォルトとしてビルドジョブの名前を入力します。これは、デプロイジョブを手動でトリガーする場合にのみ必要です。展開ジョブがプロモーションからトリガーされると、プロモーションは値(構成した事前定義されたパラメーターJob=から)を提供します。また、プロモーションの事前定義されたパラメーターから渡された値がない場合は、最初に選択された値が使用されます。ビルドジョブとデプロイジョブの間に1対1の関係がある場合は、プロモーションの構成でパラメーターを省略できます。Job=
  • 更新: パラメーター化トリガーのバージョン2.23以降、デプロイジョブ構成で使用可能な選択肢には、プロモーションの事前定義されたパラメーターから取得できるすべての可能な値が含まれている必要があります。その制限が必要ない場合は、「選択」の代わりに「テキスト」を使用してください
  • コピーアーティファクトのビルドセレクタータイプのパラメーターを次の名前で構成しますBuildSelection
  • デフォルトセレクター:最新の成功したビルド
  • ビルド手順の下
  • 別のプロジェクトからのアーティファクトのコピーを構成する
  • プロジェクト名に次のように入力します${Job}
  • どのビルドで選択するかSpecified by a build parameter
  • パラメータ名BuildSelection${...}!なしで)入力します
  • ビルドジョブからデプロイジョブのワークスペースにコピーされるアーティファクトに応じて、残りを適切に構成します
  • デプロイするために必要に応じて、デプロイジョブ内でコピーされたアーティファクトを使用します

したがって、上記のデプロイジョブを使用して、手動で実行し、デプロイするビルドジョブからビルド番号を選択できます(最後のビルド、最後に成功した、ビルド番号など)。おそらく、すでに非常によく似た構成になっています。ビルドジョブのプロモーションは基本的に同じことを実行し、実行されたプロモーションに基づいてビルド番号を提供します。

手順に問題がある場合はお知らせください。

于 2013-03-04T17:03:22.757 に答える
1

マークされた回答は、質問の優れた説明です。しかし、「ジェンキンスの別のジョブから特定のビルド番号を宣伝する方法」を探している人々のための解決策を提案したいと思います。

CURLとRESTAPIを使用して強制プロモーションを行うための一般化されたソリューションを使用できます。ShellまたはGroovyスクリプトからcurlを実行できます。

CURLを使用したシェルソリューション:

    user_name="jenkins_user"
    user_token="token" 
    promotion_name="Test_Promote"
    jenkins_url="http://build-server.com"
    JOB_NAME="job_name"
    JOB_NO="job-no"

    url="--silent -u $user_name:$user_token $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name"
    curl $url


Groovy Soultion:
        user_name="jenkins_user"
        user_token="token" 
        promotion_name="Test_Promote"
        jenkins_url="http://build-server.com"
        JOB_NAME="job_name"
        JOB_NO="job-no"


def response = "curl -u $user_name:$user_token \" $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name".execute().text

jenkinsユーザートークンを生成する方法:https ://jenkins.io/blog/2018/07/02/new-api-token-system/

于 2019-04-02T22:53:54.350 に答える