(保姆级)使用阿里云+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概念图
首先我们需要先创建一个Azure Devops 组织然后创建一个项目如下:
2:然后我们现在就要开始配置代理池步骤如下:
然后下载代理这里推荐使用VPNFQ下载不然很慢。然后我们配置一个完全访问令牌这里我偷懒了就设置完全访问了:
要注意的是我们一旦配置完成后复制完毕就再也出不来秘钥页面了。
接下来开始配置config.cmd如下图:
配置完毕运行run.cmd:然后回到Azure Devops中我们就能看到:
现在代理就配置好了.
现在开始配置CI:
首先我们需要在阿里云中创建一个镜像仓库:容器镜像服务 (aliyun.com)
然后我们创建一个镜像仓库镜像仓库创建完毕之后我们需要配置管道首先我们需要新建一个管道:
然后选择仓库:
选择项目中的dockerFile文件位置:
我测试项目的DockerFile文件如下,大家可自行参考(纯空项目啥也没有):
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如图:
点击添加一个新的Releases管道,
进来后,微软给我们提供了很多线上模版 ,不过我们选择空的job
点击添加一个Artifacts,这里我们选择上一篇文章刚加的集成管道:
点击这个 上面的闪电标志 添加触发事件,当集成管道运行完毕之后 自动触发部署管道.
下面我们开始创建这个管道所要执行的步骤, 点击task进入编辑页面:
选择执行任务的代理服务器:
点击加号,添加一个docker任务:
1.创建一个删除旧容器的任务,操作过程如下:
2.开始运行我们新版本的容器
新增一个后续的Stages如下:
同上添加一个docker任务(记得选择代理服务),操作如下:
这样我们就完成了整个持续部署管道的配置.