0基础轻松玩转.NET Web API 8.0【CICD】项目实战

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介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UEFI——PCD的简单使用

一、PCD的定义及概念 在UEFI固件接口中&#xff0c;PCD&#xff08;Platform Configuration Database&#xff09;是一个用于存储和访问平台特定配置信息的机制。PCD允许UEFI驱动程序和应用程序在运行时获取和设置平台相关的参数&#xff0c;而无需硬编码这些值。PCD变量可以被…

加速电商物流效率:推荐几款实用的快递批量查询工具

做电商必不可少的快递批量查询平台分享&#xff1a;固乔快递查询助手使用全攻略 在电商行业日益竞争的今天&#xff0c;高效管理物流信息成为了商家们不可或缺的一环。面对每天成百上千的订单和快递单号&#xff0c;如何快速、准确地查询并跟踪物流状态&#xff0c;成为了电商…

mysql高可用之组复制

MySQL Group Replication( 简称 MGR ) 是 MySQL 官方于 2016 年 12 月推出的一个全新的高可用与高扩展的解决方案组复制是 MySQL 5.7.17 版本出现的新特性&#xff0c;它提供了高可用、高扩展、高可靠的 MySQL 集群服务MySQL 组复制分单主模式和多主模式&#xff0c;传统的…

请解释Java中的装箱拆箱操作对性能的影响,并讨论其最佳实践。什么是Java中的值传递和引用传递?它们在函数调用中的表现有何不同?

请解释Java中的装箱拆箱操作对性能的影响&#xff0c;并讨论其最佳实践。 在Java中&#xff0c;装箱&#xff08;Boxing&#xff09;和拆箱&#xff08;Unboxing&#xff09;操作是Java自动类型转换机制的一部分&#xff0c;主要用于基本数据类型&#xff08;如int, double, c…

stun和trun

在 WebRTC 中&#xff0c;STUN&#xff08;Session Traversal Utilities for NAT&#xff09;和 TURN&#xff08;Traversal Using Relays around NAT&#xff09;是用于NAT穿透的两种不同的技术&#xff0c;它们解决的问题不同&#xff0c;因此在某些情况下需要同时使用。 ST…

产品需求过程管理重要性

产品需求过程管理重要性 背景 以下都是真实事项经历回顾&#xff0c;在产品开发过程中&#xff0c;产品经理与研发团队之间的沟通至关重要。然而&#xff0c;沟通不畅或信息缺失常常导致需求无法准确传达&#xff0c;最终影响产品的成功。以下是一些常见的问题&#xff1a; 1.需…

C++基础【字符串】(Ac-Wing)

字符串加空格 #include <iostream> #include <cstring> #include <algorithm>using namespace std;int main() {string s;getline (cin, s);for (int i 0; i < s.size(); i )cout << s[i] << " "; }字符串插入 #include<bits/…

js处理echarts tooltip定时轮播

echarts tooltip定时轮播 /*** echarts tooltip轮播* param chart ECharts实例* param chartOption echarts的配置信息* param options object 选项* {* interval 轮播时间间隔&#xff0c;单位毫秒&#xff0c;默认为3000* true表示循环所有series的tooltip…

Electron基础(二) 进程通信的ipcMain、contextBridge、ipcRenderer

1.什么是ipcMain 在 Electron 中&#xff0c;ipcMain是一个非常重要的模块&#xff0c;它负责处理从渲染器进程&#xff08;即 Web 页面&#xff09;发送到主进程&#xff08;即 Electron 应用的后台进程&#xff09;的进程间通信&#xff08;IPC&#xff0c;Inter-Process Co…

使用HTTP代理注意的点

“在网络世界中&#xff0c;HTTP代理扮演着桥梁的角色&#xff0c;帮助用户匿名访问网站、加速网页加载、绕过地区限制等。然而&#xff0c;不当或不安全地使用HTTP代理也可能带来一系列问题。以下是在使用HTTP代理时需要注意的几个关键点。” 一、选择可靠的代理服务商 首先&…

鹰眼应急实时三维重建装备,高质量交付中!

在《2024年地方应急管理科技信息化任务书》的指导和应急管理万亿国债支撑下&#xff0c;全国各地正积极推进应急管理现代化建设&#xff0c;全力提升“数据汇聚服务能力、监测预警能力、指挥调度能力、支撑保障能力”四项应急管理能力。 制定标准化流程规范&#xff0c;保障交…

[Leetcode 47][Medium]-全排列 II-回溯(全排列问题)

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 和上一道Leetcode46相比&#xff0c;有变化的地方是要排除重复组合的情况。那么在组合问题中去除重复组合的方法是先对数组进行排序,然后在回溯函数中判断当前元素与上一个元素是否相同,若相同…

DDS(Data Distribution Service)的数据状态分布和管理简单介绍

1. 数据中心模型 在 DDS 中&#xff0c;数据分发是基于数据中心模型的&#xff0c;而不是消息中心模型。数据中心模型强调数据本身的存在和状态变化&#xff0c;而消息中心模型主要关注消息的传递。通过使用数据中心模型&#xff0c;DDS 可以有效地跟踪每个话题的状态&#xf…

系统架构师考试学习笔记第三篇——架构设计高级知识(11)软件可靠性基础知识

本章知识点&#xff1a; 第11课时主要学习软件可靠性基本概念、建模、管理、设计、测试和评价等内容。本课时内容侧重于概念知识,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,考查的知识点多来源于教材,扩展内容较少。根据考试大纲,本课时知识点会涉及单项选…

赞奇科技与华为云共襄828 B2B企业节,激活数字内容“云”创作

8月28日&#xff0c;在2024中国国际大数据产业博览会上&#xff0c;第三届828 B2B企业节正式开幕&#xff0c;旨在融通数智供需&#xff0c;加速企业智改数转&#xff0c;助推中国数智产业实力再升级。 828 B2B企业节是全国首个基于数字化赋能的企业节&#xff0c;由华为联合上…

python网络爬虫(一)——网络爬虫基本原理

1.使用Beautiful Soup解析网页 通过request库已经抓取到网页源码&#xff0c;接下来要从源码中找到并提取数据。Beautiful Soup是python的一个库&#xff0c;其主要功能是从网页中抓取数据。Beautiful Soup目前已经被移植到bs4库中&#xff0c;也就是说在导入Beautiful Soup时需…

HarmonOS实战开发:Node-API接口适配模块加载指导

Node-API中的napi_load_module_with_info接口的功能是进行模块的加载&#xff0c;当模块加载出来之后&#xff0c;可以使用函数napi_get_property获取模块导出的变量&#xff0c;也可以使用napi_get_named_property获取模块导出的函数&#xff0c;该函数可以在新创建的ArkTs基础…

力扣239题详解:滑动窗口最大值的多种解法与模拟面试问答

在本篇文章中&#xff0c;我们将详细解读力扣第239题“滑动窗口最大值”。通过学习本篇文章&#xff0c;读者将掌握如何在数组中找到每个滑动窗口的最大值&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力…

SprinBoot+Vue学生选课微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

C++使用日志库经验总结

1、log4cpp日志源文件路径设置 在 Visual Studio 中&#xff0c;C 项目的日志格式可以通过设置项目的属性来调整。如果你想要使用完整路径来显示诊断消息&#xff0c;可以在项目属性中的“C/C”选项卡下的“高级”属性页中找到“使用完整路径”&#xff08;/FC&#xff09;选项…