Где находятся артефакты после сборки, которые будут использоваться при выпуске? - PullRequest
1 голос
/ 11 октября 2019

Я новичок в Aure DevOps. Пытаясь создать конвейеры сборки и выпуска, есть одна вещь, которую я не понимаю:

Обычно каждый вид сборки в конечном итоге приводит к некоторому выводу, называемому артефактами.

При использовании DevOps Azure это выглядит каквсегда является конечной задачей копирования или публикации, необходимой для копирования созданного артефакта из A в B, поэтому задача выпуска может затем получить доступ к скомпилированным артефактам.

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

Или это уже происходит, и я просто что-то упускаю из учебниковЯ смотрел?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Причин так много.

Две простые причины:

  • Нет гарантии, что рабочая папка агента все еще содержит файлы. Агенты используются повторно от сборки к сборке и выпуска к выпуску, и для данной сборки или выпуска всегда будет использоваться одна и та же рабочая папка. Рабочая папка очищается между сборками.
  • Релизы могут работать на разных агентах. На разных машинах. В разных доменах. Или любая комбинация. Нет гарантии, что агент, на котором выполнялась сборка, доступен для агента, на котором запущен выпуск. Публикация артефакта дает гарантию: пока машина, на которой работает релиз, имеет возможность общаться с DevOps Azure (что является обязательным условием для работы агента в первую очередь), она может получать необходимые артефакты.
0 голосов
/ 14 октября 2019

Почему эти артефакты не доступны для конвейера выпуска прямо из того места, где они были построены?

Согласен с Дэниелом.

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

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

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

Кроме того, MS случайно назначен агенту, и мы не можем гарантировать, что один и тот же агент будет выделен и собран во время выпуска. pipe.

Это основная причина, по которой нам нужно копировать или публиковать артефакты.

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

Обновление:

Почему пользователь, конечно же, потрудился найти место для артефактоввручную? Я ожидал, что каждый конвейер сборки будет иметь личное пространство для хранения последних артефактов сборки. Пространство, в которое AzO DevOps автоматически копирует артефакты сборки. Мне кажется, что вещи должны быть скопированы вручную из A в B, а затем из B в C.

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

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

Конечно, если вы считаете, что ручное копирование является излишним, вы можете использовать параметр MSBuild /p:output=$(build.artifactstagingdirectory), чтобы установить выходные данные непосредственно для артефактов.

Если мне нужно что-то скопироватьот A до B в конвейере Build, что может помешать мне сразу же скопировать его в C? Тогда отдельный конвейер Release будет, ну, скорее, необязательным, если не избыточным.

Если вы находитесь в конвейере сборки, есть еще одна задача Загрузка артефактов сборки , которая можетскачать артефакты сборки.

Если вы находитесь в конвейере релиза, вам просто нужно выбрать артефакты сборки в качестве источника, конвейер релиза автоматически загрузит этот артефакт:

enter image description here

Проверьте этот документ для более подробной информации.

Надеюсь, это поможет.

...