有人可以为我的 Azure DevOps 部署提供一个好的实践建议吗
Can someone advise me a good practice for my Azure DevOps deployment
下午好,
我正在 Azure DevOps 中构建一个 CI 管道,这对我来说是一个新领域。我设法在我想要的步骤中创建添加构建任务。虽然还有一些问题。我在这里解释这些问题。
第 1 期
我误解了latest标签的意思。我以为它会自动从指定的 Docker Hub 中提取 latest/newest 版本。
目前我的 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 期
部署块在构建和推送块完成之前执行。为了提供额外的信息,我将 post 整个 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
如果您想在特定图片上制作此图片,请将 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
Issue #1
docker任务中的标签意思是:分行的标签列表。这些标签用于 build、push 和 buildAndPush 命令。我们可以在docker中看到标签,如下图
Issue #2
我们可以检查 docker 和 Azure DevOps 管道日志中的最新部署,以确保它始终是 运行 最新版本
Issue #3
您可以查看 Krzysztof Madej 的回答。
下午好,
我正在 Azure DevOps 中构建一个 CI 管道,这对我来说是一个新领域。我设法在我想要的步骤中创建添加构建任务。虽然还有一些问题。我在这里解释这些问题。
第 1 期
我误解了latest标签的意思。我以为它会自动从指定的 Docker Hub 中提取 latest/newest 版本。
目前我的 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 期 部署块在构建和推送块完成之前执行。为了提供额外的信息,我将 post 整个 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
如果您想在特定图片上制作此图片,请将 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
Issue #1
docker任务中的标签意思是:分行的标签列表。这些标签用于 build、push 和 buildAndPush 命令。我们可以在docker中看到标签,如下图
Issue #2
我们可以检查 docker 和 Azure DevOps 管道日志中的最新部署,以确保它始终是 运行 最新版本
Issue #3
您可以查看 Krzysztof Madej 的回答。