Рубрики
Uncategorized

Создайте Azure Tipelines для развертывания изображения Docker для Azure App Service

В этой статье подробно описывается, как контейнер бы приложение, создать службу приложений в Azure и настроить его на … Tagged с DevOps, Docker, Azure, App Service.

В этой статье подробно описывается, как контейнер бы приложение, создать службу приложений в Azure и настроить его, чтобы вытащить изображение Docker из реестра контейнеров Azure (ACR). То, как изображение Docker развертывается из нашего кода в ACR, является результатом того, что мы создаем конвейер развертывания с использованием Azure Tipelines.

Преимущество-вместо того, чтобы вручную нажимать на локально созданное изображение Docker к ACR после некоторых изменений кода, теперь у нас есть процесс автоматической непрерывной интеграции/непрерывного развертывания (CI/CD).

Рабочий процесс может быть описан следующим образом: мы пишем код на нашем компьютере DEV, строим и запускаем изображение Docker локально. Как только мы сделаем git толчок кода к git Repo, Azure Pipelines выполняет сборку на некоторой машине агента и развертывает изображение Docker в ACR. Поскольку служба приложений также уже была настроена для непрерывного развертывания, она автоматически вытянет изображение из ACR. По сути, у нас есть конвейер от кода до репо до Docker Image до ACR для службы приложений.

1) Начнем с написания приложения. Какое приложение написать не является центром этой статьи. Но чтобы иметь что-то, с чего можно начать, мы создадим приложение NextJS, используя NextJS, используя npx create-next-app Анкет Мы могли бы сделать с приложением ASP.NET Core, и все будет таким же. Итак, начнем:

npx create-next-app mysample
cd mysample
npm run build

2) Мы создадим изображение Docker для этого и запустим в локальном контейнере Docker. Для этого мы создадим Dockerfile и Docker-compose.yml файл.

Вот Dockerfile

FROM node:14 as BUILD_IMAGE
WORKDIR /var/www/app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN yarn build

# remove dev dependencies
RUN npm prune --production

FROM node:14
WORKDIR /var/www/app
COPY --from=BUILD_IMAGE /var/www/app/package.json ./package.json
COPY --from=BUILD_IMAGE /var/www/app/node_modules ./node_modules
COPY --from=BUILD_IMAGE /var/www/app/.next ./.next
COPY --from=BUILD_IMAGE /var/www/app/public ./public

EXPOSE 3000
CMD ["yarn", "start"]

А также Docker-compose.yml файл

version: '3.4'

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 80:3000
    env_file: .env
    command:
      sh -c 'yarn start'

3) Теперь мы можем запустить Docker локально с помощью команды

Docker-Compose Up-Build

Это должно работать, если вы укажите браузер на http://localhost (Это порт 80 не 3000)

4) Все следующие шаги, которые мы собираемся сделать, могут быть сделаны с пользовательским интерфейсом в Портал Azure , но мы будем использовать Azure CLI насколько это возможно. Также я назову свой Ресурсная группа и План обслуживания приложений как Myresourcegroup и Mylinuxplan соответственно. Если у вас уже есть ресурсная группа и план обслуживания приложений, вы можете продолжать использовать их. Или вы можете следовать следующему шагу и заменить именами по вашему выбору.

Давайте создадим группу ресурсов под названием MyresourceGroup

az group create -l westus -n MyResourceGroup

Теперь мы создаем план обслуживания приложений Linux под названием Mylinuxplan с 2 работниками

az appservice plan create -g MyResourceGroup -n MyLinuxPlan \
    --is-linux --number-of-workers 2 --sku S1

Чтобы создать группу ресурсов, обратитесь к этому Ссылка Анкет Чтобы создать план службы приложений, см. Это ссылка на сайт

5) Теперь мы создаем реестр контейнеров Azure под названием mysamplecr

az acr create --name mysampleacr --resource-group \
    MyResourceGroup --sku Basic --admin-enabled true

На данный момент у нас теперь есть ACR, но к нему не было натолкнуто изображение, и никакая служба приложений не была создана. Вот где мой подход начинает отличаться от того, что в документации Azure.

Это нормально, потому что мы не хотим толкать изображение Docker до ACR вручную. Вместо этого мы установим конвейер Azure сейчас.

6) Давайте перейдем к https://dev.azure.com , перейдите к Трубопровод Страница и создайте новый трубопровод, как показано на следующей картинке:

7) Затем укажите Где вы код? когда его подсказывают.

8) На странице Настройте свой трубопровод Прокрутите вниз и нажмите «Показать больше». Затем выберите Docker Build and Pulp a Image в реестр контейнеров Azure

9) Выберите свою подписку и Продолжить Анкет Вам может быть предложено снова войти в систему.

10) Теперь выберите свой реестр контейнеров. Если вы следите за этим примером, мы назовим его mysampleacr Анкет Для имени изображения давайте назовите это MySampleImg . Затем нажмите на Проверить и настроить

11) Мы должны получить сгенерированное Azure-Pipelines.yml Файл со содержимым, аналогичным тому, что ниже

# Docker
# Build and push an image to Azure Container Registry
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

resources:
- repo: self

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: 'b0...a4'
  imageRepository: 'mysampleimg'
  containerRegistry: 'mysampleacr.azurecr.io'
  dockerfilePath: '**/Dockerfile'
  tag: '$(Build.BuildId)'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

Нам нужно внести пару изменений, а затем мы можем Сохранить и запустить Анкет

В приведенном выше файле ищите строку Tag: '$ (build.buildid)' и добавьте линию под ней. Теперь он покажет

tag: '$(Build.BuildId)'
latestTag: 'latest'

В последних 2 строках файла изменить от

tags: |
  $(tag)

к

tags: |
  $(latestTag)

Полученное/модифицированное Azure-Pipelines.yml Файл должен теперь выглядеть как

# Docker
# Build and push an image to Azure Container Registry
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

resources:
- repo: self

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: 'b0...a4'
  imageRepository: 'mysampleimg'
  containerRegistry: 'mysampleacr.azurecr.io'
  dockerfilePath: '**/Dockerfile'
  tag: '$(Build.BuildId)'
  latestTag: 'latest'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(latestTag)

Теперь мы можем Сохраните и беги

12) Когда пробег заканчивается, мы можем проверить, что в ACR есть изображение, выполнив следующие команды (одна за другим)

az acr repository list -n mysampleacr

az acr repository show -n mysampleacr \
  --repository mysampleimg

az acr repository show -n mysampleacr  \
  --repository mysampleimg:latest

Для получения дополнительной помощи на AZ ACR Repository Команды, пожалуйста, обратитесь к https://docs.microsoft.com/en-us/cli/azure/acr/repository?view=azure-cli-latest#az_acr_repository_list

13) Теперь мы можем создать сервис приложений и сказать ей, чтобы он вытащил с последнего изображения MySampleImg: Последний от ACR mysampleacr Анкет

az webapp create --resource-group MyResourceGroup --plan MyLinuxPlan --name mysample --deployment-container-image-name mysampleacr.azurecr.io/mysampleimg:latest

14) Чтобы убедиться, что когда новое изображение выдвигается на ACR, служба приложений автоматически вытянет последнее изображение, перейдите к Портал Azure перейдите к клинке услуг приложений и убедитесь Непрерывное развертывание на.

Ссылки (немного трудно прочитать для меня, но это только мое мнение): https://docs.microsoft.com/en-us/azure/app-service/quickstart-nodejs?pivots=platform-linux

https://docs.microsoft.com/en-us/azure/architecture/example-scenario/apps/devops-dotnet-webapp

https://docs.microsoft.com/en-us/azure/developer/javascript/tutorial/deploy-nodejs-azure-app-service-with-visual-studio-code?tabs=bash

https://docs.microsoft.com/en-us/azure/app-service/quickstart-custom-container?tabs=node&pivots=container-linux

Оригинал: «https://dev.to/codeprototype/create-an-azure-pipelines-to-deploy-docker-image-for-azure-app-service-4f15»