上一次我们讲了使用Azure DevOps Pipeline实现.Net Core程序的CI。这次我们来演示下如何使用Azure DevOps实现.Net Core程序的CD。

实现本次目标我们除了Azure DevOps外还需要:

  1. 一台安装了Docker的主机
  2. 一个 Docker Hub 账号

上一次我们的CI实现了:

发布>编译>单元测试

这次我们要实现剩下的几个步骤:

生成镜像>推送镜像>部署

创建Docker镜像仓库

我们生成的镜像需要有个存放的地方。各大云厂商其实都有这种服务,这次直接使用Docker Hub提供的公共仓库服务。



创建一个仓库名叫:az_devop_test。

创建Dockerfile

我们的代码创建为镜像需要一个Dockerfile来描述如何构建这个镜像。在项目根目录下新建一个文件命名为Dockerfile注意不带任何后缀名。以下为Dockerfile的内容:

  FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build
WORKDIR /app
COPY /. /app
RUN dotnet restore
WORKDIR /app/devops_test
RUN dotnet publish -o ./out -c Release
EXPOSE 5000
ENTRYPOINT ["dotnet", "out/devops_test.dll"]

配置Servic Connections

选择ProjectSetting菜单,选择Service connections。Service connections用来存储跟外部服务相关的账号密码等信息,这里我们需要配置2个service。

  1. Docker Hub的信息
  2. 主机SSH的信息

配置Docker Registry service

我们的pipeline需要给Docker hub推送镜像,所以需要一些必要的信息,比如账号密码等信息。



点击"New Service"找到Docker Register项目点击下一步



选择DockerHub,填写对应的账号密码

配置SSH service

我们的pipeline在完成镜像推送后需要通过SSH登录到主机运行命令把新的镜像跑起来。



填写主机IP端口等信息。

修改pipeline

上次我们的pipeline已经定义好了CI的步骤,这次需要在上次的基础上继续完善CD的功能。

BuildAndPush Task

找到上次的pipeline选择编辑功能,在右边的Task列表里找到DockerTask,点击出现配置界面



在Container register里选择前面在service connections配置的docker-hub服务。

repository填写我们在docker hub上新建的仓库:kklldog/az_devop_test 。注意:仓库名称要把用户名写全了不然推不上去。

tags填写:latest 。

command:选择buildAndPush 。build跟push本是两步操作,这里直接合并为一步。

SSH Task

添加完BuildAndPush Task后同样的方法再次添加SSH Task。



SSH service connection里选择前面我们配置好的ssh service。

Run 这里选择Commands。

Commands 填写需要执行的命令:

docker rm -f az_devop_test
docker rmi -f kklldog/az_devop_test
docker pull kklldog/az_devop_test
docker run -d -p 5000:5000 --name az_devop_test kklldog/az_devop_test

简单解释下这个命令:

删除运行的容器;删除镜像;拉取最新的镜像;使用新的镜像运行一个容器。

完整的pipeline

到此我们的pipeline已经配置好了,以下是完整的pipeline.yml代码。

# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core trigger:
- master pool:
vmImage: 'ubuntu-18.04' variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release' steps:
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)' - task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: Docker@2
inputs:
containerRegistry: 'docker-hub'
repository: 'kklldog/az_devop_test'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
tags: latest
- task: SSH@0
inputs:
sshEndpoint: 'azvm-ssh'
runOptions: 'commands'
commands: |
docker rm -f az_devop_test
docker rmi -f kklldog/az_devop_test
docker pull kklldog/az_devop_test
docker run -d -p 5000:5000 --name az_devop_test kklldog/az_devop_test
readyTimeout: '20000'

运行一下

手动运行一个这个pipeline,点击pipeline可以看到实时的日志,等到最后可以看到每一步都成功了,说明我们的pipeline配置成功了。



访问一下容器对应的端口,我们的网站已经可以访问了。修改一下代码,然后提交,每次都会自动部署最新的代码到主机。

总结

以上通过2篇文章简单的介绍了Azure DevOps Pipeline如何实现CICD功能。Azure DevOps Pipeline给我的感觉是比较易用的,配置yml其实都是图形化的上手难度会比较小。另外它跟Github有深入的集成,可以使用Github的账号直接登录。况且它还是个免费服务,大家可以试试。

关注公众号一起玩转技术

使用Azure DevOps Pipeline实现.Net Core程序的CD的更多相关文章

  1. 使用Azure DevOps Pipeline实现.Net Core程序的CI

    上次介绍了Azure Application Insights,实现了.net core程序的监控功能.这次让我们来看看Azure DevOps Pipeline功能.Azure DevOps Pip ...

  2. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  3. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...

  4. Azure DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR

    一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...

  5. Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布

    一,引言 Azure Pipeline 管道是一个自动化过程:但是往往我们由于某种原因,需要在多个阶段之前获得批准之后再继续下一步流程,所以我们可以向Azure Pipeline 管道添加审批!批准流 ...

  6. Azure DevOps(二)利用Azure DevOps Pipeline 构建基础设施资源

    一,引言 上一篇文章记录了利用 Azure DevOps 跨云进行构建 Docker images,并且将构建好的 Docker Images 推送到 AWS 的 ECR 中.今天我们继续讲解 Azu ...

  7. Azure Terraform(十一)Azure DevOps Pipeline 内的动态临时变量的使用

    思路浅析 在我们分析的 Azure Terraform 系列文中有介绍到关于 Terraform 的状态文件远程存储的问题,我们在  Azure DevOps Pipeline 的 Task Job ...

  8. Azure App Service(一)利用Azure DevOps Pipeline 构建镜像,部署应用程序

    一,引言 起因是前两天项目上做测试,需要我把写好的基于.NET 5 的 Web 测试程序作成 Docker 镜像.当我在本地验证完功能后,准备利用 Docker 构建应用程序镜像的时候,发现系统不支持 ...

  9. 【Azure DevOps系列】Azure DevOps构建并发布Nuget程序包

    在Azure DevOps中,管道可以用来构建解决方案,O(∩_∩)O哈哈~快万能了,本章主要介绍如何创建Nuget包并且将其发布到Nuget服务器的过程. 前面我创建了一个非常简单的类库,这边我不做 ...

随机推荐

  1. Java Redis系列3(Jedis的使用+jedis连接池技术)

    Jedis的使用 什么是Jedis? 一款Java操作redis数据库的工具 使用步骤 1.下载redis所需的java包 2.使用步骤 import org.junit.Test; public c ...

  2. 密码学系列——消息摘要(c#代码实操)

    前言 简介: 消息摘要(Message Digest)又称为数字摘要(Digital Digest) 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生 使 ...

  3. C#设计模式之15-解释器模式

    解释器模式(Interpreter Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/415 访问. 解释 ...

  4. 2、java数据类型转换

    当数据类型不一样时,将会发生数据类型转换. 1.自动类型转换(隐式) 1. 特点:代码不需要进行特殊处理,自动完成. 2. 规则:数据范围从小到大. System.out.println(1024); ...

  5. python设计模式之原型模式

    python设计模式之原型模式 ​ 对于原型模式而言,其中最主要的部分就是关于一个对象的复制,其中就包含两个方面:1.浅复制:2.深复制.具体的区别请看我相关的随笔.这里简略的说明一下,浅复制就等于对 ...

  6. 教你如何使用ES6的Promise对象

    教你如何使用ES6的Promise对象 Promise对象,ES6新增的一个全新特性,这个是 ES6中非常重要的一个对象 Promise的设计初衷 首先,我们先一起了解一下,为什么要设计出这么一个玩意 ...

  7. docker入门3-docker swarm

    swarm介绍 想要将应用部署在一个集群并运行在多台机器上? 通过将多台机器链接到"Dockerized"集群以实现应用程序运行在多容器,多机器的技术被称为swarm. 一个swa ...

  8. Linux进程管理与性能监控

    1. 进程管理工具 这一节我们介绍进程管理工具: 使用进程管理工具,我们可以查询程序当前的运行状态,或终止一个进程: 任何进程都与文件关联:我们会用到lsof工具(list opened files) ...

  9. golang map 声明,赋值

    参考链接:https://blog.csdn.net/wide288/article/details/84303511 // 先声明map var m1 map[string]string// 再使用 ...

  10. 2020.5.24 第四篇 Scrum冲刺博客

    Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...