Не удается получить выходную переменную задания развертывания для передачи другому заданию развертывания - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь использовать Azure DevOps для настройки кластера роя docker, со средой, содержащей 3 виртуальных машины RHEL7 с установленным Docker, и один из них настраивается в качестве хоста роя.

Вот файл yaml для конвейера:

jobs:
- deployment: MasterNode
  strategy:
    runOnce:
      deploy:
        steps:
        - bash: |
            SWARMTOKEN=$(docker swarm join-token manager -q)
            echo "##vso[task.setvariable variable=tokenswarm;isOutput=true]$SWARMTOKEN"
          name: setvar
        - script: echo $(setvar.tokenswarm)
          name: echovar
  environment:
    name: swarm
    resourceType: VirtualMachine
    tags: SwarmNodeMaster

- deployment: SwarmNode
  dependsOn: MasterNode
  variables:
    tokenvar: $[ dependencies.MasterNode.outputs['deploy.setvar.tokenswarm'] ]
  strategy:
    runOnce:
      deploy:
        steps:
        - bash: |
            echo $(tokenvar)
  environment: 
    name: swarm
    resourceType: VirtualMachine
    tags: SwarmNode 

Я зарегистрировал это на VSD https://developercommunity.visualstudio.com/content/problem/937451/unable-to-share-variable-from-one-deployment-job-t.html

Я попытался установить для второго задания развертывания значение обычная работа в соответствии с синтаксисом в https://docs.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-164-update#support -for-output-variable-in-a-deploy-job

jobs:
- deployment: masternode
  strategy:
    runOnce:
      deploy:
        steps:
        - script: | 
            SWARMTOKEN="Docker GUID"
            echo "##vso[task.setvariable variable=token;isOutput=true]$SWARMTOKEN"
          name: 'setvar'
        - script: echo $(setvar.token)
          name: echovar
  environment:
    name: swarm
    resourceType: VirtualMachine
    tags: SwarmNodeMaster

- job: 'swarmnode'
  dependsOn: 'masternode'
  variables:
    tokenvar: $[ dependencies.masternode.outputs['deploy.setvar.token'] ]
  steps:
  - script: echo $(tokenvar)
    name: echovar

Кажется, что бы я ни пытался, я не могу получить переменная для расширения на следующем шаге развертывания.

Заранее спасибо за любую помощь!

ОБНОВЛЕНИЕ: @Kontekst спасибо за то, что поделились своим рабочим yaml, используя его, мне удалось отследить его до определение среды для «главного» узла:

environment:
      name: swarm
      resourceType: VirtualMachine
      tags: SwarmNodeMaster

Главный узел Swarm имеет тег «SwarmNodeMaster» и является частью той же среды, что и две другие виртуальные машины, имеющие тег «SwarmNode», который является используется на втором шаге, если я изменю вышеупомянутое на jus t environment: 'swarm' Я могу передать переменную на следующий шаг, но снова перестает работать, если я пытаюсь нацелиться на главный узел ...

Вот yaml, который успешно передает переменную в следующее развертывание задание: https://hastebin.com/gudelokufi.bash

Моя основная проблема заключается в том, что мне нужно получить токен с хоста роя на узлы роя, но когда я пытаюсь передать переменную с шага развертывания, предназначается для узла роя, для задания развертывания, которое предназначается для узлов роя, переменная не может быть расширена во втором задании развертывания ...

Это то, что я хочу работать, но, кажется, нарушает выходную переменную: https://hastebin.com/yocepowopu.bash

1 Ответ

2 голосов
/ 06 марта 2020

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

stages:
- stage: MyStage
  jobs:
  - deployment: masterNode
    displayName: AnyDeploy
    pool:
      vmImage: 'ubuntu-latest'
    environment:
      name: swarm
      resourceType: virtualmachine
      tags: swarmnodemaster
    strategy:
      runOnce:
       deploy:
        steps:
        - task: Bash@3
          displayName: 'Setting output variable'
          inputs:
            targetType: 'inline'
            script: |
              token=Some_Value
              echo "##vso[task.setvariable variable=token;isOutput=true]$token"
              echo $token
          name: setvarStep
        - task: Bash@3
          inputs:
            targetType: 'inline'
            script: 'env | sort'

  - deployment: swarmNode
    dependsOn: masterNode
    pool:
      vmImage: 'ubuntu-latest'
    environment:
      name: swarm
      resourceType: virtualmachine
      tags: swarmnode
    variables:
      myToken: $[ dependencies.masterNode.outputs['masterNode_<resource name>_Deploy.setvarStep.token'] ]
    strategy:
      runOnce:
       deploy:
        steps:
        - task: Bash@3
          displayName: 'Checking if output variable was passed'
          inputs:
            targetType: 'inline'
            script: |
              echo My docker token = $(myToken)

Я не нашел способа ссылаться на имя задания как на переменную, так как значение меняется с каждым заданием, но системная переменная - "SYSTEM_JOBNAME"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...