如何配置基于条件的管道|Azure管道



我遇到了一个场景,在这个场景中,我希望构建依赖于源目录的源代码。

我在同一个git存储库(dotnet&Python(中有两种语言。

我想使用单个Azure Pipelines 构建源代码

如果两个(dotnet&Python(都完成了提交,那么所有任务都应该执行&如果提交是针对特定目录完成的,则只应执行相应的语言。

请告诉我如何使用-condition或是否有其他替代来实现这一点

下面是我的天青颜料。yml

#Trigger and pool name configuration
variables:
name: files 
steps:
- script: $(files) = git diff-tree --no-commit-id --name-only -r $(Build.SourceVersion)"
displayName: 'display Last Committed Files'
## Here I am getting changed files
##Dotnet/Server.cs
##Py/Hello.py
- task: PythonScript@0   ## It should only get called when there are changes in /Py
inputs:
scriptSource: 'inline'
script: 'print(''Hello, FromPython!'')'
condition: eq('${{ variables.files }}', '/Py')  
- task: DotNetCoreCLI@2  ## It should only get called when there are changes in /Dotnet
inputs:
command: 'build'
projects: '**/*.csproj'
condition: eq('${{ variables.files }}', '/Dotnet')

如有任何帮助,将不胜感激

我认为不可能直接做你想做的事。所有这些任务条件都是在管道执行开始时评估的。因此,如果在任何特定任务中设置管道变量,即使是第一个任务,也已经太迟了。

如果你真的想这样做,你可能必须一直编写脚本。因此,您可以使用以下语法在第一个脚本中设置变量:

(if there are C# files) echo '##vso[task.setvariable variable=DotNet]true'
(if there are Py files) echo '##vso[task.setvariable variable=Python]true'

然后在其他脚本中,你会评估它们,比如:

if $(DotNet) = 'true' then dotnet build

这些线条中的某些东西。这可能相当微妙,所以在更高的层面上重新考虑流程可能是有意义的,但如果没有额外的背景,这很难说。

相关内容

  • 没有找到相关文章

最新更新