Jenkins + Gitee + .Net6 实现持续集成与持续交付(CI/CD)
目标
创建一个.Net6项目,结合Jenkins、Gitee实现CI/CD (当编写完代码,并提交到Gitee仓库之后,Jenkins自动帮我们测试,打包,发布项目)
关于Jenkins,Docker 的环境搭建可以参考我的上一篇文章
https://www.cnblogs.com/kizuna1314/p/15660880.html
步骤
- Gitee创建一个.Net6项目的仓库
- Jenkins创建一个自由风格的软件项目
- 配置Jenkins和.Net6项目的关联
- 创建.Net6项目,编写接口代码,本文重点主要CI/CD,所以选择创建轻量的Minimal API项目
- 提交Gitee,查看CI/CD效果
创建项目
Gitee准备一个项目
新建一个自由风格的软件项目
配置构建需要的参数
若出现操作过程中出现下图问题,并且Gitee信息填写正确,原因可能是项目需要开源才能访问到
选择添加的用户凭证
配置webHooks
勾选并复制URL
Gitee配置webHooks
填写上一步骤拷贝的URL
点击生成Gitee WebHook 密码
粘贴到WebHook 密码/签名密钥文本框中
验证Jenkins是否能拉取提交的内容
提交了一段代码
成功拉同步了Gitee的更改,接下来只需要把每次同步过来的代码发布即可
下载.Net6 运行时(由于我之前安装过,所以直接显示100%)
官网下载地址:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
Centos7系列版本可直接运行下面命令下载
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
查看安装
dotnet --list-sdks
安装supervisor
yum install -y supervisor
查看所有 supervisor服务状态
supervisorctl status
编写一个后台进程(.ini)文件
# 创建并编辑一个.ini文件,我这里以 "net6demo" 为例
vim /etc/supervisord.d/net6demo.ini
文件内容
# ![image](https://img2020.cnblogs.com/blog/1289480/202112/1289480-20211210165543840-343976883.png)
[program:net6demo]
command=dotnet net6test.dll --urls http://0.0.0.0:5000 # 这里改成实际的.dll文件 以及需要暴露的端口
directory=/pub # 这里是发布的文件路径,所以 需要在外面再创建pub文件夹
autorestart=true
startsecs=3
startretries=3
stdout_logfile=/logs/net6test.out.log
stderr_logfile=/logs/net6test.err.log
stdout_logfile_maxbytes=2MB
stderr_logfile_maxbytes=2MB
user=root
priority=999
numprocs=1
process_name=%(program_name)s_%(process_num)02d
创建/pub、/logs 文件夹,并给予读写权限
mkdir /pub /logs
chmod -R 777 /pub /logs
启动supervisor后台进程
supervisord -c /etc/supervisord.conf
查看后台后台守护进程状态
supervisorctl status
进程名称需要记下来,因为后面我们重新发布的时候需要重启这个守护进程
配置ssh构建实现自动拉取并部署项目
选择增加构建步骤
编写shell脚本
echo------------stopapp------------------
supervisorctl stop net6demo:net6demo_00
echo------------publish------------------
cd /app/net6test/net6test
dotnet publish -o /pub
echo------------delcode------------------
cd /app
rm -rf *
echo------------online------------------
supervisorctl start net6demo:net6demo_00
编辑完内容之后,保存
立即构建,看看是否拉取并发布了
查看构建明细
我们可以看到,项目已经自动发布到/pub文件夹下面了
访问接口
服务器本机访问
web访问
更改项目内容,提交Gitee后看看是否会自动发布
几秒钟以后,服务器上的程序已经自动更新了