Как настроить конвейер на основе условий | Azure Pipeline

Я столкнулся со сценарием, в котором я хочу создать исходный код, зависящий от исходного каталога.

У меня есть 2 языка в одном репозитории git (dotnet и Python).

Я хотел собрать исходный код с помощью одного конвейера Azure.

Если фиксация выполняется для обоих (dotnet и Python), должна выполняться вся задача, а если фиксация выполняется для определенного каталога, должен выполняться только соответствующий язык.

Пожалуйста, дайте мне знать, как я могу добиться этого, используя -condition или есть ли другие альтернативы

Ниже мой azure-pipelines.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')

Любая помощь будет оценена


person Eddie    schedule 22.05.2021    source источник
comment
Вероятно, это то, на что вы смотрите: stackoverflow.com/questions/65088433/   -  person Thomas    schedule 23.05.2021


Ответы (1)


Я не думаю, что можно прямо делать то, что ты хочешь. Все эти условия задачи оцениваются в начале выполнения конвейера. Поэтому, если вы установите переменные конвейера в какой-либо конкретной задаче, даже в первой, будет уже слишком поздно.

Если вы действительно хотите это сделать, вам, вероятно, придется полностью писать сценарии. Итак, вы устанавливаете переменные в первом скрипте, используя синтаксис здесь < / а>:

(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

Что-то среди этих строк. Вероятно, это будет довольно тонко, поэтому, возможно, имеет смысл пересмотреть поток на более высоком уровне, но без дополнительного контекста трудно сказать.

person psfinaki    schedule 22.05.2021