10

Jenkinsに次のことをさせるにはどうすればよいですか?

SVN からトランク/をチェックアウトし、CMake を使用して構成のデバッグとリリースをビルドします。構成のジョブが重複することはありません。

4

4 に答える 4

10

これを理解するのにしばらく時間がかかりました。これが私がそれをどうやってやったかです。

  1. フリースタイルジョブ「チェックアウト」を作成します。このジョブは、構成タイプ (デバッグ/リリース) に依存しないすべての作業を行います。
  2. 「ソースコード管理」でSubversionを選択
  3. リポジトリ URL を入力します。/trunk を指すようにすることをお勧めします。
  4. ローカル モジュール dir を "." に設定します。(引用符なし)
  5. チェックアウト戦略として「Emulate clean」がいい
  6. トリガー ポーリング SCM をビルドし、スケジュールを「5 * * * *」に設定して、5 分ごとにチェックします。
  7. [Advanced Project Options] の下で [Use custom workspace] をチェックし、dir を「c:/src」などに設定します。他のジョブがソースにアクセスできるようにするため、Jenkins に内部ワークスペースを使用させたくありません。
  8. [ビルド] の下に、ビルド ディレクトリを消去するために使用される次の 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
    
  9. 別のジョブ「ビルド」を作成し、今度は「マルチ構成」ジョブにします。このジョブは、構成 (デバッグ/リリース) ごとに実行されます。

  10. まず、ジョブ「チェックアウト」後にビルドするようにビルドトリガーを設定します
  11. ここで、構成マトリックスの下に、値「デバッグ リリース」(空白 = セパレータ) を持つ軸「構成」を追加します。残念ながら、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>
于 2012-05-24T08:48:41.920 に答える
9

JenkinsMatrixジョブを使用します。軸の1つを、値DebugおよびReleaseを使用してbuild_modeとして定義します。次に、CMakeを実行して、使用するコンパイルツール(XCode、gcc、VisualStudioなど)の両方の構成を作成します。次に、build_modeを環境変数であるかのように使用し、実際のコンパイルを実行するビルドステップに渡すことができます。

于 2012-05-23T11:10:04.807 に答える
1

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 年間使用した後、私は自分の答えを次のように変更しました。リソースを共有する複数のジョブ (ソース ディレクトリなど) を決して使用せず、すべてのロジックをシェル スクリプトに焼き付けます (ループ オーバー構成用)。

于 2014-05-06T14:04:51.040 に答える