Сохраняйте изменения в defaultWorkingDirectory на всех этапах в конвейере сборки Azure.

У меня есть файл 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: работает с редактируемым файлом.

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

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

An


person thatOneGuy    schedule 28.05.2020    source источник
comment
Привет, @thatOneGuy, есть ли какие-нибудь обновления по этой проблеме? Не стесняйтесь, дайте мне знать, если ответ может помочь. Просто напоминание об этом.   -  person Kevin Lu-MSFT    schedule 01.06.2020


Ответы (1)


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

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

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

Инициализировать задание

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

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

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

Согласно этот документ:

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

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

Обновление:

Поскольку эти два этапа выполняются на одном агенте, этап «извлечения» на этапе 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.

person Kevin Lu-MSFT    schedule 29.05.2020
comment
используют ли задания разные процессы так же, как этапы? Или смена места работы сохраняется до завершения этапа? - person thatOneGuy; 29.05.2020
comment
@thatOneGuy, я обновил ответ. Вы можете это проверить. Если у вас есть предложения, дайте мне знать - person Kevin Lu-MSFT; 29.05.2020