在 Azure DevOps Pipelines 中部署生成时,$(Build.ArtifactStagingDirectory) 变量的值会发生变化

eko*_*lis 9 azure-devops azure-pipelines-build-task azure-pipelines azure-pipelines-release-pipeline

我有一个 DACPAC 部署任务失败,因为由于某种原因$(Build.ArtifactStagingDirectory)管道变量的值在构建管道和发布管道之间发生变化。在构建管道中,该变量设置为C:\agent\_work\2\a,但在发布管道中它是C:\agent\_work\r2\a。这会导致发布管道在尝试部署 DACPAC 工件时失败,因为它正在查找的文件夹是空的;工件实际所在的文件夹将被忽略。如何使这些变量在构建和发布管道之间保持一致,以便从生成的同一文件夹中检索工件?这些变量似乎是内置的,所以我看不到任何方法来更改它们。我总是可以硬编码路径,但这似乎有点笨拙......

Krz*_*tof 9

版本中你System.ArtifactsDirectory

在版本部署期间将工件下载到的目录。如果需要将工件下载到代理,则在每次部署之前都会清除该目录。与 Agent.ReleaseDirectory 和 System.DefaultWorkingDirectory 相同。

示例:C:\agent_work\r1\a

以及管道/构建 Build.ArtifactStagingDirectory

代理上的本地路径,任何工件在推送到目的地之前都将复制到该路径。例如:c:\agent_work\1\a

使用此文件夹的典型方法是通过复制文件和发布构建工件任务来发布构建工件。

注意:Build.ArtifactStagingDirectory 和 Build.StagingDirectory 是可以互换的。在每次新构建之前都会清除此目录,因此您不必自己清理它。

请参阅 Azure Pipelines 中的工件。

此变量是代理范围的,可以用作脚本中的环境变量和构建任务中的参数,但不能用作构建号的一部分或版本控制标记。

这符合你的经验。而且您无法更改它,因为它们是预定义的。但你能解释一下为什么这对你来说是个问题吗?


Jan*_*SFT 7

在发布管道中,您无法直接访问构建管道中的文件,不仅因为工作目录不同,还因为它们不使用相同的代理。您需要先下载工件,然后在发布管道中使用它们。

您可以使用以下方式下载工件:

  1. 使用下载构建工件任务。

  2. 进入编辑发布管道页面 -> 选择添加工件 -> 选择构建 -> 填写与构建管道相关的信息(注意 Source alias 的值) -> 添加它。您会发现您的工件已下载到$(System.ArtifactsDirectory)/${Source alias}

在此输入图像描述

有关在发布管道中使用工件的更多信息,您可以单击此文档


eko*_*lis 2

哦,我想我已经明白了。每个发布管道阶段都有一个名为“工件下载”的选项,它允许您指定该阶段实际使用管道中链接的所有工件中的哪些工件。我需要选中相应的复选框,以便在阶段任务中使用工件。