Jenkinsに次のことをさせるにはどうすればよいですか?
SVN からトランク/をチェックアウトし、CMake を使用して構成のデバッグとリリースをビルドします。構成のジョブが重複することはありません。
これを理解するのにしばらく時間がかかりました。これが私がそれをどうやってやったかです。
[ビルド] の下に、ビルド ディレクトリを消去するために使用される次の Windows バッチ コマンドを追加します。何らかの理由で、CMake はこれを行う方法を提供していません。
cd c:\
rmdir /S /Q build
mkdir build
cd build
cmake --version
rem optionally: svn info c:\src
cmake -G "Visual Studio 10" c:\src
別のジョブ「ビルド」を作成し、今度は「マルチ構成」ジョブにします。このジョブは、構成 (デバッグ/リリース) ごとに実行されます。
ここで、構成マトリックスの下に、値「デバッグ リリース」(空白 = セパレータ) を持つ軸「構成」を追加します。残念ながら、Jenkins 用の CMake ビルダー プラグインはマルチ構成ジョブでは機能しません。常にデバッグ構成をビルドするため、cmake --build を使用することさえできません。ビルドするには、別のバッチ スクリプトを使用する必要があります。
cd c:\build
call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
msbuild ALL_BUILD.vcxproj /verbosity:minimal /maxcpucount:1 /property:Configuration=%configuration%
ソリューション全体をビルドする場合は、ALL_BUILD.vcxproj の代わりに .sln ファイルを指定します。特定のプロジェクトのみをビルドしたい場合は、
msbuild <solution>.sln /target:<project>
JenkinsMatrixジョブを使用します。軸の1つを、値DebugおよびReleaseを使用してbuild_modeとして定義します。次に、CMakeを実行して、使用するコンパイルツール(XCode、gcc、VisualStudioなど)の両方の構成を作成します。次に、build_modeを環境変数であるかのように使用し、実際のコンパイルを実行するビルドステップに渡すことができます。
Jenkins をしばらく使用した後、ソース ディレクトリを再利用する場合は、できるだけ少ないジョブを使用する必要があることがわかりました。
Jenkins のデフォルト設定では、各ビルドがワークスペースとして異なるディレクトリを使用します。これは、ビルドごとに完全な SVN チェックアウトを行うことを意味します。それは永遠にかかります。
すべてのビルドに同じソース ディレクトリを使用する場合は、同期について心配する必要があります。一度に 1 つのビルドのみです。私の知る限り、Jenkins には組み込みの同期手段がありません。唯一の方法は、1 つのエグゼキューターのみを使用することです。それでも、実行者が次のジョブを選択する方法を制御することはできません。
ジョブ「SVN更新」がジョブ「ビルド」をトリガーするとしましょう。誰かが「ビルド #33」をトリガーするはずの「SVN アップデート #33」を開始します。ただし、Jenkins の「Poll SCM」機能がその間に「SVN update」#34 をスケジュールしている場合、「SVN update #34」の前に「Build #33」を実行する必要があることを伝える方法が見つかりませんでした。そのため、「ビルド #33」の前に「SVN アップデート #34」が実行され、すべてが失敗する可能性があります。ポーリング ジョブを手動で無効にしない限り。もちろん、後で再度有効にすることを忘れないでください。
いずれかの方法。Jenkins を 2 年間使用した後、私は自分の答えを次のように変更しました。リソースを共有する複数のジョブ (ソース ディレクトリなど) を決して使用せず、すべてのロジックをシェル スクリプトに焼き付けます (ループ オーバー構成用)。