有人可以为我的 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 的回答。