#azure-devops #azure-pipelines
#azure-devops #azure-конвейеры
Вопрос:
Я пытаюсь сгенерировать заметки о выпуске на этапе Azure piplelines и отправить заметку на служебную шину Azure.
Как мне предоставить переменную в скрипте bash, а затем использовать ее в последующем задании на том же этапе?
Я использую задачу bash для выполнения git
команды и пытаюсь экспортировать ее как переменную среды, которую я хочу использовать в следующем задании.
- stage: PubtoAzureServiceBus
variables:
COMMIT_MSG: "alsdkfgjdsfgjfd"
jobs:
- job: gitlog
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
# Write your commands here
export COMMIT_MSG=$(git log -1 --pretty=format:"Author: %aN%n%nCommit: %H%n%nNotes:%n%n%B")
env | grep C
- job:
pool: server
dependsOn: gitlog
steps:
- task: PublishToAzureServiceBus@1
inputs:
azureSubscription: 'Slack Release Notifications'
messageBody: |
{
"channel":"XXXXXXXXXX",
"username":"bot",
"iconEmoji":"",
"text":":airhorn: release :airhorn: n`$(COMMIT_MSG)`"
}
signPayload: false
waitForCompletion: false
Ответ №1:
Вам необходимо использовать синтаксис ведения журнала и выходные переменные, как показано здесь:
trigger: none
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
# or on Windows:
# - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
name: printvar
- stage: B
dependsOn: A
jobs:
- job: B1
condition: in(stageDependencies.A.A1.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
steps:
- script: echo hello from Job B1
- job: B2
variables:
varFromA: $[ stageDependencies.A.A1.outputs['printvar.shouldrun'] ]
steps:
- script: echo $(varFromA) # this step uses the mapped-in variable
Пожалуйста, посмотрите здесь, чтобы проверить документацию.
Поэтому вам необходимо заменить
export COMMIT_MSG=$(git log -1 --pretty=format:"Author: %aN%n%nCommit: %H%n%nNotes:%n%n%B")
команда ведения журнала с помощью isOutput=true
а затем сопоставьте это как здесь
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=shouldrun;isOutput=true]true"
name: ProduceVar # because we're going to depend on it, we need to name the step
- job: B
dependsOn: A
variables:
# map the output variable from A into this job
varFromA: $[ dependencies.A.outputs['printvar.shouldrun']
steps:
- script: echo $(varFromA) # this step uses the mapped-in variable
поскольку вы хотите разделить переменную между заданиями (а не этапами, как показано в первом примере).
Комментарии:
1. генерируется ли вывод командой echo в задании A1 и сохраняется ли он в переменной с именем printvar?
2. ДА. Но важно иметь
isOutput=true
3. где мне запустить команду git log? это добавляется к echo «## vso …»
4. Перед этим и присваивайте результат переменной. а затем используйте его здесь
##vso[task.setvariable variable=shouldrun;isOutput=true]<put variable here>