13

We are migrating from CruiseControl.NET to Jenkins just to be in sync with a partner so we don't have two different CI scripts. We are trying to setup Jenkins to do something similar to what we had CruiseControl doing which was have a centralized server invoke projects (jobs in jenkins) on remote build machines.

We have multiple build machines associated to a single project so when we build the project from the centralized CI server it would invoke the projects on the remote CI servers. The remote CI servers would pull the version from the centralized CI server project.

In CruiseCruise control we setup a project that would do a forceBuild on the remote projects. The projects on the build machines used a remoteProjectLabeller to retrieve the version number so they were always in sync.

To retrieve the master build number:

<labeller type="remoteProjectLabeller">
  <project>MainProject</project>
  <serverUri>tcp://central-server:21234/CruiseManager.rem</serverUri>
</labeller>

To invoke the remote projects:

<forcebuild>
    <project>RemoteBuildMachineA</project>
    <serverUri>tcp://remote-server:21234/CruiseManager.rem</serverUri>
    <integrationStatus>Success</integrationStatus>
</forcebuild>

So far in jenkins i've setup a secondary server as a slave using the java web start but I don't know how I would have the master jenkins invoke the projects setup on the slaves.

Can I setup Jenkins to invoke projects (jobs) on slaves?

Can I make the slaves pull the version number from the master?

EDIT -

Let me add some more info.

  • The master, and remote build machine slaves are all running Windows.
  • We had the central master CruiseControl kick off the remote projects at the same time so they ran concurrently and would like to have the same thing with jenkins if possible.
4

4 に答える 4

10

Jenkins にはビルド エージェントの概念があり、おそらくシナリオにより適している可能性があります。ビルドをトリガーするマスターとそれを実行するスレーブがあります。ビルドは、一部のカテゴリのスレーブのみに制限できます (たとえば、特定のソフトウェアに依存している場合、すべてのエージェントには存在しません)。すべてのデータはマスターによって集中管理されます。これは、あなたが達成しようとしているものだと思います。

于 2012-05-01T19:11:18.870 に答える
5

Jenkins では、スレーブ上でビルドをトリガーすることはできません。つまり、ビルドが実行される場所は、それをトリガーした人によって制御されません。ジョブ自体の設定によって制御されます。各ジョブには、「このジョブを実行できる場所を制限する」という設定があります。

あなたの場合、おそらく 2 つのジョブがあります: A と B. A は「マスター」で実行するように制限され、B は「スレーブ名」で実行するように構成されます。あとは、A が B をトリガーするだけです。

しかし、さらに制約がありました。A と B がバージョン管理から同じバージョンをチェックアウトし、A と B が並行して実行されるようにする必要があります。これを実現する方法はたくさんありますが、おそらく最も簡単な方法は、マルチ構成ジョブを定義することです。

既存のフリー スタイル ジョブをマルチ コンフィギュレーション ジョブに変換する方法はないため、新しいジョブを作成する必要があります。

  • 新しい仕事を選択
  • Build new multi-configuration project を選択します。名前を追加します。
  • [構成マトリックス] の下で、[軸の追加] ドロップダウンを開きます。
  • 奴隷を選ぶ
  • マスターとスレーブを確認する
  • SCM 情報とビルド ステップを追加します。

ジョブが実行されると、マスターとスレーブの両方で実行されます。Jenkins は、それらが同じソース バージョンからビルドされていることを確認します。

于 2012-05-01T21:53:47.187 に答える
0

/jenkins/computer URL から、ローカルまたはリモートの「ビルド エージェント」である「ノード」を追加、削除、および再構成できます。

ジョブは、特定のビルド エージェントで実行するように制限することも、さまざまなルールに従って、使用可能なエージェントから適切なビルド エージェントを選択することもできます。

于 2012-05-01T22:25:21.813 に答える
0

リモートマシンでジョブが定義されるCruiseControlのように、Jenkinsについて考えすぎていました。したがって、Jenkins では、リモート プロジェクトはマスターで定義され、エージェントを介してリモート マシンに委任されます。

リモート マシンに Windows サービスとしてインストールされた Java Web Start エージェントを使用しました。特定のリモート マシンで特定のジョブを実行するために、スレーブ構成で一意のラベルを使用して各リモート ノードを定義しました。特定のジョブを特定のスレーブにバインドするために、各ジョブ構成でスレーブのラベルを使用しました (「このプロジェクトを実行できる場所を制限する」)。

単一のマスター ジョブでジョブをトリガーするために、「他のプロジェクトをビルドする」のみに設定されたフリー スタイルのジョブを作成し、カンマ区切りのリストまたはプロジェクト名を指定しました。このジョブは、下流のジョブを並行して構築します。

マスター ビルド番号をダウンストリーム ジョブに送信して、それらを常に同期させる方法をまだ探しています。(これは DLL などのバージョン管理に使用されます。)

于 2012-05-06T21:38:15.630 に答える