2012-05-01 9 views
12

パートナーと同期するためにCruiseControl.NETからJenkinsに移行しているため、2つの異なるCIスクリプトはありません。私たちは、JenkinsがCruiseControlに行ったのと同じようなことをするようにセットアップしようとしています。これは、リモートビルドマシンで集中的なサーバー呼び出しプロジェクト(ジェンキンでのジョブ)を実行していました。マスタージェンキンはリモートジェンキンでジョブを実行できますか?

単一のプロジェクトに複数のビルド・マシンが関連付けられているため、集中CIサーバーからプロジェクトをビルドするときに、リモートCIサーバー上のプロジェクトが呼び出されます。リモートCIサーバは、集中CIサーバプロジェクトからバージョンを取得します。

CruiseCruiseコントロールでは、リモートプロジェクトでforceBuildを実行するプロジェクトをセットアップしました。ビルドマシンのプロジェクトでは、remoteProjectLabellerを使用してバージョン番号を取得し、常に同期していました。私は、Javaウェブスタートを使用してスレーブとして設定セカンダリサーバをしたジェンキンスさんにこれまでのところ

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

:リモートプロジェクトを起動するに

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

:マスタービルド番号を取得するに

しかし私は、マスター・ジェンキンがどのようにしてスレーブのプロジェクト設定を呼び出させるのか分かりません。

スレーブでプロジェクト(ジョブ)を呼び出すようにJenkinsを設定できますか?

マスターからバージョン番号を取得することはできますか?

EDIT -

私はいくつかの詳細情報を追加してみましょう。

  • マスターとリモートビルドマシンのスレーブはすべてWindowsを実行しています。
  • 私たちはセントラルマスターCruiseControlにリモートプロジェクトを同時に開始させ、同時に実行し、可能ならばジェンキンズと同じことをしたいと考えました。それを実行し、ビルドし、奴隷をトリガマスタがあります -

答えて

9

は、ジェンキンスさんは、おそらくあなたのシナリオが良く合うことができるbuild agentsの概念を持っています。ビルドは、スレーブの一部のカテゴリに限定することができます(たとえば、特定のソフトウェアに依存する場合、すべてのエージェントには存在しない場合)。すべてのデータはマスターが一元的に管理しており、達成しようとしていると思います。

+0

+1私はクルーズコントロールの考え方の設定について考えていました。ありがとう。 –

5

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

あなたのケースでは、おそらく2つのジョブがあります:AとBは "master"で動作するように制限され、Bは "slavename"で動作するように設定されます。 AとBがバージョンコントロールから同じバージョンをチェックアウトし、AとBを並行して実行したがっています。これを達成するには多くの方法がありますが、最も簡単なのはおそらく複数構成のジョブを定義することです。

既存のフリースタイルジョブを複数構成ジョブに変更する方法がないため、新しいジョブを作成する必要があります。

  • 新しい仕事を選択して新しいマルチコンフィギュレーション・プロジェクトをビルド]を選択します。名前を追加します。
  • [コンフィグレーションマトリックス]の下にある[Add axis]ドロップダウンを開きます。
  • 奴隷
  • チェックマスタとスレーブ
  • SCM情報を追加し、ステップ(複数可)を構築するを選択してください

ジョブが実行されると、それはマスターとスレーブの両方で実行されます。 Jenkinsは同じソースバージョンから構築するようにしています。

+2

* Jenkinsでは、スレーブ上でビルドをトリガすることはできません。つまり、ビルドの実行は、トリガする人によって制御されません。*これは100%正確ではありません。 [Node Label Parameter plugin](https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin)でパラメーターとしてノードラベルを指定し、* Restrictでそのパラメーターの値を使用することができます。このジョブは*フィールドを実行できます。 –

+0

私は3つのVM、a、b、cでテスト環境をセットアップしました。 Aはマスター、bとcはスレーブです。私はマルチ構成ジョブを作成しました。構成マトリックスの下では、そのVM上でのみ実行したいので、ノードbを選択します。しかし、ビルドを実行するとマスターから実行されます。どうしてこれなの?私はそれを私が選択したノードで実行することを期待しています。 –

+0

@AndyArismendi、よろしいですか?仕事に行き、最後のビルドを選択してください。あなたの子供のビルドに対応する小さなボールが表示されます(子ビルドが1つだけの場合は、1つのみ、その隣に「デフォルト」と表示されます)。ステータスに応じて、ボールは青、赤、または灰色になります。非灰色のボールの1つをクリックします。それはあなたの子ビルドステータスです。子供はスレーブ 'b'で動くはずです。一方、トップレベルの仕事はどこでも実行できます(Matrix Tie Parent plginを持つノードに縛られている場合を除く)。 –

0

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

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

+0

申し訳ありませんが、以前の回答で既に提供されていることから、何も新しいことをここでは言及していないようです。 –

0

ジェンキンスについては、ジョブがリモートマシン上で定義されているCruiseControlに似ていると思っていました。したがって、Jenkinsでは、リモートプロジェクトはマスター上で定義され、エージェント経由でリモートマシンに委任されます。

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

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

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

関連する問題