1.背景
最近在学习CI/CD,为了加快熟悉CI/CD,我实操了下基于.Net 8.0的CI/CD项目实战。Ci/CD就是自动化作业,实现项目自动编译、发布、执行等,也有用于拉取推送数据的场景。本文主要介绍了在win 11下搭建CI/CD,实现自动发布.net 8.0 WebAPI,并支持代码更新后的发布。通过本文可以快速了解CI/CD流程和思路,不过暂时还没接入docker容器,后续抽空会出支持dokcer的CI/CD文章。
2.知识储备
2.1 CI/CD概念
CI/CD就是项目自动化。解放手工操作,将项目自动编译,自动发布,自动执行。这里的项目,我们定义为.NET Web API 8.0;
2.2 CI/CD架构
下面是1个完整的CI/CD架构图:
VS2022:开发IDE
gitee:码云,国内版的github
jenkins:CI/CD工具
项目:操作的目标对象,本文是.NET Web API 8.0
路由侠:内网映射工具
这里可能会有疑问?为什么要用路由侠去做内网映射了?
答案:gitee在代码提交后,可能会触发jenkins流水线任务等,底层原理是调用jenkins接口,让jenkins去干活。在我们这架构模式下,gitee是外网模式,jenskin是部署在内网,比如本地电脑。这样就需要内网映射到外网。在gitee上面就能访问到jenkins接口。
当然,如果你在服务器上部署jenkins,那就不需要内网映射了。直接通过服务器ip或者域名就能解析。
2.3 CI/CD环境准备
2.3.1 项目准备
新增 .NET Web API 8.0项目:WebAPI_CICD
新增CICDController,代码如下
using Microsoft.AspNetCore.Mvc;
namespace WebAPI_CICD.Controllers
{
[ApiController]
[Route("[controller]/[action]")]
public class CICDController : ControllerBase
{
private readonly ILogger<WeatherForecastController> _logger;
public CICDController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetCICD")]
public string GetCICD()
{
return $"CI/CD部署成功:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";
}
}
}
2.3.2 gitee准备
官网地址:Gitee - 基于 Git 的代码托管和研发协作平台
创建仓库 WebAPI_CICD:
2.3.3 jenkins准备
官网下载安装包,安装到本地win11电脑,安装教程可以百度;
经过几分钟的安装后,打开jenkins,地址:工作台 [Jenkins]
2.3.4 路由侠准备
官网下载, 安装到本地win11电脑,安装比较简单;
安装成功后,打开软件主界面
2.4 CI/CD架构实战
2.4.1 项目上传
将.net 8.0项目上传到gitee
将gitee上面的仓库地址,复制到VS2022的 远程URL
2.4.2 下载项目
在jenkins上面下载项目源代码。下面是操作步骤
选择 保存
验证jenkins是不是能从gitee拉取代码?按照下列操作来验证
可以明显看出,项目源代码下载成功。代码下载的路径是
C:\ProgramData\Jenkins\.jenkins\workspace\WebAPI_CICD
额外介绍,jenkins工作目录是
C:\ProgramData\Jenkins\.jenkins\workspace
2.4.3 运行项目
在jenkins进行配置,就能将下载后的项目源代码,运行起来,下面是操作步骤
验证jenkins是不是正常运行项目?按照下列操作来验证
从上图可以看到运行项目成功。拼接地址/CICD/GetCICD后,地址为 http://localhost:5089/CICD/GetCICD,浏览器访问如下:
验证jenkins运行项目是成功的。
2.4.4 更新项目
目标:代码提交到分支,需要触发CI/CD。
思路:1.在本地win11电脑配置内网映射,将本地jenkins映射到外网;2.gitee webhook触发jenkins构建:自动拉取代码,编译,发布,运行项目。
接下来,按照下图去配置:
使用路由侠工具,进行内网映射,将jenkins映射到外网进行访问
将上图的公网地址http://laiger.w1.luyouxia.net,放到浏览器访问
明显看到。我们内网映射配置成功。现在jenkins支持公网访问了。
在jenkins页面正常输入用户名和密码,进行登录后如下所示:
到这里,jenkins内网映射配置完成,接下来是配置gitee webhook触发jenkins构建的过程;
在jenkins安装插件Gitee Plugin
接下来配置 gitee webhook:
根据上图,又因为jenkins已经做了 内网映射,所以 Gitee webhook地址是
http://laiger.w1.luyouxia.net/gitee-project/WebAPI_CICD
按照下面操作,生成gitee webhook密码,将密码记下来
拿到gitee webhook地址和密码后,去gitee按照下图去配置
在VS2022 修改源代码,推送到gitee会触发jenkins任务
提交到后,发现jenkins已经触发了构建任务
检查下.Net WebAPI 8.0项目是不是最新版本
显而易见,版本已经成功更新
2.5 CI/CD原理分析
CI/CD关键是jenkins,无非就是是作业自动化。将作业定义为流水线,支持各种操作,比如脚本、接口等等,实现了自动作业的功能。
3.结束
本文是CI/CD简单版本的探索,属demo系列。正常部署生产环境,是在服务器部署jenkins,无需内网映射,公司内自建gitlab仓库等,用docker容器去部署。后续抽空出支持容器的CI/CD介绍。