我们有一个Azure Pipline,用于部署我们的代码。 (与BigData有关)。
我们不需要每次都部署一些任务。仅当某些文件已更改时,我们才需要这样做。所以我在想跟随。
true
否则为false
custom condition
并检查true
的上述变量 问题
我无法执行git command
,因为从没有build pipeline
目录的.git
复制了工件。
我试图克隆git目录,但是,凭据的配置方式无法克隆。
有另一种方法可以解决此问题。
仅在更改了特定文件后,才在发布管道中执行某些任务。
答案 0 :(得分:0)
答案 1 :(得分:0)
--no-checkout
选项将git repo手动添加到发布管道中.git
目录插入工件中将Git存储库作为工件添加到发布管道中,将允许部署代理访问源代码管理(包括代码文件),以便您可以在发布阶段进行查询。
我认为Azure DevOps UI不会为您提供仅克隆.git
目录的选项,这将阻止您的部署代理实际拥有源代码。但是,如果“允许脚本访问oAuth令牌”,则应该能够使用git clone --no-checkout url
通过powershell手动克隆存储库。
其他途径将是在生成工件的构建管道上进行决策,并使用工件发布一个开关文件,该文件指示发行版不应该执行预期的任务。
执行此操作的方法可能有所不同,但我不知道。如果git中的搜索表明发行版需要做额外的工作,请使用RESTapi来add a tag进行构建。不要忘记在构建作业中设置“允许脚本使用oAuth令牌”。然后在发布管道中创建一个Full
和Min
阶段,其中full具有额外的任务,而min没有。
如果您不想(或不能)使用单独的阶段并使用工件过滤器,则可以通过powershell get the tags使用问题中提到的自定义条件。
.git
目录插入工件中如果您完全决定在发布管道上做出决定,并且无法从那里访问存储库,则将构建中的.git
目录推送到(新的?)构件中,然后然后在发布管道上使用它。 (这似乎是一个真正的技巧,我不确定它是否可以正常工作)。
答案 2 :(得分:0)
我找到了两种方法可以实现这一目标。我使用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"}
然后运行您的条件
添加一个构建标记,然后在Release中将其设置为阶段条件。我首选的舞台控制方法。
构建
#Set Build Tag
if ($CSV_FileName) {
Write-Host "##vso[build.addbuildtag]CSV"
}
if ($PS1_FileName) {
Write-Host "##vso[build.addbuildtag]PS1"
}
发布
Stage Artifact Filter: Branch | Include | <TagName>
绑定变量组同时执行构建和发布管道。这样可以对每个任务的条件进行更精细的控制,但是有点笨重。确保在发行版末尾的“变量”组中重置“变量”。
构建
#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>
}
发布
Task Condition: and(succeeded(), eq(variables['VariableName'], 'Value'))