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

时间:2017-12-20 16:48:59

标签: asp.net tfs azure-devops azure-pipelines-release-pipeline azure-pipelines-build-task

我正在使用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),我看不出这个可以从变量访问的路径。

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

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分: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 (命令:发布;检查Zip已发布项目选项)任务。

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