如何在发布步骤中获取我的工件提取到的目录?

问题描述 投票:0回答:2

我正在使用VSTS来部署asp.net Web应用程序。我们正在改变我们部署转换后的web.config文件的方式,因为我们在最近的一篇生产帖子中被烧毁,当时在“IIS Web App部署期间未正确转换文件。我们的新计划是使用CodeAssassin.ConfigTransform”nuget任务,我们所有的配置转换都转换为构建的一部分。这些可以由我们的开发人员在本地验证/检查,并且被合并到构建工件中。

所以对于我的问题,基本上在我的构建工件中,在我的Web项目的根目录下,我们将找到转换后的web.config文件,例如web.dev.config.transformed,web.qa.config.transformed,web.dev.config.transformed等。

作为我的发布过程中的新步骤,每个环境,我想在“IIS Web App Deploy”任务将更改推送到Web服务器之前,在我的工件中复制正确的文件。在所有变量替换之后的非常基本的级别,复制命令看起来像这样。

copy-item ?????web.dev.config.transformed -Destination ?????web.config

我需要更换?????使用我的工件被提取的路径,例如,

C:\vstsagent\A1\_work\r1\a\temp_web_package_7996773376015784\Content\C_C\VSTS_agent\_work\6\s\My.Web.Project\obj\Release\Package\PackageTmp\

我查看了每个构建/发布变量(感谢Gian Maria Dump all environment variables during a TFS / VSTS Build),我看不出这个我可以从变量访问的路径。

我显然在这里遗漏了一些简单的东西......因为其他任务可以获得这些信息吗?

任何帮助赞赏!

asp.net tfs azure-devops azure-pipelines-release-pipeline azure-pipelines-build-task
2个回答
0
投票

首先,如果启用了文件转换和变量替换(提取包>执行转换>将文件存档到临时包(temp_web_package_xxx.zip)),则IIS Web App部署任务会生成temp_web_package_XXX.zip文件,因此您无需执行此操作使用临时包文件。

其次,您只需要处理包文件(例如,提取包文件>将文件复制到文件夹),路径就像$(System.DefaultWorkingDirectory)/[build definition name]/[Artifact name (Specified in Publish Build Artifacts task)]/*.zip

您可以通过在Visual Studio Build或MSBuild任务中指定/P:PackageTempRootDir="" MSBuild参数来从包中删除源路径结构。对于dotnet核心项目,使用.NET Core(Command:Publish; Check Zip Published Projects选项)任务。

之后,文件夹结构就像[WebApp]\Content\D_C\PackageTmp


0
投票

你要找的变量是$(System.DefaultWorkingDirectory)

这将为您提供路径的第一部分。之后,您可以添加自己的文件夹和文件,如下所示:

$(System.DefaultWorkingDirectory)\My.Web.Project\obj\Release\Package\PackageTmp\

您还可以在构建定义中使用Copy File task(v2),然后选中Flatten Files。这将从工件中的路径中删除您不需要的目录。这样可以更轻松地在您的发布中使用工件

© www.soinside.com 2019 - 2024. All rights reserved.