Я начал практиковаться в создании yml в Azure Devops. У меня есть следующий простой пример.
azure-pipelines.yml
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
parameters:
- name: name
type: string
trigger:
- master
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
persistCredentials: true
fetchTags: true
clean: true
- task: Bash@3
displayName: 'Run hello script'
inputs:
targetType: 'inline'
script: |
chmod +x "./scripts/hello.sh"
./scripts/hello.sh ${{ parameters.name}}
continueOnError: false
привет.ш
#!/bin/sh
# Parameters
NAME=$1
echo "Hello $NAME, this is a script"
Что я хотел бы знать?
Добавление chmod +x "./scripts/hello.sh"
— хороший подход? Потому что, когда я это не добавляю, я всегда получаю "script has no permission"
ошибка. Как только я запускаю конвейер с этой строкой, он работает правильно.
Почему я это спрашиваю?
Я много исследовал примеры YML в Интернете и никогда не видел, чтобы они добавляли эту строку chmod +x "script_name"
, поэтому мне это интересно..
При вызове файла сценария Bash (.sh
) из исходного репозитория в Azure Pipeline вам не нужно использовать команду «chmod +x
», чтобы назначить доступ к файлу сценария. вы можете напрямую вызвать файл сценария в задаче Bash с типом «filePath
».
parameters:
- name: name
type: string
default: 'xxxx'
trigger:
- master
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
. . .
- task: Bash@3
displayName: 'Run hello script'
inputs:
targetType: filePath
filePath: 'scripts/hello.sh'
arguments: '"${{ parameters.name }}"'
Я обнаружил, что добавление следующей строки в файл сценария работает... вы думаете, это хороший подход? echo "##vso[task.setvariablevariable=GLOBAL_VARIABLE]$output
@depreston, Да, использование команды журнала «SetVariable» для установки вывода в скрипте является рекомендуемым способом в Azure Pipelines.
Спасибо, Брайт! Что, если я захочу записать выходные данные файла сценария и сохранить их в глобальной переменной, расположенной в моем файле yml? Раньше я делал это так: скрипт: | chmod +x "./scripts/my-script.sh" output=$(./scripts/my-script.sh $(FIRST_PARAMETER)) echo "##vso[task.setvariablevariable=GLOBAL_VARIABLE]$output" Как можно Я делаю это сейчас, используя filePath?