msbuild 与命令行 vs Jenkins 的行为不同
msbuild behaving differently from command line vs Jenkins
我有一个创建和部署网站包的 Jenkins 作业。
当我 运行 Jenkins 的作业时,它会为每个项目创建一个包,并且部署包不包含 web 作业。但是,命令行中的相同 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"
我试图在 Jenkins 命令行中添加目标 "DiscoverWebJobs",但它说找不到...我花了很多时间尝试不同的选项,运行宁从不同的帐户,使用 powershell,...但什么都没有,我敢肯定这很愚蠢。
如果 zip 包文件不包含 webjobs 文件,当我进行部署时它不会更新 webjobs。我可以单独部署每个 zip 文件,但有一些 webjobs,如果有人包含一个新的,它将不会被部署,从而使该项目的持续集成设置变得无用。
检查 Microsoft WebJobs Publish 1.0.12 nuget 包中的 webjobs.wap.targets
和 webjobs.targets
,以下 msbuild 参数会影响 DiscoverWebJobs
目标是否运行。您可以使用带有 msbuild 的 /p:
开关 set/override 它们的值。
SkipApp_DataFolder
(需要False
)
WebJobsExtendWebPublish
(需要true
)
WebJobsConfigFile
(文件需要存在于该路径)
如果存在以下文件,则不需要 set/override 最后一个文件:E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\Properties\webjobs-list.json
.
终于开始工作了!我的解决方法是删除解决方案中所有 csproj 文件中重复的 "Microsoft.Web.WebJobs.Publish" 目标导入。
<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')" />
我有 1.0.11 和 1.0.12 版本,所以我删除了旧版本,它创建了包括 webjobs 在内的完整包。
不确定为什么 运行 来自 Jenkins 或来自同一台机器的命令行的 msbuild 会对那些重复的目标产生任何不同的影响,但是...
我有一个创建和部署网站包的 Jenkins 作业。
当我 运行 Jenkins 的作业时,它会为每个项目创建一个包,并且部署包不包含 web 作业。但是,命令行中的相同 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"
我试图在 Jenkins 命令行中添加目标 "DiscoverWebJobs",但它说找不到...我花了很多时间尝试不同的选项,运行宁从不同的帐户,使用 powershell,...但什么都没有,我敢肯定这很愚蠢。
如果 zip 包文件不包含 webjobs 文件,当我进行部署时它不会更新 webjobs。我可以单独部署每个 zip 文件,但有一些 webjobs,如果有人包含一个新的,它将不会被部署,从而使该项目的持续集成设置变得无用。
检查 Microsoft WebJobs Publish 1.0.12 nuget 包中的 webjobs.wap.targets
和 webjobs.targets
,以下 msbuild 参数会影响 DiscoverWebJobs
目标是否运行。您可以使用带有 msbuild 的 /p:
开关 set/override 它们的值。
SkipApp_DataFolder
(需要False
)WebJobsExtendWebPublish
(需要true
)WebJobsConfigFile
(文件需要存在于该路径)
如果存在以下文件,则不需要 set/override 最后一个文件:E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\Properties\webjobs-list.json
.
终于开始工作了!我的解决方法是删除解决方案中所有 csproj 文件中重复的 "Microsoft.Web.WebJobs.Publish" 目标导入。
<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')" />
我有 1.0.11 和 1.0.12 版本,所以我删除了旧版本,它创建了包括 webjobs 在内的完整包。
不确定为什么 运行 来自 Jenkins 或来自同一台机器的命令行的 msbuild 会对那些重复的目标产生任何不同的影响,但是...