.net 微服务CICD 好文章
好文章:https://www.cnblogs.com/PatrickLiu/p/14295172.html
庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境
庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境
一、介绍
说起微服务架构来,有一个环节是少不了的,那就是CI/CD持续集成的环境。当然,搭建CI/CD环境的工具很多,但是有一个工具它却是出类拔萃,是搭建持续集成环境的首选,它就是Jenkins。在这里,有关Jenkins的具体内容我就不说了,网上有很多,我在这里只做很简单的介绍。Jenkins 自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。我们今天就开始搭建一个企业级别的CI/CD的环境,这个内容很多,也需要有很多的基础,比如:必须安装Docker了,必须会使用Linux系统,必须会使用Git,对GitHub比较熟悉,当然也要对Net5.0有所认识,等等还有很多,这些基础知识,我假定大家都是熟悉的,毕竟,文章要有主有次。
二、准备工作
1、开发环境升级,将Net Core3.1的环境升级为 Net5.0
官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/migration/31-to-50?view=aspnetcore-5.0&tabs=visual-studio#prerequisites
下载地址:https://dotnet.microsoft.com/download/dotnet/5.0
2、安装 Git 源代码托管工具。
在工作开始之前,先要检查自己是否安装了Git工具,如果安装了,就可以跳过本节,如果没有安装,那就跟着我们开始安装吧。当然了,安装完成之后,我们还要配置 VS 2019 的源代码管理工具是 Git,很简单,我就不写了。
(1)、去官网下载Git的安装文件,地址::https://git-scm.com/downloads/
(2)、将下载下来的 Git 安装包,存在自己的目录里,文件名:Git-2.30.0-64-bit.exe,双击该文件开始安装。
(3)、选择安装的组件,保持默认就好(我的选择)。
(4)、选择默认编辑器,保持默认就好(我的选择)。
(5)、可以修改默认分支的名称,我选择保持默认(我的选择)。
(6)、可以设置环境变量,保持默认就可以(我的选择)。
(7)、选择Https 传输协议,保持默认。
(8)、配置终端使用 Git Bash,保持默认就好。
(9)、配置行未的转换符。
(10)、选择“git pull”的默认行为,默认选择。
(11)、选择凭据帮助程序。
(12)、配置额外选项。
(13)、配置实验选项。
(14)、开始安装。
(15)、安装成功。
(16)、如何判断 Git 是否安装成功,在空白地方(任何地方),点击右键,出现如图效果表示安装成功。
3、新建一个Net5.0的项目,然后将其上传至 Git 服务器。
由于是测试项目,所以每个项目的代码都很简单,因为代码不是重点。
(1)、新建项目
【1】、PatrickLiu.CICD.Clients(Asp.Net Core WebApi),一个Core API项目。
代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Threading;
5 using Microsoft.AspNetCore.Mvc;
6 using Microsoft.Extensions.Configuration;
7 using Microsoft.Extensions.Logging;
8 using PatrickLiu.CICD.Interfaces;
9 using PatrickLiu.CICD.Models;
10
11 namespace PatrickLiu.CICD.Clients.Controllers
12 {
13 /// <summary>
14 /// 用户的 API 类型。
15 /// </summary>
16 [Route("api/[controller]")]
17 [ApiController]
18 public class UsersController : ControllerBase
19 {
20 #region 私有字段
21
22 private readonly ILogger<UsersController> _logger;
23 private readonly IUserService _userService;
24 private IConfiguration _configuration;
25
26 #endregion
27
28 #region 构造函数
29
30 /// <summary>
31 /// 初始化该类型的新实例。
32 /// </summary>
33 /// <param name="logger">日志记录器。</param>
34 /// <param name="userService">用户服务接口。</param>
35 /// <param name="configuration">配置服务。</param>
36 public UsersController(ILogger<UsersController> logger, IUserService userService, IConfiguration configuration)
37 {
38 _logger = logger;
39 _userService = userService;
40 _configuration = configuration;
41 }
42
43 #endregion
44
45 #region 实例方法
46
47 /// <summary>
48 /// 获取一条记录
49 /// </summary>
50 /// <param name="id"></param>
51 /// <returns></returns>
52 [HttpGet]
53 [Route("Get")]
54 public User Get(int id)
55 {
56 return _userService.FindUser(id);
57 }
58
59 /// <summary>
60 /// 获取所有记录。
61 /// </summary>
62 /// <returns></returns>
63 [HttpGet]
64 [Route("All")]
65 //[Authorize]
66 public IEnumerable<User> Get()
67 {
68 Console.WriteLine($"This is UsersController {this._configuration["port"]} Invoke");
69
70 return this._userService.UserAll().Select((user => new User
71 {
72 ID = user.ID,
73 Name = user.Name,
74 Account = user.Account,
75 Password = user.Password,
76 Email = user.Email,
77 Role = $"{this._configuration["ip"]}:{this._configuration["port"]}",
78 LoginTime = user.LoginTime
79 })); ;
80 }
81
82 /// <summary>
83 /// 超时处理
84 /// </summary>
85 /// <returns></returns>
86 [HttpGet]
87 [Route("Timeout"