Azure devops $(Build.ArtifactStagingDirectory)变量';在Azure DevOps管道中部署内部版本时,s值会发生更改

Azure devops $(Build.ArtifactStagingDirectory)变量';在Azure DevOps管道中部署内部版本时,s值会发生更改,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,azure-pipelines-build-task,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,Azure Pipelines Build Task,我有一个DACPAC部署任务失败,因为出于某种原因,$(Build.ArtifactStagingDirectory)管道变量的值在构建管道和发布管道之间发生变化。在生成管道中,变量设置为C:\agent\\u work\2\a,但在发布管道中,变量设置为C:\agent\\u work\r2\a。这导致发布管道在尝试部署DACPAC工件时失败,因为它正在查找的文件夹是空的;将忽略工件实际所在的文件夹。如何使这些变量在构建和发布管道之间保持一致,以便从生成工件的同一文件夹中检索工件?这些变量似乎

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

在您的
系统中,artifacts目录是

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

示例:C:\agent\u work\r1\a

Build.ArtifactStagingDirectory中

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

使用此文件夹的典型方法是使用“复制文件”和“发布生成工件”任务发布生成工件

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

查看Azure管道中的工件

此变量是代理作用域,可以用作脚本中的环境变量和生成任务中的参数,但不能用作生成编号的一部分或版本控制标记

这符合你的经验。您不能更改它,因为它们是预定义的。但是你能澄清一下为什么这对你来说是个问题吗?

在你的系统中有
工件目录

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

示例:C:\agent\u work\r1\a

Build.ArtifactStagingDirectory中

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

使用此文件夹的典型方法是使用“复制文件”和“发布生成工件”任务发布生成工件

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

查看Azure管道中的工件

此变量是代理作用域,可以用作脚本中的环境变量和生成任务中的参数,但不能用作生成编号的一部分或版本控制标记


这符合你的经验。您不能更改它,因为它们是预定义的。但是,您能澄清一下为什么这是一个问题吗?

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

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

  • 使用任务

  • 转到编辑发布管道页面->选择添加工件->选择构建->填写与构建管道相关的信息(注意源别名的值)->添加它。您将在
    $(System.ArtifactsDirectory)/${Source alias}


  • 有关在发布管道中使用工件的详细信息,您可以单击。

    在发布管道中,您不能直接访问生成管道中的文件,这不仅是因为工作目录不同,而且因为它们不使用相同的代理。您需要首先下载工件,然后在发布管道中使用它们

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

  • 使用任务

  • 转到编辑发布管道页面->选择添加工件->选择构建->填写与构建管道相关的信息(注意源别名的值)->添加它。您将在
    $(System.ArtifactsDirectory)/${Source alias}


  • 有关在发布管道中使用工件的更多信息,请单击。

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

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

    Hmm。事实证明,在发布管道中,我实际上使用的是
    System.DefaultWorkingDirectory
    。但那个目录是空的;文物不在那里。不过,它们确实存在于构建管道下的文件夹中。当我在Azure DevOps中查看构建管道时,我可以看到工件。只是