Анализ выходных данных переменных в шаблон — конвейер Azure yml

У меня есть конвейер, который запускает конвейер шаблонов. Это выглядит так:

resources:
  repositories:
  - repository: repoName
    type: git
    name: projectName/repoName
    ref: branchName

stages:
  - stage: GetLastCommitId
    jobs:
    - job: lastCommitId
      steps:
      - checkout: repoName
      - bash: |
            cd repoName
            echo "##vso[task.setvariable variable=commitId;isOutput=true]$(git rev-parse HEAD)"
        name: a
      - bash: |
            echo $(a.commitId)
      - checkout: self
  - template: templates/bicep.yml
    parameters:
      environment: dev
      lastCommitId: $[stageDependencies.GetLastCommitId.lastCommitId.outputs['a.commitId']]

bash возвращает мне требуемый идентификатор. Все так, как должно быть.

Теперь я хочу передать это выходное значение в шаблон как параметр - lastCommitId.

Есть ли способ сделать это?

Вот что я пробовал:

  - template: templates/bicep.yml
    parameters:
      environment: dev
      lastCommitId: $(a.commitId)

Error: Empty string
  - template: templates/bicep.yml
    dependsOn: GetLastCommitId
    parameters:
      environment: dev
      lastCommitId: $[stageDependencies.GetLastCommitId.lastCommitId.outputs['a.commitId']]

Error: Can not start pipeline. dependsOn not expected here
  - template: templates/bicep.yml
    parameters:
      environment: dev
      dependsOn: GetLastCommitId
      lastCommitId: $[stageDependencies.GetLastCommitId.lastCommitId.outputs['a.commitId']]

Error: syntax error: invalid arithmetic operator (error token is ".GetLastCommitId.lastCommitId.outputs['a.commitId']
syntax according to microsoft doc: $[stageDependencies.A.A1.outputs['MyOutputVar.myStageVal']]

Вот документация от Microsoft: https://learn.microsoft.com/en-us/azure/devops/pipelines/process/set-variables-scripts?view=azure-devops&tabs=bash

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Значение параметра, который вы пытаетесь установить, выполняется до фактического запуска задач. Следовательно, lastCommitId не устанавливается в качестве значения и приводит к разочаровывающим результатам ваших различных подходов.

Но, в зависимости от того, что находится в вашем bicep.yml, есть решение!

С помощью azure-pipeline.yml и bicep.yml ниже вы можете использовать свой lastCommitId в шаблоне:

trigger:
- main

pool:
  vmImage: ubuntu-latest

resources:
  repositories:
  - repository: repoName
    type: git
    name: projectName/repoName
    ref: branchName

stages:
- stage: GetLastCommitId
  jobs:
  - job: lastCommitId
    steps:
     - checkout: repoName
     - bash: |
           cd repoName
           echo "##vso[task.setvariable variable=commitId;isOutput=true]$(git rev-parse HEAD)"
       name: a
     - bash: |
           echo $(a.commitId)
     - checkout: self

- template: templates/bicep.yml

И bicep.yml:

stages:
- stage: Template
  jobs:
  - job: JobInTemplate
    variables:
      lastCommitId: $[stageDependencies.GetLastCommitId.lastCommitId.outputs['a.commitId']]
    steps:
    - script: echo the value is $(lastCommitId)

Другие вопросы по теме