(保姆级)使用阿里云+Azure Repos实现CI/CD

作为.NET的开发者,微软一直都是比较有爱的..从免费强大的IDE到人工智能ML.NET 基本上都提供了免费的入门版本,今天主要介绍的就是Azure DevOps.

Azure DevOps的前身其实大家都熟悉就是TFS,Azure DevOps是由TFS转为线上Online的产品.

它基本上提供了CI/CD所需要的全部功能。唯一的问题是在国内没有服务器,最近的服务器在香港。

Azure DevOps提供无限免费的私有仓库,以及最多5个contributor(贡献者)账号和无限的stakeholder(参与者)账号,注册即可使用.

本文的CI/CD概念图

IMG_256

首先我们需要先创建一个Azure Devops 组织然后创建一个项目如下:

2:然后我们现在就要开始配置代理池步骤如下:


然后下载代理这里推荐使用VPNFQ下载不然很慢。然后我们配置一个完全访问令牌这里我偷懒了就设置完全访问了:

要注意的是我们一旦配置完成后复制完毕就再也出不来秘钥页面了。
接下来开始配置config.cmd如下图:

 


配置完毕运行run.cmd:然后回到Azure Devops中我们就能看到:

现在代理就配置好了.

现在开始配置CI:

首先我们需要在阿里云中创建一个镜像仓库:容器镜像服务 (aliyun.com)
然后我们创建一个镜像仓库镜像仓库创建完毕之后我们需要配置管道首先我们需要新建一个管道:

然后选择仓库:

选择项目中的dockerFile文件位置:

 

我测试项目的DockerFile文件如下,大家可自行参考(纯空项目啥也没有):

IMG_257

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base

WORKDIR /app

EXPOSE 80

EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build

RUN mkdir -p /app

WORKDIR /src

COPY . .

RUN dotnet restore "WebApplication1.csproj"

RUN dotnet build "WebApplication1.csproj" -c Release -o /app

FROM build AS publish

RUN dotnet publish "WebApplication1.csproj" -c Release -o /app

FROM base AS final

WORKDIR /app

COPY --from=publish /app .

ENTRYPOINT ["dotnet", "WebApplication1.dll"]
然后我们随便选一个(因为我们自己编写YAml文件):

然后将其中的YAML文件改成如下代码:

trigger:

- master

pool:

  warehouse

variables:

  dockerId: xxxxxxxxxxx                  # 阿里云 login username

  pwd: xxxxxxxxx

  namespace: songyinjun                              # 阿里云 命名空间

  imageName: warehouse                        # 阿里云 仓库名称

  registry: xxxxxxxxxxxxxx   # 阿里云 公网地址

  dockerfilepath:  xxxxxxxxxxxxx       # Github Dockerfile相对路径

steps:

- script: |

    docker build -f $(dockerfilepath) -t $(imageName) .

    docker login -u $(dockerId) -p $(pwd) $(registry)

    docker tag $(imageName) $(registry)/$(namespace)/$(imageName)

    docker push $(registry)/$(namespace)/$(imageName)

  displayName: push to aliyun

然后保存运行如图:

CI操作就结束了!
现在开始CD的配置:

1.创建部署管道

我们点击release如图:

IMG_256

 

点击添加一个新的Releases管道,

进来后,微软给我们提供了很多线上模版 ,不过我们选择空的job

IMG_257

 

 点击添加一个Artifacts,这里我们选择上一篇文章刚加的集成管道:

IMG_258

 

 

 

 点击这个 上面的闪电标志 添加触发事件,当集成管道运行完毕之后 自动触发部署管道.

IMG_259

 

 

下面我们开始创建这个管道所要执行的步骤, 点击task进入编辑页面:

IMG_260

选择执行任务的代理服务器:

IMG_261

 

 

点击加号,添加一个docker任务:

 

IMG_262

 

 

1.创建一个删除旧容器的任务,操作过程如下:

IMG_263

 

IMG_264

 

 

2.开始运行我们新版本的容器

 新增一个后续的Stages如下:

IMG_265

 

同上添加一个docker任务(记得选择代理服务),操作如下:

IMG_266

 

 这样我们就完成了整个持续部署管道的配置.

posted @   S提拉米苏  阅读(222)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
  1. 1 原来你也在这里 周笔畅
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
极恶都市 - 夏日入侵企划
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 王星

作曲 : 灰鸿啊/皮皮

编曲 : 夏日入侵企画

制作人 : 邢硕

节奏吉他 : 肯尼

主音吉他 : 张伟楠

贝斯 : 皮皮

鼓 : 海鑫

和声 : 邢硕

音效制作 : 邢硕

录音 : 邢硕/夏国兴

混音 : 于昊

特别鸣谢 : 张伟楠

这城市的车流和这地表的颤抖

像一颗石子落入地心之后泛起的温柔

暗涌

河水流过转角她的楼

被梦魇

轻声呓语唤醒身后的幼兽

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都

已忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去陈旧的还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池已失守

最终无法占有

无眠辗转

伴着人间破碎的旧梦

像繁星

退却后只剩下混沌的夜空

炙热

掩盖风声鹤唳的担忧

把所有失落无助反手推入

无尽的白昼

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都已经忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池早已失守

惶恐难以接受

缠绵往复不肯放手

最终无法占有

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁 灭 即 拯 救

谁掠夺春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

明知城池已失守

缠绵往复不肯放手

最终无法占有

点击右上角即可分享
微信分享提示