2017-01-10 5 views
2

Webサイトパッケージを作成して配置するJenkinsジョブがあります。msbuildがコマンドラインと異なる動作をするJenkins

Jenkinsからジョブを実行すると、プロジェクトごとにパッケージが作成され、展開パッケージにはw​​ebjobsが含まれません。しかし、コマンドラインからの同じmsbuildコマンドは、その中にwebjobsを含むより大きなパッケージファイルを作成します。

同じユーザーアカウントのJenkinsサービスを使用してmsbuildコマンドラインを実行しようとしましたが、同様に動作します。私は両方のMSBuildの出力ログを比較すると

が、私はいくつかの相違点は、コマンドラインMSBuildのログが含まれる主な違いであることを得る:

Target "DiscoverWebJobs" in file "E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.wap.targets" from project "E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\WebAPI.csproj" (target "Build" depends on it): 
    Task "Message" 
     WebJobs: reading [E:\Jenkins\jobs\Publish job\workspace\Project\WebAPI\Properties\webjobs-list.json] 
    Done executing task "Message". 
    Using "ReadWebJobsConfigFile" task from assembly "E:\Jenkins\jobs\Publish job\workspace\Project\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\Microsoft.Web.WebJobs.Publish.Tasks.dll". 
    Task "ReadWebJobsConfigFile" 
    Done executing task "ReadWebJobsConfigFile". 
    Task "Message" 
     WebJobs: WebJobs found: [../blah1.csproj;../blah2.csproj;../blah3.csproj;] 
    Done executing task "Message". 
    Done building target "DiscoverWebJobs" in project "WebAPI.csproj" 

私はジェンキンスコマンドラインでターゲット「DiscoverWebJobs」を追加しようとしたが、それは見つけることができないと言います...私は、PowerShellを使用して、別のアカウントから実行する、異なるオプションを試して、時間を費やしました...しかし、何も、私は何かばかだと確信しています。

zipパッケージファイルにwebjobsファイルが含まれていない場合、私が配布を行うときにwebjobsは更新されません。私は各zipファイルを別々に配備することができますが、いくつかのWebジョブがあります。誰かが新しいプロジェクトを組み込んだ場合、このプロジェクトの継続的な統合設定を無意味にするために配備されません。

+0

と何が違うの効果を持っているでしょう、なぜ( '/ Vを渡しわからない:とD ' jenkinsからのmsbuildコマンド)、ログにはなぜそのターゲットがスキップされたのかの概要が表示されます。 「WebJobs」を含む行を探します。 *ターゲットDiscoverWebJobsがスキップしたため...* – stijn

+0

Jenkinsとコマンドラインからのmsbuildログの両方を比較しましたが、ターゲットをスキップすることはありません。ターゲットはコマンドラインからのみ実行されますが、msbuildがJenkinsジョブから実行されたときには実行されません。 –

答えて

1

最後に動作しています!解決策は、ソリューション内のすべてのcsprojファイルで重複した "Microsoft.Web.WebJobs.Publish"ターゲットインポートを削除することでした。

<インポートプロジェクト= ".. \ packages \ Microsoft.Web.WebJobs.Publish.1.0.11 \ tools \ webjobs.targets" Condition = "Exists( '.. \ packages \ Microsoft.Web.WebJobs。 webjobs.targets \ Publish.1.0.11 \ツール)」/ >

<Import Project="..\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.targets" Condition="Exists('..\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.targets')" /> 

私はので、私は古いものを取り出して、それがwebjobsを含む完全なパッケージを作成し、バージョン1.0.11および1.0.12を持っていました。

あなたは詳細な冗長性で実行した場合ジェンキンスからか、同じマシンでコマンドラインから実行するMSBuildのは、それらの重複のターゲットけど...

+1

違いは、あるコンテキストではフォルダ.. .. \ packages \ Microsoft.Web.WebJobs.Publish.1.0.11 \ tools \ webjobs.targets'がまだ存在していた可能性があります。もう一方の文脈では、 'Condition'属性のために古いインポートが無視されました。出力差がどのように発生するのかについての私の推測は、 'Microsoft.Web.WebJobs.Publish.Tasks.dll'への文書化されていない変更、またはスクリプトを2回実行した場合の副作用です。おそらく最初の実行のresidualプロパティ値、Items 、または中間出力ファイル。 – weir

1

Microsoft WebJobs Publish 1.0.12 nugetパッケージからwebjobs.wap.targetswebjobs.targetsを調べると、次のmsbuildパラメータはDiscoverWebJobsターゲットが実行されるかどうかに影響します。 msbuildのスイッチ/p:を使用して、値を設定または上書きできます。

  • SkipApp_DataFolderFalseにする必要がある)
  • WebJobsExtendWebPublishtrueにする必要がある)
  • WebJobsConfigFile(ファイルがそのパスに存在する必要があります)

あなたが設定する必要はありません/次のファイルが存在する場合は、最後のファイルを上書きします。E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\Properties\webjobs-list.json

+0

良い叫び声@weirしかし、私はまだ同じ問題が発生します:( –

+0

上記で指定したパスのwebjobs-list.jsonファイルの内容は何ですか? – weir

+0

{ "$ schema": "http://schemastore.org/スキーマ/ JSON/webjobs-list.json " "WebJobs":[{ "filePathに":" ../blah1/blah1.csproj " }、{ "filePathに":" ../blah2/ blah2.csproj " }、{ "filePathに":" ../blah3/blah3.csproj」 } ] } –

関連する問題