Цикл по нескольким параметрам в задаче Azure Pipeline
Я пытаюсь создать Azure Pipeline. Но у меня возникла проблема с зацикливанием в нем задачи Azure. Ниже я объяснил на упрощенном примере проблему, с которой я столкнулся.
Я надеюсь создать несколько веб-приложений Azure с помощью этого конвейера. Каждому веб-приложению передается команда с использованием--startup-file
и эта команда включает аргумент. Количество создаваемых приложений и аргумент для передачи каждому из них предоставляется в качестве параметра среды выполнения при запуске конвейера.
Например, если ЧИСЛО =3 и АРГУМЕНТЫ =24,56,123,
тогда каждое веб-приложение Azure--name
а также --startup-file
должно быть следующим
--name myapp-1 --startup-file 'java -jar my.jar --arg 24
--name myapp-2 --startup-file 'java -jar my.jar --arg 56
--name myapp-3 --startup-file 'java -jar my.jar --arg 123
Конвейер запрашивает у пользователя количество создаваемых веб-приложений и строку аргументов, разделенных запятыми, для передачи им. Шаг конвейера Azure, определенный в main.yaml
передает эти два параметра в шаблон (createapps.yaml
). Затем на основе этого шаблона должно быть создано определенное количество приложений.
main.yaml выглядит следующим образом
parameters:
- name: NUMBER
type: number
- name: ARGUMENTS
type: string
steps:
- template: createapps.yaml
parameters:
NUMBER: ${{ parameters.NUMBER }}
ARGUMENTS: ${{ parameters.ARGUMENTS }}
createapps.yaml выглядит следующим образом
parameters:
- name: NUMBER
type: number
- name: ARGUMENTS
type: string
steps:
- task: AzureCLI@2
displayName: Create Apps
az webapp create \
--name myapp-<Number> \
--plan myplan \
--resource-group myrg \
--deployment-container-image-name myimage:latest \
--startup-file 'java -jar my.jar --arg <Argument>'
Как я могу зациклить задачу в createapps.yaml
и назначьте NUMBER
а также ARGUMENTS
?
1 ответ
Трещина ARGUMENTS
"," в массив и используйте for
петля. Что-то вроде этого:
- task: AzureCLI@2
displayName: Create Apps
inputs:
azureSubscription: $(azureServiceConnection)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
arr=(${ARGUMENTS//,/ })
for ((i=1; i<=${{ parameters.NUMBER }}; i++ ))
do
az webapp create \
--name "myapp-$i" \
--plan myplan \
--resource-group myrg \
--deployment-container-image-name myimage:latest \
--startup-file "java -jar my.jar --arg ${arr[i-1]}"
done