目標
創建一個.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
文件內容
# 
[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后看看是否會自動發布
幾秒鍾以后,服務器上的程序已經自動更新了