??作者:科技、互聯(lián)網(wǎng)行業(yè)優(yōu)質(zhì)創(chuàng)作者
??專注領(lǐng)域:.Net技術(shù)、軟件架構(gòu)、人工智能、數(shù)字化轉(zhuǎn)型、DeveloperSharp、微服務(wù)、工業(yè)互聯(lián)網(wǎng)、智能制造
??歡迎關(guān)注我(Net數(shù)字智慧化基地),里面有很多高價(jià)值技術(shù)文章,是你刻苦努力也積累不到的經(jīng)驗(yàn),能助你快速成長。升職+漲薪??!
前言
由于部署個(gè)人博客系統(tǒng)的服務(wù)器只有2G內(nèi)存,每次利用jenkins編譯,發(fā)布的時(shí)候jenkins老是掛,因此新買了一臺輕量應(yīng)用服務(wù)器,專門用于個(gè)人博客系統(tǒng)的持續(xù)發(fā)布任務(wù),下面講解如何利用jenkins實(shí)現(xiàn)系統(tǒng)的持續(xù)發(fā)布功能。
一、安裝Jenkins
這里服務(wù)器是Linux CentOS 7 ,使用SSH 登錄云服務(wù)器后,輸入以下命令安裝jenkins.
sudo?wget?-O?/etc/yum.repos.d/jenkins.repo?\
????https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo?rpm?--import?https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo?yum?upgrade
#?Add?required?dependencies?for?the?jenkins?package
sudo?yum?install?java-11-openjdk
sudo?yum?install?jenkins
sudo?systemctl?daemon-reload
systemctl?enable?jenkins
sudo?systemctl?start?jenkins
安裝成功后,在瀏覽器中輸入服務(wù)器?公網(wǎng)IP地址+8080端口訪問
上圖提示你需要從服務(wù)器上的initialAdminPassword文件復(fù)制jenkins的初始登錄密碼進(jìn)行輸入,輸入后點(diǎn)擊繼續(xù)。
然后選擇?安裝Jenkins推薦的插件,然后等待所有推薦插件安裝完成.
安裝完后,創(chuàng)建一個(gè)登錄Jenkins的賬號
訪問地址配置用默認(rèn)的就好(通過8080端口訪問)。
二、安裝Gitee插件
這邊以我的個(gè)人博客代碼為例子,因?yàn)槟壳拔业膫€(gè)人博客代碼是托管到碼云上,因此這里利用Gitee插件來實(shí)現(xiàn)持續(xù)發(fā)布功能.
點(diǎn)擊左側(cè) Dashboard->Manage Jenkins(系統(tǒng)管理) 菜單,并點(diǎn)擊Manage Plugins(插件管理)
選擇可選插件,然后輸入Gitee,然后點(diǎn) Download now and install after restart,
這個(gè)插件主要是用于接收gitee WebHook通知(如:代碼提交、PR等)并觸發(fā)jenkins構(gòu)建
安裝成功后,前往 Jenkins -> Manage Jenkins(系統(tǒng)管理) -> Configure System(系統(tǒng)配置) -> Gitee Configuration(Gitee配置) ,對插件進(jìn)行配置。
添加一個(gè)新的證書令牌,按照如下配置,GiteeAPIV5 私人令牌可以通過頁面:https://gitee.com/profile/personal_access_tokens 生成,然后點(diǎn)擊添加。
這個(gè)時(shí)候點(diǎn)擊測試連接會發(fā)現(xiàn)報(bào)錯,無法連上,https://gitee.com/oschina/Gitee-Jenkins-Plugin/issues/I4NQAJ 這里面提出了解決方案 , javax.ws.rs-api jar包可以在這里(https://repo1.maven.org/maven2/javax/ws/rs/javax.ws.rs-api/2.1.1/)下載。
需要注意的是:安裝完相應(yīng)jar包或者Jersey 2 API 插件后后記得重啟jenkins才能生效。
mkdir?-p?/var/cache/jenkins/war/WEB-INF/lib
cd?/var/cache/jenkins/war/WEB-INF/lib
wget?https://repo1.maven.org/maven2/javax/ws/rs/javax.ws.rs-api/2.1.1/javax.ws.rs-api-2.1.1.jar
?chmod?a+x?javax.ws.rs-api-2.1.1.jar
systemctl?restart?jenkins
按照以上方法試了后,我這邊還是不行,可能是我那個(gè)流程沒有操作對。
然后安裝Jersey 2 API后,重啟jenkins發(fā)現(xiàn)可行(我這邊jenkins版本比較新)
三、服務(wù)器相關(guān)編譯環(huán)境配置
-
安裝.net core sdk.用于編譯,我這邊用的dotnet版本還是.net core 3.1,輸入以下命令安裝
sudo?rpm?-Uvh?https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo?yum?install?dotnet-sdk-3.1
-
安裝git
sudo?yum?install?git
四、新建自動構(gòu)建任務(wù)
進(jìn)入 Dashboard->新建任務(wù),輸入任務(wù)名稱,然后選擇流水線。
General配置
配置構(gòu)建觸發(fā)器
配置流水線
點(diǎn)擊Credentials 右下方的添加按鈕,添加用于拉取代碼用的身份驗(yàn)證憑據(jù)。
需要注意的是:如果使用git ssh 協(xié)議(也就是格式為git開頭的倉儲地址),則添加身份驗(yàn)證憑據(jù)的時(shí)候,憑據(jù)類型只支持:Username with password (用戶名和密碼驗(yàn)證)、SSH Username with private key(用戶名和私鑰驗(yàn)證),用戶名就是gitee的登錄賬號。
創(chuàng)建身份驗(yàn)證憑據(jù)秘鑰前,需要將服務(wù)器登錄用戶先切換到j(luò)enkins用戶,不然以root用戶創(chuàng)建的秘鑰文件,將無法拉取代碼(存在權(quán)限問題),切換到j(luò)enkins用戶前,先執(zhí)行以下命令,以便允許jenkins用戶登錄。
sudo?usermod?-s?/bin/bash?jenkins
切換到j(luò)enkins用戶
sudo su - jenkins
在服務(wù)器上輸入以下命令創(chuàng)建身份驗(yàn)證憑據(jù)私鑰,-C 后面的參數(shù)可以是任意內(nèi)容,但通常用郵箱賬號。
ssh-keygen?-t?ed25519?-C?"xxxxx@xxxxx.com"
生成后,服務(wù)器上輸入以下命令讀取公鑰內(nèi)容,然后將公鑰內(nèi)容復(fù)制到gitee指定項(xiàng)目的 管理->部署公鑰管理->添加公鑰中添加指定公鑰,
cat?~/.ssh/id_ed25519.pub
gitee上添加公鑰后,在服務(wù)器上執(zhí)行以下命令
ssh?-T?git@gitee.com
通過執(zhí)行以下命令讀取ssh身份驗(yàn)證私鑰內(nèi)容,并輸入到 jenkins 身份驗(yàn)證憑據(jù)的以下位置。
cat?~/.ssh/id_ed25519
添加身份驗(yàn)證憑據(jù)后,按照下圖配置。
在jenkins 服務(wù)器上執(zhí)行以下命令,創(chuàng)建ssh 身份認(rèn)證秘鑰,并將公鑰復(fù)制到應(yīng)用服務(wù)器上,以便在編譯成功后,直接復(fù)制dll到應(yīng)用服務(wù)器上,而無需輸入應(yīng)用服務(wù)的登錄密碼,需要注意的是,創(chuàng)建秘鑰前,先切換到j(luò)enkins用戶賬號。
sudo su - jenkins
ssh-keygen -t rsa
以下命令表示將jenkins所在服務(wù)器生成的公鑰復(fù)制到應(yīng)用服務(wù)器(因?yàn)閪/.ssh/目錄下已經(jīng)有其他的秘鑰,因此這邊指定復(fù)制哪一個(gè)公鑰)
ssh-copy-id?-i?~/.ssh/id_rsa.pub?root@115.159.114.65?-p?1200
以上兩個(gè)命令執(zhí)行成功后,可以創(chuàng)建一個(gè)文本文件進(jìn)行測試,看下是否能無需輸入密碼就可以復(fù)制文件到應(yīng)用服務(wù)器。
cd?~
touch?test.txt
echo?"測試內(nèi)容"?>>?test.txt
以下命令用于將jenkins服務(wù)器上用戶主目錄下的test.txt文件復(fù)制到應(yīng)用服務(wù)器上用戶主目錄。
#?-P 表示應(yīng)用服務(wù)器的ssh登錄端口(如果不是22,必須指定),-i 后面跟的是jekins服務(wù)器上生成的私鑰文件。
scp?-P?1200?-i?~/.ssh/id_rsa?~/test.txt?root@115.159.114.65:~
在項(xiàng)目的解決方案文件(.sln)同級目錄下新建名稱為jenkinsfile的文件,并輸入以下腳本內(nèi)容
pipeline?{
????agent?any
????stages?{
????????stage('build')?{
????????????steps?{
??????????????echo?'開始拉取代碼'
??????????????sh?'git?pull?origin?dev:dev'
??????????????echo?'切換到本地dev分支'
??????????????sh?'git?checkout?dev'
??????????????
??????????????echo?'當(dāng)前工作目錄及文件列表如下'
??????????????sh?'pwd'
??????????????sh?'ls?-al'
??????????????
??????????????dir("${WORKSPACE}/BlogSys")?{
?????????????????echo?'開始編譯博客前端站點(diǎn)'
?????????????????sh?'dotnet?publish?./BlogSys.csproj?-c?Release?-r?linux-x64?--no-restore'
??????????????}
??????????????//WORKSPACE表示存放代碼的根目錄。
??????????????dir("${WORKSPACE}/BlogSysManagement"){
????????????????echo?'開始編譯博客后臺站點(diǎn)'
????????????????sh?'dotnet?publish?./BlogSysManagement.csproj?-c?Release?-r?linux-x64?--no-restore'
??????????????}
????????????}
????????}
????????stage('deploy')
????????{
????????????steps?{
??????????????echo?'開始發(fā)布流程,當(dāng)前工作目錄如下'
??????????????sh?'pwd'
?????????????
??????????????echo?'開始發(fā)布個(gè)人博客前端系統(tǒng)'
??????????????echo?'前端站點(diǎn)'
??????????????sh?'ssh?-i?~/.ssh/id_rsa?root@115.159.114.65?-p?1200?-T?"systemctl?stop?blogsys"'
??????????????//dir函數(shù)里面要用環(huán)境變量記得用雙引號,該函數(shù)用于改變當(dāng)前目錄,dir函數(shù)塊里面包含的所有相對路徑都是相對于dir指定的目錄。
??????????????dir("${WORKSPACE}/BlogSys/bin/Release/netcoreapp3.1/linux-x64/publish/"){
????????????????????//-i 用于指定ssh傳輸身份驗(yàn)證私鑰,-r表示復(fù)制目錄下的所有文件及子目錄以及子目錄下的所有文件,也可以將這個(gè)文件夾打包壓縮后再傳輸。
????????????????????sh?'scp?-P?1200?-i?~/.ssh/id_rsa?-r?./?root@115.159.114.65:/var/www/blogsys'?
??????????????}
??????????????echo?'重啟前端站點(diǎn)'
??????????????//這里不能使用-t 選項(xiàng),應(yīng)該使用-T 或?-tt 代理,否則無法正確執(zhí)行。
??????????????sh?'ssh?-i?~/.ssh/id_rsa?root@115.159.114.65?-p?1200?-T?"systemctl?restart?blogsys"'
??????????????
??????????????echo?'開始發(fā)布個(gè)人博客后臺管理系統(tǒng)'
??????????????echo?'停止后臺站點(diǎn)'
??????????????sh?'ssh?-i?~/.ssh/id_rsa?root@115.159.114.65?-p?1200?-tt?"systemctl?stop?blogsysmgr"'
??????????????dir("${WORKSPACE}/BlogSysManagement/bin/Release/netcoreapp3.1/linux-x64/publish/"){
??????????????????????sh?'scp?-P?1200?-i?~/.ssh/id_rsa?-r?./?root@115.159.114.65:/var/www/blogsysmgr'?
??????????????}
??????????????echo?'重啟后臺站點(diǎn)'
??????????????sh?'ssh?-i?~/.ssh/id_rsa?root@115.159.114.65?-p?1200?-tt?"systemctl?restart?blogsysmgr"'
?????
??????????????echo?'系統(tǒng)發(fā)布成功'
????????????}
????????}
????}
}
完成以上步驟后就可以開始測試構(gòu)建啦.
gitee+jenkins 實(shí)現(xiàn)代碼自動發(fā)布流程大概的流程
總結(jié)起來就是:
1、提交代碼到gitee
2、gitee通過Webhook鉤子通知jenkins gitee插件
3、gitee插件觸發(fā)構(gòu)建(Gitee API V5 Token驗(yàn)證)
4、git插件拉取代碼(通過SSH Username with Private key身份驗(yàn)證方式)
5、執(zhí)行編譯腳本
6、發(fā)布到應(yīng)用服務(wù)器,另外需要注意的是 jenkins 默認(rèn)是以jenkins用戶來執(zhí)行的,因此需要開通jenkins用戶能執(zhí)行bash的權(quán)限,以及創(chuàng)建git插件身份驗(yàn)證秘鑰的時(shí)候一定要以jenkins用戶登錄去創(chuàng)建,否則要拉取代碼的時(shí)候會出現(xiàn)權(quán)限問題。
??歡迎關(guān)注我(Net數(shù)字智慧化基地),里面有很多高價(jià)值技術(shù)文章,是你刻苦努力也積累不到的經(jīng)驗(yàn),能助你升職+漲薪??!
??點(diǎn)擊下方卡片關(guān)注公眾號,里面有很多大佬的技術(shù)文章,能助你快速成長。還可免費(fèi)領(lǐng)取如下15個(gè)視頻教程!回復(fù)'面試',獲取C#/.NET/.NET Core面試寶典
回復(fù)'C#',領(lǐng)取零基礎(chǔ)學(xué)習(xí)C#編程
回復(fù)'NET',領(lǐng)取.NET零基礎(chǔ)入門到實(shí)戰(zhàn)
回復(fù)'Linux',領(lǐng)取Linux從入門到精通
回復(fù)'wpf',領(lǐng)取高薪熱門【W(wǎng)PF上位機(jī)+工業(yè)互聯(lián)網(wǎng)】從零手寫實(shí)戰(zhàn)
回復(fù)'Modbus',領(lǐng)取初識C#+上位機(jī)Modbus通信
回復(fù)'PLC',領(lǐng)取C#語言與西門子PLC的通信實(shí)操
回復(fù)'blazor',領(lǐng)取blazor從入門到實(shí)戰(zhàn)
回復(fù)'TypeScript',領(lǐng)取前端熱門TypeScript系統(tǒng)教程
回復(fù)'vue',領(lǐng)取vue前端從入門到精通
回復(fù)'23P',領(lǐng)取C#實(shí)現(xiàn)23種常見設(shè)計(jì)模式
回復(fù)'MongoDB',領(lǐng)取MongoDB實(shí)戰(zhàn)
回復(fù)'Trans',領(lǐng)取分布式事務(wù)
回復(fù)'Lock',領(lǐng)取分布式鎖實(shí)踐
回復(fù)'Docker',領(lǐng)取微服務(wù)+Docker綜合實(shí)戰(zhàn)
回復(fù)'K8s',領(lǐng)取K8s部署微服務(wù)文章來源:http://www.zghlxwxcb.cn/news/detail-835258.html
回復(fù)'加群',進(jìn).NET技術(shù)社區(qū)交流群?文章來源地址http://www.zghlxwxcb.cn/news/detail-835258.html
到了這里,關(guān)于ASP.NET Core + Jenkins實(shí)現(xiàn)自動化發(fā)布的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!