Azure开发人员操作管道-任务的有条件执行
我们有一个Azure Pipline,用于部署我们的代码。(与BigData相关) 我们不需要每次都部署的任务很少。只有在某些文件发生更改时,我们才需要这样做。所以我就想跟着Azure开发人员操作管道-任务的有条件执行,azure,azure-devops,azure-pipelines,Azure,Azure Devops,Azure Pipelines,我们有一个Azure Pipline,用于部署我们的代码。(与BigData相关) 我们不需要每次都部署的任务很少。只有在某些文件发生更改时,我们才需要这样做。所以我就想跟着 通过git命令检查在上次提交中是否更改了特定文件 如果是,请将特定变量设置为trueelsefalse 现在,对于部署任务,使用自定义条件并检查上述变量的true 问题 我无法执行git命令,因为正在从构建管道复制工件,该管道没有.git目录 我试图克隆git目录,但是,凭据的配置方式使我无法克隆它 有没有别的办法解决
- 通过git命令检查在上次提交中是否更改了特定文件李>
- 如果是,请将特定变量设置为
elsetrue
false
- 现在,对于部署任务,使用
并检查上述变量的自定义条件
true
git命令
,因为正在从构建管道
复制工件,该管道没有.git
目录
我试图克隆git目录,但是,凭据的配置方式使我无法克隆它
有没有别的办法解决这个问题
即,仅当特定文件已更改时,才在发布管道中执行特定任务
您可以将git repo添加为其他工件: Tl;博士,有很多方法可以把这些缝合在一起
--no checkout
选项手动将git回购添加到发布管道中.git
目录推入工件.git
目录,这会阻止部署代理实际拥有源代码。但是,如果您“允许脚本访问oAuth令牌”,您应该能够使用它通过powershell使用git clone--no checkout url
手动克隆存储库
在工件中包含一些标志文件
其他方法是在生成工件的构建管道上进行决策,并发布一个带有工件的开关文件,该文件指示发布应该(不)执行预期任务
标记构建
也许有不同的方法可以做到这一点,但我不知道。如果git中的搜索表明发行版需要做额外的工作,那么可以使用RESTapi来修改构建。不要忘记在构建作业中设置“允许脚本使用oAuth令牌”。然后在发布管道中创建一个Full
和Min
阶段,Full有额外的任务,Min没有
在这些阶段中,您可以基于构建标记使用工件过滤器特性。
如果您不想(或不能)使用单独的阶段并使用工件过滤器,您可以通过powershell使用您在问题中提到的自定义条件 将
.git
目录推入工件
如果您完全想在发布管道上做决定,并且无法从那里访问repo,请将
.git
目录从您的构建推送到(一个新的?)工件中,然后在发布管道上使用它。(这看起来像是一个真正的黑客,我不完全确定它会起作用。)我找到了两种方法来实现这一点。我使用Powershell,但可以根据您喜欢的口味进行更改
在构建管道中运行git diff:
$CSV_FileName = git diff-tree --no-commit-id --name-only $Commit_ID -r | where {$_ -like "*.csv"}
$Ps1_FileName = git diff-tree --no-commit-id --name-only $Commit_ID -r | where {$_ -like "*.ps1"}
然后运行你的状态
方法1
添加构建标记,然后将其设置为发布中的阶段条件。我喜欢的舞台控制方法
构建
#Set Build Tag
if ($CSV_FileName) {
Write-Host "##vso[build.addbuildtag]CSV"
}
if ($PS1_FileName) {
Write-Host "##vso[build.addbuildtag]PS1"
}
#Update Variable Group
if ($CSV_FileName) {
echo $env:AZURE_DEVOPS_EXT_PAT | az devops login
az devops configure -d organization=https://dev.azure.com/<your_organisation>/ project=<your_project>
az pipelines variable-group variable update --id <id_here> --name <name_here> --value <value_here>
}
if ($PS1_FileName) {
echo $env:AZURE_DEVOPS_EXT_PAT | az devops login
az devops configure -d organization=https://dev.azure.com/<your_organisation>/ project=<your_project>
az pipelines variable-group variable update --id <id_here> --name <name_here> --value <value_here>
}
发布
Stage Artifact Filter: Branch | Include | <TagName>
Task Condition: and(succeeded(), eq(variables['VariableName'], 'Value'))
你是说作为
发布
管道中任务
的一部分?这将如何帮助我呢?不是任务的一部分,您希望在发布过程中使用git repo(但您没有成功克隆它),这样您就可以将repo作为工件添加,它将在发布开始时下载,因此添加一个执行3个步骤的任务。请小心使用预期解决方案的“last commit”参数。任何给定的构建都可以有任意数量的提交,我认为您不能只执行一个。您需要使用git diff tree--无提交id--仅名称-r$change.id
其中$change
是当前构建/发布的所有提交的迭代中的当前项。您好,事情进展如何?贝文的回答对你有帮助吗?如果是,您可以接受答案,这样其他用户就可以看到解决方案是否有效。如果您仍然面临一些问题,请随意离开这里:-)方法2似乎正是我所寻找的。然而,在方法1中,我没有得到这个部分阶段工件过滤器:分支|包含|
你能解释一下吗?我刚刚仔细看了Josh的答案,在“标记构建”下有一个屏幕截图