2012-05-23 33 views

答えて

1

を使用し、私はあなたがソースディレクトリを再利用したい場合は、できるだけ少数のジョブを使用する必要があることがわかりました。

Jenkinsのデフォルト設定では、各ビルドがワークスペースとして別のディレクトリを使用します。これは、ビルドごとに完全なSVNチェックアウトを行うことを意味します。それは永遠にかかる。

すべてのビルドで同じソースディレクトリを使用する場合は、同期について心配する必要があります。ビルドは一度に1つのみです。私が知る限り、Jenkinsには組み込みの同期手段はありません。唯一の方法は、1つのエグゼキュータを使用することです。それでもエグゼクティブが次の仕事を選ぶ方法を制御することはできません。

たとえば、ジョブ「SVN更新」がジョブ「ビルド」をトリガーするとします。誰かが "SVN update#33"を開始します。これは "Build#33"を引き起こすはずです。しかし、Jenkinsの "Poll SCM"機能がその間に "SVN update"#34をスケジュールしていた場合、 "Build#33"を "SVN update#34"の前に実行する必要があります。だから、 "Build#33"の前に "SVN update#34"が実行されてしまい、すべてが失敗します。ポーリングジョブを手動で無効にしない限り。もちろん、後でそれを再び有効にすることを思い出してください。

とにかく。 Jenkinsを2年間使用した後、私は以下のように答えました。リソースを共有する複数のジョブ(ソースディレクトリのようなもの)を絶対に使わず、すべてのロジックをシェルスクリプトに書き換えます。

+0

"Jenkins Build Blocker"(https://wiki.jenkins-ci.org/display/JENKINS/Build+Blocker+Plugin)-pluginを使って "SVN update"ジョブをブロックすることができます。ジョブが実行中です。 –

8

Jenkins Matrix jobを使用してください。いずれかの軸をbuild_modeの値でのデバッグリリースと定義します。次に、使用するコンパイルツール(XCode、gcc、VisualStudioなど)の両方の設定を作成するCMakeを実行します。まるで環境変数であるかのようにbuild_modeを使用し、実際のコンパイルを行うステップを構築するためにそれを渡すことができます。

+0

ありがとうございます。私はそれほど分かりませんでしたが、細部まで細分化するのにまだしばらく時間がかかりました。 –

+1

答えが本当に役に立ちましたら、[受諾](http://meta.stackexchange.com/a/5235/177981)または[upvoting](http://meta.stackexchange.com/a/130054/177981)を検討してください。それ。 –

+0

これはcmakepluginで動作しますか?私は$ build_typeを "Other Build Type"に入れますが、それを展開しません。 – shenshei

9

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

  1. フリースタイルのジョブ「チェックアウト」を作成します。この仕事は、構成タイプ(デバッグ/リリース)に依存しないすべての作業を行う予定です。
  2. "ソースコード管理"でSubversionを選択
  3. リポジトリのURLを入力します。おそらく/トランクを指すようにするのは良い考えです。
  4. ローカルモジュールディレクトリを "。"に設定します。
  5. チェックアウト戦略「エミュレートクリーン」がいい
  6. トリガーポーリングSCMをビルドするには、スケジュールを「5 * * * *」に設定して5分ごとにチェックします。
  7. [高度なプロジェクトオプション]の下の[カスタムワークスペースを使用]をオンにして、ディレクトリをたとえばに設定します。 "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は、デバッグ設定を常にビルドしているので、使用することすらできません。あなたは、全体のソリューションを構築する代わりにALL_BUILD.vcxprojのの.slnファイルを指定したい場合は

    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% 
    

:構築するために、我々は別のバッチスクリプトを使用する必要があります。あなただけの特定のプロジェクトを構築したい場合は、しばらくの間、今ジェンキンスを使用した後

msbuild <solution>.sln /target:<project> 
+1

私が知る限り、 "camke --build"常にデバッグバージョンをビルドします。 msbuild Project.sln/m/p:Configuration = Releaseをリリースする必要があります – Lap

+0

うん、そうです。私はそれに応じて私の答えを変更します。 –

3

Visual Studioの発電機を使用する場合は、あなたがcmake --build -commandに構築するために設定を渡すことができます。

cmake --build . --config Release 
cmake --build . --config Debug 

CMake docsを参照してください。

+1

使用している発電機によって異なります。これはMakefileのようなジェネレータには効果がありません。 'cmake -DCMAKE_BUILD_TYPE = Release' –

+0

Windowsに関する質問があったので、私はVisual Studioを前提としていたので、私は自分の答えを編集するでしょう。 –

関連する問題