#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
Вы могли бы проверить ответ Кшиштофа Мадея.