5

複数の C++ .vcproj を含む VS .sln をビルドしようとしています。ソリューション ファイルは CMake を使用して生成され、この部分は Jenkins で (CMake ビルダー プラグインを使用して) 動作しています。ソリューション ファイルをビルドするために、msbuild を使用しています。次のコマンドを使用して、Visual Studio とコマンド ラインの両方を使用してソリューションをビルドできます。

C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" /t:Rebuild bin/SonIO.sln

これは正常にビルドされます (Jenkins が存在する同じマシン上で)。

ただし、ビルドのこの部分を Jenkins で自動化しようとすると、ビルドがいくつかのC1083エラーで失敗します ( "Cannot open source file: '..\path\to\file.ext': No such file or directory)。Jenkins msbuildプラグインの両方を使用して、ターミナルで「Windowsバッチコマンドを実行」ビルドステップとして機能するまったく同じコマンドを使用してみましたが、同じ結果が得られました。

Windows バッチ コマンド ビルド ステップを使用すると、コマンドが実行されていることがログに表示されます。

C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319 msbuild.exe" /t:Rebuild bin/SonIO.sln

...作業ディレクトリを含め、コマンドラインから動作するものとまったく同じです。

Jenkins をサービスとして実行しており、サービスを自分のアカウントとして (管理者権限で) ログオンしています。Jenkinsがバッチコマンドを実行するディレクトリを知っている人はいますか?

Jenkins とコマンド ラインでこの動作の違いが見られる理由はありますか?

4

4 に答える 4

3

これは解決策と同じくらい回避策ですが、devenv代わりに使用することにmsbuildなり、正常に動作します。

これは環境問題であることを強く示唆していることはわかっていますが、ビルド サーバーに VS をインストールすることは問題ではないため、msbuild のウサギの穴に費やす時間を節約することにしました。

于 2013-02-11T16:52:54.670 に答える
1

Jenkinsスレーブエージェントが使用している環境は、プロンプトから同じコマンドラインを実行するときに使用する環境とは異なります。2つの環境を比較し、違いを確認してから、それらをJenkinsジョブに追加します。

実行中にスレーブの環境を取得するには、Windowsコマンドプロンプトからスレーブに「設定」を実行させます

于 2013-02-11T23:07:14.840 に答える
1

VSビルドについてよく知らなくても、ほとんど環境のセットアップのように見えます。

私の最初のアドバイスは、Jenkinsで、適切なコマンドを実行したのと同じディレクトリにディレクトリを変更してから試してみることです。

また、最初に Jenkins をスタンドアロン アプリとして実行してみてください。

そしてサービスとして、サービスが「デスクトップと対話する」ことを許可するかもしれません。

于 2013-02-11T14:51:34.670 に答える