Azure DevOps .NET Core CI/CD

2019/11/25 26

Azure DevOps

Azure DevOps 的前身是 VSTS(Visual Studio Team Service),如果你对 VSTS 的名称感到生疏,那么或许你对 TFS 并不陌生,很多 .NET 资深工程师应该使用过 TFS 管理代码,它们就是现在的 Azure DevOps 的前身,微软改名部终于做了一件正确的事情。

通过新的命名,我们不难发现:

注册环节不多介绍,如需注册请点击 https://dev.azure.com/

持续集成 CI

点击 New project 按钮,新建一个项目

创建项目

填写表单,建议跟你的 github 仓储保持一致

填写表单

为你的项目创建 Pipelines

创建 Pipelines

选择你的代码,这里以 github 为例

创建 Pipelines

选择你的 github 仓储,按照提示一直下一步即可

链接github

……省略无聊的下一步

关联好 github repository 后,Azure pipelines 会为你的仓储创建一个 azure-pipelines.yml 的配置文件,在右侧,有 Tasks Helper 帮助你快速创建对应的命令。此博客的配置如下:

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

steps:
  - script: |
      dotnet build HappyDog.WebUI.Test -c $(buildConfiguration)
  - task: PublishPipelineArtifact@1
    inputs:
      targetPath: '$(Pipeline.Workspace)'
      artifact: 'doghappy-web'
      publishLocation: 'pipeline'

其中, trigger 表示触发 CI 的分支。除了 build HappyDog.WebUI.Test ,这个配置文件还会将编译成功后的文件放到 Artifacts 中,可以被后续 Pipelines 中获取到。

当你配置完后,会为你的 github 创建一个 commit,点击左侧 Piepelines Builds,你将会看到一些 github 的 commit 信息。之后 master 分支的新 commit 都会触发 CI。仅当 CI 成功后,才会触发后续的 Piepelines 流程。

History Commits

持续部署 CD

持续部署往往是个谨慎的事情,而且 CD 的流程可能有很多,比如本站使用了最基本的流程:

  1. Unit tests
  2. Docker images & tag
  3. Deploy

如果你的代码没有单元测试,那么可以省略第一步。

创建 Release,添加 Artifacts 确保与你之前的 CI 相关联,点击如图中的按钮,你可以对 CD Trigger 做一些修改。

修改 Trigger

添加 Stages 命名为 Unit Tests,点击 Agent job 将 Agent Specification 改成你需要的,这里以 ubuntu-18.04 为例,并配置 Artifact download,将 CI 工程后的 build 文件下载过来。

配置 Agent job

点击 Agent job 栏右侧的+加号,选择 .NET Core,配置需要运行的单元测试。

配置需要运行的单元测试

创建一个新的 Stages,将 Agent job 改成 ubuntu-18.04,为 Agent 添加 docker task,配置如图。

Docker task

创建一个新的 Stages,将 Agent job 改成 ubuntu-18.04,为 Agent 添加 ssh task,配置如图。

Docker task

服务器上的 update shell 如下:

#!/bin/bash
/usr/local/bin/docker-compose -f /usr/local/docker/docker-compose-doghappy.yml stop doghappy
/usr/local/bin/docker-compose -f /usr/local/docker/docker-compose-doghappy.yml rm -f
/usr/local/bin/docker-compose -f /usr/local/docker/docker-compose-doghappy.yml pull
/usr/local/bin/docker-compose -f /usr/local/docker/docker-compose-doghappy.yml up -d
/usr/bin/docker image prune -f

最终 Pipelines 流程如图: 最终 Pipelines 流程

到此,master 上有新提交后,Azure DevOps 将会使用 github hook 自动进行 持续集成 -> 运行单元测试 -> 构建 Docker 镜像 -> 部署。

评论