Ссылка на переменные релиза в azurepipelines.yml - PullRequest
0 голосов
/ 30 января 2020

В настоящее время я нахожусь в процессе преобразования моих конвейеров из classi c в azurepipelines.yml, и у меня возникла проблема с попыткой найти правильный синтаксис для ссылки на переменные выпуска на шаге bash.

Существующий код в bash задании

namebuilder=$(RELEASE.ENVIRONMENTNAME)-$(RELEASE.RELEASEID)

выведет следующее

dev-2049

, однако при преобразовании в мой новый файл конвейера приведенный выше код выдаст следующая ошибка

/home/vsts/work/_temp/ac39e1d7-11bd-4c32-9b1b-1520dae11c5a.sh: line 1: RELEASE.ENVIRONMENTNAME: command not found
/home/vsts/work/_temp/ac39e1d7-11bd-4c32-9b1b-1520dae11c5a.sh: line 1: RELEASE.RELEASEID: command not found

[извлечено из pipe.yml]

- bash: |
            namebuilder=$(RELEASE.ENVIRONMENTNAME)-$(RELEASE.RELEASEID)

Я даже создал шаг, пробуя несколько разных подходов без особой удачи

   steps:
    - bash: |
        echo This multiline script always runs in Bash.
        echo Even on Windows machines!
        echo '$(release.environmentname)'
        echo $(release.environmentname)
        echo '$(RELEASE.ENVIRONMENTNAME)'
        echo $(RELEASE.ENVIRONMENTNAME)

производит

This multiline script always runs in Bash.
Even on Windows machines!
$(release.environmentname)

$(RELEASE.ENVIRONMENTNAME)
/home/vsts/work/_temp/260dd504-a42d-45d6-bb1b-bf1f4b015cf8.sh: line 4: release.environmentname: command not found
/home/vsts/work/_temp/260dd504-a42d-45d6-bb1b-bf1f4b015cf8.sh: line 6: RELEASE.ENVIRONMENTNAME: command not found

Возможно ли также (в более чистом подходе) определить ее как переменную конвейера и ссылку на глобальную область, как показано ниже?

variables:
  namebuilder: '$(release.environmentname)-$(release.releaseid)'
stages:
 - stage: Deploy
   displayName: deploy infra
   jobs:
     - job: deploy_infra
       displayName: deploy infra
       continueOnError: true
       workspace:
        clean: outputs
       steps:
        - bash: |
            echo This multiline script always runs in Bash.
            echo Even on Windows machines!
            echo '$(namebuilder)'

tia

1 Ответ

2 голосов
/ 30 января 2020

Не похоже, что release.environment или какие-либо переменные релиза доступны для многоступенчатых конвейеров. Вы можете использовать новую концепцию среды , и в этот момент будет доступно environment.name . Я думаю, что вы, вероятно, наберете go с $(environment.name)-$(build.buildid) для того, что вам нужно.

Так что я не уверен, что конвертируемые вами выпуски конвейеров разворачиваются, чтобы сказать службу приложения, или виртуальной машине, или просто с помощью размещенного агента опубликовать sh что-то еще? Отказ от ответственности Я не использовал концепцию окружающей среды широко, но только для чтения и ограниченного тестирования. Это все новое!

Итак, для развертывания на виртуальных машинах Вы можете настроить ресурс виртуальной машины в среде. Эта концепция имеет ряд параллелей с агентами групп развертывания classi c . Вы регистрируете агента на целевой машине. Оттуда ваши шаги конвейера могут выполняться в контексте этой машины, и вы получаете дополнительный набор переменных среды.

enter image description here

В приведенном ниже примере конвейера выводятся любые переменные среды из контекста выполняются шаги, а также выводятся $(environment.name)-$(build.buildid)

  • Обычное задание в размещенном конвейере

enter image description here

  • Развертывание в среде

enter image description here

  • Развертывание в среде с ресурсом виртуальной машины

enter image description here

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  namebuilder: '$(environment.name)-$(build.buildid)'

jobs:
- job: NormalJobInHostedPipeline
  steps:
  - task: PowerShell@2
    name: EnvironmentVariables
    inputs:
      targetType: 'inline'
      script: 'gci env:* | sort-object name'
  - bash: |
        echo This multiline script always runs in Bash.
        echo Even on Windows machines!
        echo '$(namebuilder)'

  # track deployments on the environment
- deployment: DeploymentHostedContext
  displayName: Runs in Hosted Pool
  pool:
    vmImage: 'Ubuntu-16.04'
  # auto creates an environment if it doesn't exist
  environment: 'Dev'
  strategy:
    runOnce:
      deploy:
        steps:
        - task: PowerShell@2
          name: EnvironmentVariables
          inputs:
            targetType: 'inline'
            script: 'gci env:* | sort-object name'
        - bash: |
            echo This multiline script always runs in Bash.
            echo Even on Windows machines!
            echo '$(namebuilder)'

# Similar to Deployment Group Agent need to register them -stage will fail if resource does not exist
# https://docs.microsoft.com/en-us/azure/devops/pipelines/process/environments-virtual-machines?view=azure-devops
- deployment: DeploymentVirtualMachineContext
  displayName: Run On Virtual Machine Agent
  environment:
    name: DevVM
    resourceType: VirtualMachine
  strategy:                 
    runOnce:
      deploy:
        steps:
        - task: PowerShell@2
          name: EnvironmentVariables
          inputs:
            targetType: 'inline'
            script: 'gci env:* | sort-object name'
        - task: PowerShell@2
          name: VariableName
          inputs:
            targetType: 'inline'
            script: 'echo $(namebuilder)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...