Как сохранить защищенные файлы после завершения работы в конвейере Azure Devops? - PullRequest
1 голос
/ 11 июля 2019

В настоящее время я работаю над конвейерным скриптом для Azure Devops. Я хочу предоставить файл настроек maven в качестве защищенных файлов для конвейера. Проблема в том, что когда я определяю задание только для предоставления файла, файл больше не появляется при запуске следующего задания.

Я попытался определить задание с помощью задачи DownloadSecureFile и команды копирования, чтобы получить файл настроек. Но когда начинается следующее задание, файла больше нет, и поэтому его нельзя использовать. Я уже проверил это, используя pwd и ls в конвейере.

Это часть моего текущего файла YAML (который на самом деле работает):

some variables
...

trigger:
  branches:
    include:
    - stable
    - master

jobs:
- job: Latest_Release
  condition: eq(variables['Build.SourceBranchName'], 'master')
  steps:
  - task: DownloadSecureFile@1
    name: settingsxml
    displayName: Download maven settings xml
    inputs:
      secureFile: settings.xml
  - script: |
      cp $(settingsxml.secureFilePath) ./settings.xml
      docker login -u $(AzureRegistryUser) -p $(AzureRegistryPassword) $(AzureRegistryUrl)
      docker build -t $(AzureRegistryUrl)/$(projectName):$(projectVersionNumber-Latest) .
      docker push $(AzureRegistryUrl)/$(projectName):$(projectVersionNumber-Latest)

....
other jobs

Я хотел поместить задачу DownloadSecureFile и «cp $ (settingsxml.secureFilePath) ./settings.xml» в собственное задание, потому что есть больше заданий, которым нужен этот файл для других веток / выпусков, и я не хочу скопировать один и тот же код на все задания.

Это файл YAML, как я и хотел:

some variables
...

trigger:
  branches:
    include:
    - stable
    - master

jobs:
- job: provide_maven_settings
  # no condition because all branches need the file
  - task: DownloadSecureFile@1
    name: settingsxml
    displayName: Download maven settings xml
    inputs:
      secureFile: settings.xml
  - script: |
      cp $(settingsxml.secureFilePath) ./settings.xml
- job: Latest_Release
  condition: eq(variables['Build.SourceBranchName'], 'master')
  steps:
  - script: |
      docker login -u $(AzureRegistryUser) -p $(AzureRegistryPassword) $(AzureRegistryUrl)
      docker build -t $(AzureRegistryUrl)/$(projectName):$(projectVersionNumber-Latest) .
      docker push $(AzureRegistryUrl)/$(projectName):$(projectVersionNumber-Latest)

....
other jobs

В моем dockerfile файл настроек используется так:

FROM maven:3.6.1-jdk-8-alpine AS MAVEN_TOOL_CHAIN 
COPY pom.xml /tmp/
COPY src /tmp/src/
COPY settings.xml /root/.m2/ # can't find file when executing this
WORKDIR /tmp/
RUN mvn install

...

Ошибка возникает при запуске сборки Docker, поскольку не удается найти файл настроек. Это может случиться, когда я использую свой первый пример YAML. У меня есть ощущение, что это как-то связано с каждой работой, имеющей фазу «Оформить заказ», но я не уверен в этом.

1 Ответ

1 голос
/ 11 июля 2019

Каждое задание в DevOps Azure выполняется на различном агенте , поэтому при использовании размещенных агентов Microsoft и разделении конвейера на несколько заданий, если вы копируете защищенный файл в одно задание, выполняется второе задание в новом свежем агенте, который, конечно, не имеет файла.

Вы можете решить свою проблему, используя Self Hosted agent (затем скопируйте файл на свой компьютер, и второе задание будет запущено на том же компьютере).

Или вы можете загрузить файл в другое место (защищенное), чтобы загрузить его во втором задании (так почему бы не сделать это с самого начала ...).

...