Может кто-нибудь посоветовать мне хорошую практику для моего развертывания Azure DevOps

#spring-boot #azure-devops #continuous-integration

#весенняя загрузка #azure-devops #непрерывная интеграция

Вопрос:

Добрый день,

Я создаю конвейер CI в Azure DevOps, который является для меня новым. Мне удалось создать добавить задачи сборки по шагам, которые я хотел. Хотя все еще есть некоторые проблемы. Я объясняю эти проблемы здесь.

Проблема # 1

Я неправильно понял значение последнего тега. Я думал, что он автоматически извлекет последнюю / новейшую версию из указанного Docker Hub.

В настоящее время моя сборка Docker выглядит следующим образом:

 - task: Docker@2
  displayName: 'Build Docker image'
  inputs:
    repository: '<my_repo_name>'
    command: 'build'
    Dockerfile: '**/Dockerfile'
    tags: $(Build.BuildId)
 

Этот конвейерный YAML предназначен для развертывания на моем производственном VPS, который я добавил в разделе Конвейеры -> Среды.
Вот этап развертывания конвейера:

 - deployment: VMDeploy
  displayName: 'Deployment to VPS'
  pool:
    vmImage: 'Ubuntu-20.04'
  environment:
   name: CDB_VPS
   resourceName: <my_resource_name>
   resourceType: VirtualMachine
  strategy:
    runOnce:
      deploy:
        steps:
        - script: docker pull <my_repo_name>:latest
        - script: docker stop $(docker ps -aq)
        - script: docker run -p 8085:8085 <my_repo_name>:latest
 

Проблема # 2
Я не получаю никаких ошибок в конвейере во время его запуска. Но мне интересно, является ли это хорошей практикой. Используя это, он всегда будет запускать последнюю версию. Также я не думаю, что это то, как я должен развертывать.

Проблема # 3 Блок развертывания выполняется до завершения сборки и push-блока. Чтобы предоставить дополнительную информацию, я опубликую весь файл YAML здесь.

 trigger:
- master
jobs:
- job: Build
  displayName: 'Build Maven project and Docker build'
  steps:
    - task: replacetokens@3
      displayName: 'Replace tokens'
      inputs:
        targetFiles: |
          **/application.properties
    - task: Maven@3
      displayName: 'Build Maven project'
      inputs:
        mavenPomFile: 'pom.xml'
        goals: 'package'
        jdkVersionOption: 11
        publishJUnitResults: true
    - task: Docker@2
      displayName: 'Build Docker image'
      inputs:
        repository: '<my_repo_name>'
        command: 'build'
        Dockerfile: '**/Dockerfile'
        tags: $(Build.BuildId)
    - task: Docker@2
      displayName: 'Push Docker image to Docker hub'
      inputs:
        containerRegistry: 'Dockerhub connection'
        repository: '<my_repo_name>'
        command: 'push'
        Dockerfile: '**/Dockerfile'
        tags: $(Build.BuildId)
- deployment: VMDeploy
  displayName: 'Deployment to VPS'
  pool:
    vmImage: 'Ubuntu-20.04'
  environment:
   name: CDB_VPS
   resourceName: <my_vps_resource_name>
   resourceType: VirtualMachine
  strategy:
    runOnce:
      deploy:
        steps:
        - script: docker pull <my_repo_name>:latest
        - script: docker stop $(docker ps -aq)
        - script: docker run -p 8085:8085 <my_repo_name>:latest
 

Комментарии:

1. Просто проверяю, не блокирует ли вас эта проблема сейчас? Есть какие-либо обновления для этой проблемы?

Ответ №1:

Если вы хотите сделать это на конкретном изображении, пожалуйста, замените latest на $(Build.BuildId) .

         steps:
        - script: docker pull <my_repo_name>:$(Build.BuildId)
        - script: docker stop $(docker ps -aq)
        - script: docker run -p 8085:8085 <my_repo_name>:$(Build.BuildId)
 

И если вы хотите VMDeploy , чтобы ожидание Build добавлялось, пожалуйста, добавьте dependsOn

 - deployment: VMDeploy
  depenedsOn: Build
 

Ответ №2:

Проблема # 1

Тег в задаче docker означает: список тегов в отдельных строках. Эти теги используются в командах build, push и buildAndPush. Мы могли бы увидеть тег в окне настройки, например, как показано ниже.

введите описание изображения здесь

Проблема # 2

Мы могли бы проверить последнее развертывание в журнале конвейера docker и Azure DevOps, чтобы убедиться, что оно всегда выполняется с последней версией

Проблема # 3

Вы могли бы проверить ответ Кшиштофа Мадея.