попытка настроить переменные, используя предопределенные переменные из сценария bash в конвейерах Azure

#shell #azure-devops #azure-pipelines

#оболочка #azure-devops #azure-конвейеры

Вопрос:

Я пытаюсь настроить переменные из предопределенных переменных с помощью скрипта bash с помощью скрипта bash. но не удалось добиться успеха. ниже приведена моя задача в конвейере Azure

   resources:
  pipelines:
  - pipeline: pipeline1
  project: appcom
  source: pipeline-api
  trigger:
  branches:
  - develop
  - feat/*
  - pipeline: pipeline2
  project: appcom
  source: pipeline2-api
  trigger:
  branches:
  - develop
  - feat/*
  variables:
 - name: alias
   value: $(resources.triggeringAlias)

 stages:
 - stage: ScanImage

     jobs:
     - job: ScanImage
       pool:
         vmImage: 'ubuntu-16.04'

       steps:
       - script: echo $(alias)

       - task: Bash@3
         inputs:
         targetType: 'inline'
         script: |
         if [ "$(alias)" == "pipeline1" ]; then
           echo ("##vso[task.setvariable variable=apiname]$(resources.pipeline.pipeline1.pipelineName)")
           echo ("##vso[task.setvariable variable=dockertag]$(resources.pipeline.pipeline1.sourceCommit) | cut -c -7")
           echo ("##vso[task.setvariable variable=helmpath]P02565Mallorca/pipeline1-api")
         elif [ "$(alias)" == "pipeline2" ]; then
           echo ("##vso[task.setvariable variable=apiname]$(resources.pipeline.pipeline2.pipelineName)")
           echo ("##vso[task.setvariable variable=dockertag]$(resources.pipeline.pipeline2.sourceCommit) | cut -c -7")
           echo ("##vso[task.setvariable variable=helmpath]P02565Mallorca/pipeline2")
           fi
       - script: echo $(dockertag)
       - script: echo $(helmpath)
       - script: echo $(apiname)
 

это выдает ошибку с ## [ошибка] Bash завершается с кодом ‘2

Ответ №1:

По ссылке на этот документ: Установка переменных в сценариях, приведенных ниже, yaml должен работать должным образом.

 resources:
  pipelines:
  - pipeline: pipeline1
    project: appcom
    source: pipeline-api
    trigger:
      branches:
      - develop
      - feat/*
  - pipeline: pipeline2
    project: appcom
    source: pipeline2-api
    trigger:
      branches:
      - develop
      - feat/*
    
variables:
- name: alias
  value: $(resources.triggeringAlias)

stages:
- stage: ScanImage
  jobs:
  - job: ScanImage
    pool:
      vmImage: 'ubuntu-16.04'
    steps:
    - script: echo $(alias)

    - task: Bash@3
      inputs:
        targetType: 'inline'
        script: |
          if [ "$(alias)" == "pipeline1" ]; then
            echo "##vso[task.setvariable variable=apiname]$(resources.pipeline.pipeline1.pipelineName)"
            echo "##vso[task.setvariable variable=dockertag]$(resources.pipeline.pipeline1.sourceCommit) | cut -c -7"
            echo "##vso[task.setvariable variable=helmpath]P02565Mallorca/pipeline1-api"
          elif [ "$(alias)" = "pipeline2" ]; then
            echo "##vso[task.setvariable variable=apiname]$(resources.pipeline.pipeline2.pipelineName)"
            echo "##vso[task.setvariable variable=dockertag]$(resources.pipeline.pipeline2.sourceCommit) | cut -c -7"
            echo "##vso[task.setvariable variable=helmpath]P02565Mallorca/pipeline2-api"
          fi

    - script: echo $(dockertag)
    - script: echo $(helmpath)
    - script: echo $(apiname)
 

Дополнительные сведения см. в разделе:Ресурсы: конвейеры.

Комментарии:

1. Я с удовольствием помогу вам.

2. Привет, Эдвард, я последовал, как вы упомянули, и настроил branchName как переменную, как показано ниже echo «##vso [task.setvariable variable=branchName] $ (resources.pipeline.pipeline2.sourceBranch)», но я не смог использовать эту переменную в условии для этапов as stage: — stage: DEV_DCR условие:и(successed(), или(eq(переменные $(branchName), ‘ссылки / главы / разработка’), eq(переменные $(branchName), ‘ссылки / главы / релиз’), содержит (переменные $(branchName), ‘ссылки / главы / исправление /’),содержит (переменные $(branchName), ‘ссылки / заголовки / исправление/’)))….. это дает ошибку. есть идеи, как мы можем это использовать

3. Вы должны использовать stageDependencies.stageName.jobName.outputs['stepName.variableName'] not variables$(branchName) in condition, см.: docs.microsoft.com/en-us/azure/devops/release-notes/2020 /… и docs.microsoft.com/en-us/azure/devops/pipelines/process /… для получения подробной информации. Кстати, пожалуйста, отправьте новый запрос, если у вас есть дополнительные вопросы с подробной информацией. Спасибо.

4. можно ли пометить выше конвейера с помощью $ (псевдоним), чтобы у меня был фильтр для списка релизов для каждого API??

5. или можно назвать конвейер примерно таким именем: $(псевдоним)