Доступ к артефактам в общей папке Windows (домен) из контейнера Docker - PullRequest
1 голос
/ 18 февраля 2020

Итак ....

Мне было интересно, сможет ли кто-нибудь помочь мне в этом?

В основном я создал автономный docker контейнер для использования в качестве агента сборки (Azure DevOps)

Теперь я начал тестировать агент, и я возникли проблемы с возможностью публикации sh артефактов в месте назначения из-за того, что наша папка удаления находится на общей папке windows (присоединенный домен)

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

Мы используем локальные TFS Azure DevOps вместо Azure DevOps Services :(

TIA,

Обновление

В конце концов, Я смог решить эту проблему.

Что я сделал, чтобы решить эту проблему, так это то, что я создал учетную запись gMSA на контроллере домена, а затем создал файл credspe c на компьютере, на котором размещен контейнер docker, затем, наконец, я запустил контейнер с помощью следующей команды docker run --security-opt "credentialspec=file://<credspecfilename>.json" --hostname <hostname> -it <Image-name> PowerShell

Как только контейнер был запущен и запущен, я смог подтвердить доступность каталогов, выполнив следующую команду dir <server>\\<share> - Также мне пришлось сделать убедитесь, что только что созданная учетная запись gMSA имеет разрешения для общего ресурса.

Поэтому я продолжил присоединять контейнер к пулу агентов нашего сервера DevOps, а затем запустил тестовую сборку. Как и ожидалось, я смог получить / publi sh артефакты с нашего локального сервера, присоединенного к домену.

Еще раз спасибо, ребята, за помощь в решении этой проблемы.

1 Ответ

1 голос
/ 19 февраля 2020

Вы можете использовать Build.ArtifactStagingDirectory, так же как Даниэль , упомянутый в комментарии, опубликовать sh ваши артефакты сборки на сервере.

Build.ArtifactStagingDirectory

Локальный путь на агенте, в который копируются любые артефакты перед их отправкой в ​​место назначения. Например: c:\agent_work\1\a

Типичным способом использования этой папки является публикация sh ваших артефактов сборки с помощью копий файлов и задач сборки Publi sh артефактов.

Подробное описание шагов, с которыми можно ознакомиться в ответе Томаса Ф. Абрахама на этот вопрос: Как скопировать azure конвейерных артефактов в docker изображение, которое является образом выполнения Microsoft Dotnetcore

  1. Добавьте задачу Docker после публикации sh, настроенной на «Build»
  2. Установите для «Build Context» в задаче значение $ (Build.ArtifactStagingDirectory). Это root путь Docker, который будет использоваться для таких команд, как COPY в Dockerfile.
  3. Зафиксируйте Dockerfile в своем репозитории и задайте путь Dockerfile в задаче в соответствии с его местоположением

Установите Dockerfile следующим образом (я предполагаю. NET Core 2.2 здесь): FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "myAppNameHere.dll"] Поскольку вы установили Docker Контекст сборки в $ (Build.ArtifactStagingDirectory), где ваше приложение было После публикации команда COPY будет использовать ее как «текущий рабочий каталог». В переводе COPY «скопируйте все в $ (Build.ArtifactStagingDirectory) в папку / app внутри контейнера».

Это даст вам контейнер basi c Docker, который просто содержит ваш предварительно созданные и опубликованные файлы приложений.

Кроме того, вы также можете опубликовать sh эти артефакты в виде пакета Nuget. Для этого вы можете обратиться к этому блогу: Доступ к Azure Артефактам из контейнера docker в сборке Pipelines.

...