Azure DevOps Server – как узнать системные каталоги на другом сервере?

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

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

Это работает, если я жестко запрограммировал каталоги, например \\server1\DevOpsAgent\_work\1\b\, но у меня возникнет проблема, если каталог не равен «1» или если имя сервера изменится (я выбираю серверы только по требованиям агента).

Есть ли способ во время выполнения узнать, какие каталоги использует «другой» сервер?

Не нашел ответа ни в документации Microsoft, ни в Интернете.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TL;DR использует артефакты конвейера (или, как альтернатива, универсальные пакеты) вместо прямой копии файла.

... Мне нужны артефакты на одном сервере. Существует немало встроенных функций для борьбы с артефактами, но я бы предпочел вместо этого прямое копирование файла.

Честно говоря, я не понимаю, как использование прямого копирования файлов могло бы упростить ситуацию, особенно учитывая проблемы, с которыми вы уже столкнулись - использование требований к агентам, пути, которые могут (и, вероятно, будут) меняться, среди прочего.

Кроме того, вы пытаетесь изобрести велосипед, используя обходной путь для решения проблемы, которая уже давно была решена многими платформами CI/CD: публикация и использование артефактов между конвейерами.

Использование артефактов конвейера

В большинстве случаев использование артефактов конвейера довольно просто — конвейер публикации генерирует артефакты в папку, копирует эти файлы в промежуточный каталог (необязательно) и затем публикует эти артефакты:

# Generate artifacts into the $(Build.ArtifactStagingDirectory) folder
- task: VSBuild@1
  inputs:
    solution: '**/*.sln'
    msbuildArgs: 'p:DesktopBuildPackageLocation = "$(Build.ArtifactStagingDirectory)\WebApp.zip" ...
    platform: 'Any CPU'
    configuration: 'Release'

# Publish files from $(Build.ArtifactStagingDirectory) folder as artifacts
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: $(Build.ArtifactStagingDirectory)
    artifactName: WebApp

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

- task: DownloadPipelineArtifact@2
  inputs:
    artifact: WebApp
    targetPath: '$(System.DefaultWorkingDirectory)'

- task: AzureRmWebAppDeployment@4
  inputs:
    # other properties here
    packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'

вы абсолютно правы, использование встроенных функций для публикации артефактов значительно облегчает жизнь. Мы используем DevOps Server, а использование PublishBuildArtifacts@1 для сетевого пути к файлу упрощает копирование в сетевой каталог. Но как я могу опубликовать данные для другого агента на другом компьютере во время выполнения DevOps?

HaraldJ 09.07.2024 14:33

Вы не публикуете артефакты в другом агенте — вы публикуете артефакты в Azure DevOps или в общем файловом ресурсе, а затем в потребительском конвейере загружаете эти артефакты, как указано в первой ссылке моего ответа. Пожалуйста, внимательно прочитайте документацию.

Rui Jarimba 09.07.2024 14:39

Чтобы внести ясность: артефакты не привязаны к агенту сборки или серверу. Они будут опубликованы в Azure DevOps (в идеале) или в общей папке, доступной любому другому агенту сборки. Точно так же, как канал nuget или npm, где один конвейер может публиковать пакет, а другой конвейер может создавать приложение, используя тот же пакет, без знания каких-либо подробностей о конвейере или агенте, опубликовавшем этот пакет.

Rui Jarimba 09.07.2024 14:45
using PublishBuildArtifacts@1 to a network file path makes it very simple to copy to a network directory. But how can I publish to another agent on a different machine during a DevOps run? - не уверен, что понял последнее предложение - вы имеете в виду как скачать артефакты в другой сборке? Это зависит от того, как вы настроите свой конвейер. Пожалуйста, отредактируйте свой вопрос и покажите нам, как вы публикуете артефакты.
Rui Jarimba 09.07.2024 15:40

Другие вопросы по теме

Ошибка CVT1108 не может открыть RES....tmp для записи, периодически появляющаяся в конвейере DevOps
Как ограничить одновременное выполнение заданий конвейера в агенте Azure?
Задача внутри шаблона не может прочитать файл конфигурации, сохраненный в том же репозитории
SonarQubePublish@6 завершается с ошибкой при запуске с другого этапа, чем SonarQubePrepare, и сообщает: «Переменные отсутствуют»
Развертывание службы приложений Azure продолжает создавать подпапку после развертывания
Azure разрабатывает Android. Артефакты сборки не найдены
Один пайплайн для нескольких репозиториев, разные шаблоны для разных проектов
Развертывание Azure DevOps SQL DacPac не работает с подключением службы
Azure Devops Pipeline, покажите ссылку на отчет Sonar на сводной странице запуска конвейера
Я хочу опубликовать zip-файл, а затем загрузить его непосредственно из канала Azure Artifact. Какая задача мне поможет в этом?

Похожие вопросы

Ошибка CVT1108 не может открыть RES....tmp для записи, периодически появляющаяся в конвейере DevOps
Как ограничить одновременное выполнение заданий конвейера в агенте Azure?
Отменить и удалить историю коммитов Azure DevOps?
Получение TaskCanceledException при использовании проверки подлинности без пароля с помощью функций Azure и Entity Framework с SQL Server
Задача внутри шаблона не может прочитать файл конфигурации, сохраненный в том же репозитории
SonarQubePublish@6 завершается с ошибкой при запуске с другого этапа, чем SonarQubePrepare, и сообщает: «Переменные отсутствуют»
Зафиксировав конец одного и того же файла, объедините оба изменения без конфликтов
Развертывание службы приложений Azure продолжает создавать подпапку после развертывания
Azure разрабатывает Android. Артефакты сборки не найдены
Один пайплайн для нескольких репозиториев, разные шаблоны для разных проектов