Как создать docker образ и pu sh в azure реестр контейнеров - PullRequest
0 голосов
/ 15 февраля 2020

Я использую Azure Конвейеры и успешно построил конвейер для построения и развертывания образа docker в сервисах приложения azure.

Теперь я пытаюсь выяснить, как построить docker изображение в конвейере, а затем опубликовать sh в каталоге промежуточных артефактов, чтобы я мог добавить sh в контейнер azure реестр вместо. Я просмотрел весь Google, чтобы увидеть, как это сделать без удачи, это будет вопрос из трех частей.

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

Removing intermediate container 543fb86650c4
 ---> 3ccb8c3a555e
Step 10/28 : RUN del -f "./NuGet.Config"
 ---> Running in c2ba7a3266a4
C:\src\NuGet.Config
Access is denied.

Сборка образа продолжается с там и успешно, но я пытаюсь опубликовать sh артефакт, я хочу взять построенный образ и передать его в конвейер выпуска, который будет отправлен в azure реестр контейнера. Артефакт publi sh не работает, потому что он не может найти изображение, и я действительно не уверен, как его найти?

##[warning]Directory 'd:\a\1\a' is empty. Nothing will be added to build artifact 'Email'.

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

Вопрос 1: Как я могу удалить файл в контейнере в задаче конвейера?

Вопрос 2: Как мне поместить sh docker изображение в контейнер Azure реестр вместо службы приложений Azure?

Я использую пользовательский интерфейс для настройки своего конвейера, и у меня нет полного файла yaml для общего доступа, но вот параметр yaml из представления:

pool:
  name: Azure Pipelines
variables:
  Parameters.ArtifactName: 'Email'

steps:
- task: Docker@2
  displayName: 'Build an image'
  inputs:
    containerRegistry: 'Azure Container'
    repository: email
    command: build
    Dockerfile: Services/Email/Email/Dockerfile
    buildContext: Services/Email
    tags: latest
    arguments: '-o $(build.artifactstagingdirectory)'

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
    ArtifactName: '$(Parameters.ArtifactName)'

Вопрос 3: Как только я получу файл для публикации sh в каталоге промежуточных артефактов, как я получу к нему доступ к pu sh изображению в реестре контейнера?

ОБНОВЛЕНИЕ, ЧТОБЫ ВКЛЮЧИТЬ DOCKERFILE

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1809 AS build
WORKDIR /src
COPY ["Email/Email.csproj", "Email/"]
COPY ./NuGet.Config ./
RUN dotnet restore "Email/Email.csproj" --configfile ./NuGet.Config
RUN del "./NuGet.Config"
COPY . .
WORKDIR "/src/Email"
RUN dotnet build "Email.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Email.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Email.dll"]

1 Ответ

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

Как удалить файл из задачи конвейера?

Вы можете использовать задачу Удалить файлы для удаления файлов или папок из рабочий каталог агента. Для приведенного ниже примера.

 - task: DeleteFiles@1
   displayName: 'Delete files'
   inputs:
     SourceFolder: '$(Build.SourcesDirectory)'
     Contents: NuGet.Config

Команды в dockerfile выполняются в контейнерах, команда delete files не может удалить файлы на локальном диске. Для удаления файлов в контейнере вы можете проверить методы, обсуждаемые в этой теме .

Обновление:

2, Как мне pu sh the docker Создание образа для конвейера выпуска?

Вы можете запускать все команды docker в задаче powershell. Таким образом, вы можете создать свой docker образ в задаче powershell и использовать команду docker image save, чтобы сохранить его на месте. Затем опубликуйте sh, чтобы использовать задачу PublishBuildArtifacts. Таким образом, вам не нужно использовать docker tasks

Пожалуйста, проверьте приведенный ниже пример:

- powershell: |
   docker build . -t python/test:tag1
   docker image save python/test:tag1 -o $(Build.ArtifactStagingDirectory)/imagetest.tar

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'

В приведенной выше задаче powershell. Сначала я использовал команду docker build для создания изображения и пометил его python/test:tag1, затем я использовал docker image save, чтобы сохранить изображение в $(Build.ArtifactStagingDirectory)/imagetest.tar. Тогда я могу опубликовать sh, используя задачу PublishBuildArtifacts.

Обновление:

Как удалить файл в контейнере в задаче конвейера.

Вы можете указать Администратора для удаления файлов внутри контейнер для исправления ошибки «отказано в доступе». Добавьте USER Administrator в ваш докер-файл до RUN del command. Проверьте ниже пример:

USER Administrator
RUN del remove.txt

Надеюсь, что выше помогает!

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