2

ビルド プロセスの一部として、リモート マシン上にネイティブ ライブラリを作成するプロジェクトがあります。これは現在、Jenkins によって作成された CI ビルド以外の手動プロセスです。

問題のセットアップは、Jenkins マスター サーバーが GIT ベースの maven プロジェクトをビルドすることです。これは、特定のマシンでのみビルドできるネイティブ ライブラリに依存しています。Jenkins はこのモジュールをコンパイルできません。このため、現在は手動プロセスになっています。

ビルドの他の部分を処理せずに、ネイティブ ライブラリを作成し、コンパイルされたファイルを Jenkins マスターに返すマシンに Jenkins スレーブをインストールしたいと考えています。

これが可能かどうかを判断するのに苦労しています。この件に関して私が見つけた多くの記事では、ビルドを配布する手段として Jenkins スレーブについて説明していますが、私はスレーブがビルド プロセスのごく一部だけを担当することを望んでいます。Jenkins マスターは、コード自体をコンパイルしようとするのではなく、ビルド リクエストをスレーブに送信して結果を待つ必要があります。

4

3 に答える 3

3

私もまったく同じです。私のセットアップは、Mark O'Connor と gaige がアドバイスしているものと非常によく似ており、Copy Artifact プラグインを使用しています。

  • ジョブ A: Mac で zip ファイルを生成する

  • ジョブ B、スレーブ B - Windows マシンで実行、zip を入力として受け取り、MSI を生成

ジョブ B の設定で重要な部分は次のとおりです。

  1. ラベルを使用して適切なスレーブでジョブ B を制限する

    ラベルを使用して適切なスレーブでジョブ B を制限する

  2. ジョブAの後にジョブBが発生することを確認してください

    ジョブAの後にジョブBが発生することを確認してください

  3. ビルドの前に、ジョブ A のアーティファクトがジョブ B に送信されることを確認してください

    ジョブ A のアーティファクトがジョブ B に送信されるようにする

  4. あなたのものを作る

  5. ジョブ B によって生成されたアーティファクトをアーカイブする

    ジョブ B によって生成されたアーティファクトをアーカイブする

于 2013-08-13T00:00:17.520 に答える
2

Delegating part of a job to a slave is something that would have to be done external to Jenkins, for example, using ssh.

However, as @kan indicates, you most likely want to extract the native library build as a separate job and then have that job execute on a particular slave, or any slave that meets a specific criteria.

To do this, my suggestion would be to use Labels in the node configurations to determine which slaves can be used for building that particular job.

In Jenkins > nodes > <slave node>, use the Labels property to set one-word labels that indicate your specific requirements, such as the OS or processor type.

Then, in the jobs that are node-specific, check Restrict where this project can be run and set the Label Expression to something that meets your criteria. If the criteria is simple, it will just be a single word, if you need a boolean, you can use those as well (such as OSX&&Lion in our case).

I believe this is all in the standard version of Jenkins, without need for a special plugin. Leave me a comment if it isn't and I'll try and diagnose which plugin enables this functionality.

于 2013-08-08T12:46:08.983 に答える
1

この問題は、バイナリ リポジトリ マネージャーを使用してソフトウェア アーティファクトを一元化することで解決されます。個人的にはNexusを使用していますが、リモート ファイル システムと同じくらい馬鹿げたものになる可能性があります。

アイデアは、各 Jenkins ジョブの後にビルドされたアーティファクトを公開し (Nexus が気に入らない場合は、プラグイン経由で公開のいずれかを使用できます)、次のジョブでビルドの依存関係として取得することです。

このアプローチは、ビルドがどこで実行されるかが重要でなくなることを意味し、各モジュール コンポーネントのビルドを切り離すという追加の利点があります。

于 2013-08-08T21:27:14.863 に答える