Сохранять изменения в defaultWorkingDirectory на всех этапах сборки Azure конвейера - PullRequest
0 голосов
/ 28 мая 2020

У меня есть файл YAML, который похож на следующий:

stages: 
  - stage: A
    pool:
        vmImage: 'windows-2019'  
    jobs:
    - job: a
      steps:
        - task: PowerShell@2
          inputs:
            targetType: 'inline'
            script: |              
             #edits file "$(System.DefaultWorkingDirectory)/myfolder/myfile.json"

  - stage: B
    dependsOn: A
    pool:
        vmImage: 'windows-2019'  
    jobs:
      - job: b
        steps:
        - task: PowerShell@2
          inputs:
            targetType: 'inline'
            script: |              
             #uses file "$(System.DefaultWorkingDirectory)/myfolder/myfile.json"

Я разделил конвейер на два этапа; A: редактирует файл в репозитории, а B: работает с отредактированным файлом.

Моя проблема в том, что файлы, кажется, сбрасываются между этапами. Есть ли способ сохранить изменения на всех этапах, а не сбросить их?

Я не хочу публиковать sh артефакты и т. Д., Как на этапе b, хотя и не в YAML выше, я Я запускаю несколько файлов сценариев PowerShell, которые содержат жестко заданные пути к файлам, и было бы просто беспорядком перезаписывать пути к файлам, чтобы они указывали на каталог артефактов перед запуском этапа.

An

1 Ответ

1 голос
/ 29 мая 2020

Основываясь на моем тесте, причиной этой проблемы является то, что два этапа выполняются на разных машинах с агентом.

Например: Этап A -> Имя машины агента: 'fv-az146', этап B -> Имя машины агента: 'fv-az151'

Вы можете проверить информацию об агенте в Журнале сборки -> Инициализировать задание .

Initialize job

Есть ли способ сохранить изменения на всех этапах вместо их сброса?

Поскольку вы не хотите публиковать sh артефакты, вы можете попробовать использовать Самостоятельные агенты для запуска двух этапов.

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

Согласно this do c:

Ключевое слово requires поддерживается частными пулами.

Мы не смогли указать Speci c «Возможности агента» в агентах, размещенных на сервере Microsoft. Таким образом, мы не могли гарантировать, что два этапа могут выполняться на одном и том же агенте

Обновление:

Поскольку два этапа выполняются на одном и том же агенте, "check out" "шаг на этапе B может переопределить файлы на этапе A.

Таким образом, вам также необходимо добавить - checkout: none на этапе B.

Вот обновленный шаблон Yaml:

stages:      
 - stage: A
    pool:
     name: Pool name
     demands:
     - Agent.Name -equals agentname1
    jobs:
    - job: a
      steps:
        - task: PowerShell@2
          ...

  - stage: B
    dependsOn: A
    pool:
     name: Pool name
     demands:
     - Agent.Name -equals agentname1
    jobs:
      - job: b
        steps:
        - checkout: none
        - task: PowerShell@2
        ...

Общий рабочий процесс : Этап A редактирует файлы и сохраняет их в $ (System.DefaultWorkingDirectory).

Тогда этап B может напрямую использовать файлы в $ (System.DefaultWorkingDirectory).

Файлы в $ (System.DefaultWorkingDirectory) сохранят изменения в этапах A и B.

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