前言
什么是持續(xù)集成呢?Continuous integration(CI)。
持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作,通常每個(gè)成員至少集成一次,也就意味著每天可能會發(fā)生多次集成。每次集成都通過自動化的構(gòu)建(包括編譯,發(fā)布,自動化測試)來驗(yàn)證,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤。許多團(tuán)隊(duì)發(fā)現(xiàn)這個(gè)過程可以大大減少集成的問題,讓團(tuán)隊(duì)能夠更快的開發(fā)內(nèi)聚的軟件。
如果沒有持續(xù)集成會有哪一些問題呢?模塊項(xiàng)目接口部署不及時(shí),接口不通。每次需要手動打包最新的代碼進(jìn)行部署、發(fā)布代碼、線上部署都是純手工。容易出錯(cuò)。浪費(fèi)時(shí)間。
現(xiàn)在加上持續(xù)集成解決的問題呢?項(xiàng)目構(gòu)建自動化、集成的詳細(xì)信息及歷史記錄的記錄、使用統(tǒng)一的管理、固定規(guī)定的部署流程、每天至少集成一次。
安裝
?
這里我采用的是使用Tomcat配合jenkins一起使用的來達(dá)成持續(xù)集成的目的。
一、安裝Tomcat
從官網(wǎng)下載Tomcat。下載地址:http://tomcat.apache.org/。 <http://tomcat.apache.org/。>
?
?
?
?
這里我選擇的是32-bit/64-bit Windows Service Installer
<http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.45/bin/apache-tomcat-8.5.45.exe>
?(pgp
<https://www.apache.org/dist/tomcat/tomcat-8/v8.5.45/bin/apache-tomcat-8.5.45.exe.asc>
,?sha512
<https://www.apache.org/dist/tomcat/tomcat-8/v8.5.45/bin/apache-tomcat-8.5.45.exe.sha512>
)這個(gè)版本。然后依次安裝就可以了。
接下來配置環(huán)境變量:
一、修改設(shè)置:CLASSPATH:(.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%)。注意是第一個(gè)符號點(diǎn)??!
二、新增設(shè)置:CATALINA_HOME:(D:\tool\apache-tomcat-7.0.57)括號內(nèi)為路徑名。
三、修改設(shè)置:path:(;%JAVA_HOME%;%JRE_HOME%\jre\bin)若以前配置java環(huán)境時(shí)配置過則不要再次配置。
?安裝就差不多完成了,我們在瀏覽器輸入http://localhost:8080/來看看是否出現(xiàn)以下頁面,出現(xiàn)了的話就說明安裝成功了。
?
?
?
?
?
二、安裝JDK
安裝JDK可以查閱這篇文章——https://www.runoob.com/java/java-environment-setup.html
<https://www.runoob.com/java/java-environment-setup.html>
三、安裝Jenkins
一切準(zhǔn)備就緒之后,就開始安裝jenkins了,下載地址:https://jenkins.io/download/
<https://jenkins.io/download/>。前往地址下載jenkins的
war包。然后將war包放置在前面安裝的Tomcat的目錄之下(C:\Program Files\Apache Software
Foundation\Tomcat 8.5\webapps——我的地址是這個(gè))。
然后在瀏覽器中輸入http://localhost:8080/jenkins/ <http://localhost:8080/jenkins/>。
訪問,安裝成功的話就會出現(xiàn)jenkins的界面
?
?
?
這里根據(jù)提示我們找到目錄之下就可以獲取密碼了。接下來會出現(xiàn)插件安裝的一個(gè)選擇,新手直接選擇新手入門推薦安裝就好了。
?
?
?
?
?
?
這里有時(shí)會出現(xiàn)安裝失敗或者鏈接失敗的情況,多試幾次就好了。一般是網(wǎng)絡(luò)的問題。
??
?
?
?
?
創(chuàng)建管理員用戶之后就可以正式開始配置jenkins了。
配置
一、插件安裝
這里需要安裝暫且有三個(gè)插件,一個(gè)是MSBuild Plugin
<http://wiki.jenkins-ci.org/display/JENKINS/MSBuild+Plugin>、一個(gè)是 Publish Over SSH
、一個(gè)是Email Extension Plugin
<https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin>
。前者是用來作為編譯的插件,后者是用來作為連接服務(wù)器的插件、最后一個(gè)則是用來配置郵件發(fā)送的插件了。
??
?
?
二、郵箱配置
進(jìn)入系統(tǒng)設(shè)置,正式開始配置郵件發(fā)送的配置。
?
?
?
?
首先找到Jenkins Location設(shè)置系統(tǒng)管理員的郵件地址。
?
?
?
?
然后找到Extended E-mail Notification設(shè)置,這里就可以開始設(shè)置郵件的發(fā)送配置了。這里我采用的是qq郵箱的配置。?
?
?
?
?
?
?
?
?
?
SMTP server——SMTP 服務(wù)器的配置
Default user E-mail suffix——默認(rèn)電子郵件的后綴
User Name——這里設(shè)置的是發(fā)件人信息([email protected]在這里就輸入12345678)
Password——這里不是填寫密碼,這里輸入的是開通SMTP 的授權(quán)碼
SMTP port——SMTP 默認(rèn)端口開啟465
Default Content Type——郵件內(nèi)容的格式
Default Recipients——默認(rèn)收件人
Default Subject——默認(rèn)主題
Default Content——默認(rèn)內(nèi)容
?
郵件通知內(nèi)容的配置的模板:
?
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="
JOB_NAME"}-第${BUILD_NUMBER}次構(gòu)建日志</title> </head> <body leftmargin="8"
marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%"
cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma,
Arial, Helvetica, sans-serif"> <tr> 本郵件由系統(tǒng)自動發(fā)出,無需回復(fù)!<br/>
各位同事,大家好,以下為${PROJECT_NAME }項(xiàng)目構(gòu)建信息</br> <td><font color="#CC0000">構(gòu)建結(jié)果 -
${BUILD_STATUS}</font></td> </tr> <tr> <td><br /> <b><font color="#0B610B"
>構(gòu)建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr>
<td> <ul> <li>項(xiàng)目名稱 : ${PROJECT_NAME}</li> <li>構(gòu)建編號 : 第${BUILD_NUMBER}次構(gòu)建</li>
<li>觸發(fā)原因: ${CAUSE}</li> <li>構(gòu)建狀態(tài): ${BUILD_STATUS}</li> <li>構(gòu)建日志: <a href="
${BUILD_URL}console">${BUILD_URL}console</a></li> <li>構(gòu)建 Url : <a href="
${BUILD_URL}">${BUILD_URL}</a></li> <li>工作目錄 : <a href="${PROJECT_URL}ws"
>${PROJECT_URL}ws</a></li> <li>項(xiàng)目 Url : <a href="${PROJECT_URL}"
>${PROJECT_URL}</a></li> </ul> <h4><font color="#0B610B">失敗用例</font></h4> <hr
size="2" width="100%" /> $FAILED_TESTS<br/> <h4><font color="#0B610B"
>最近提交(#$SVN_REVISION)</font></h4> <hr size="2" width="100%" /> <ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d
[%a] %m</li>"} </ul> 詳細(xì)提交: <a href="${PROJECT_URL}changes"
>${PROJECT_URL}changes</a><br/> </td> </tr> </table> </body> </html>
?
?
三、?Publish over SSH配置
接下來我們就開始配置SSH連接服務(wù)器配置了。
?
?
?
?
?
按照上面的配置進(jìn)行設(shè)置就可以了。
Passphrase——密碼或密鑰
Name——此連接服務(wù)的名稱
Hostname——服務(wù)器的地址
Username——服務(wù)器用戶名
Remote Directory——傳輸?shù)倪h(yuǎn)程目錄
Use password authentication, or use a different key——此選項(xiàng)可另設(shè)置其他的密碼
四、?全局工具配置
進(jìn)入Global Tool Configuration設(shè)置全局工具設(shè)置,這里首先我們得設(shè)置git,這個(gè)不設(shè)置后面可能就拉取不到代碼了。再然后設(shè)置MSBuild
,這個(gè)設(shè)置就是用來給項(xiàng)目進(jìn)行編譯的。
?
?
?
?
構(gòu)建
到這里安裝和配置都已經(jīng)結(jié)束了。我們可以正式開始構(gòu)建項(xiàng)目了。這里我們分為對.Net 和.Net Core項(xiàng)目進(jìn)行集成。配合使用則是Git進(jìn)行代碼的提交及拉取。
這里我們選擇開始構(gòu)建一個(gè)自由風(fēng)格的項(xiàng)目。
?
?
然后進(jìn)行項(xiàng)目描述填寫
?
?
?
?
這里就開始設(shè)置源代碼管理了。選擇git并輸入地址。隨后點(diǎn)擊高級,設(shè)置用戶名和密碼,然后返回此頁面選擇剛設(shè)置的證書即可
?
?
?
?
然后開始構(gòu)建觸發(fā)器,這里我設(shè)置的觸發(fā)器的時(shí)間是每分鐘輪詢是否觸發(fā)。時(shí)間大家可以根據(jù)情況而定
?
?
?
?
這里的構(gòu)建環(huán)境,大家可以視情況而定。
?
?
?
?
到這里就正式開始構(gòu)建配置了。這里我選擇的是使用MSBuild構(gòu)建VS項(xiàng)目。
?
?
?
/t:Rebuild /p:Configuration=Release /p:DeployOnBuild=true;PublishProfile=
FolderProfile/p:OutputPath=D:\Jenkins_Publish
?
MSBuild Build
File——構(gòu)建的目錄(例如我的就填寫的C:\Windows\ServiceProfiles\LocalService\.jenkins\workspace\Test_Net\WebApplication1\WebApplication1.csproj)
Command Line Arguments——構(gòu)建的命令 Rebuild ——重新生成 Configuration=Release——生成Release版本
DeployOnBuild=true;PublishProfile=
FolderProfile——設(shè)置運(yùn)行部署生成,并且執(zhí)行FolderProfile目錄下的生產(chǎn)目錄(FolderProfile文件在Properties目錄中)
OutputPath——輸出路徑
?
這里我看開始配置構(gòu)建完成之后的操作的短信配置了。
?
?
?
?
?
到這里就已經(jīng)都配置完成了,我們可以返回主頁面開始構(gòu)建了。
?
?
?
?
點(diǎn)擊立即構(gòu)建,不一會我們就收到了郵件
?
?
?
?
到這里我們使用git加上jenkins搭建的.Net 項(xiàng)目持續(xù)集成就完成了。那么我們接下來看對于.Net Core項(xiàng)目如何進(jìn)行持續(xù)集成的呢。因?yàn)?Net
Core項(xiàng)目可以部署在Linux上,所以下面我們就以Linux作為服務(wù)器。在本地進(jìn)行集成然后發(fā)布到Linux
。其他的操作都是一樣的,主要在構(gòu)建操作和構(gòu)建后操作不同。我們下面主要介紹構(gòu)建操作和構(gòu)建后操作。
?
?
?
?
dotnet restore dotnet build dotnet publish -c:Release -r centos.7-x64
--self-containedfalse -o
C:\Windows\ServiceProfiles\LocalService\.jenkins\workspace\Test_Net_Core\WebApplication2\bin\Release\netcoreapp2.
2\centos.7-x64 echo 壓縮開始 cd
C:\Windows\ServiceProfiles\LocalService\.jenkins\workspace\Test_Net_Core\WebApplication2\bin\Release\netcoreapp2.
2 7z a -tzip publish.zip
C:\Windows\ServiceProfiles\LocalService\.jenkins\workspace\Test_Net_Core\WebApplication2\bin\Release\netcoreapp2.
2\centos.7-x64 echo 壓縮結(jié)束
?
dotnet restore——還原 dotnet build ——構(gòu)建 dotnet publish——發(fā)布 -c:Release ——Release 版本
-r centos.7-x64 ——linux版本 --self-contained false ——框架依賴 -o
D:\Jenkins_CorePublish ——發(fā)布文件到此目錄下
?
?
后面增加了一個(gè)壓縮命令,將發(fā)布文件壓縮成一個(gè)壓縮包,這個(gè)是方便后續(xù)上傳到服務(wù)器的。SSH
上傳僅上傳文件。不帶上傳文件夾。所以我們需要進(jìn)行壓縮。后續(xù)上傳到服務(wù)器再進(jìn)行解壓。
然后開始配置構(gòu)建后操作,一樣的需要配置郵件信息,郵件信息與上面的配置一樣即可。這里我們主要配置如何連接SSH。
?
?
?
?
這里需要注意的是上傳的源文件。這里基目錄是你的jenkins工作目錄,所以需要相對于填寫位置
這里配置上傳文件及解壓等操作然后重新啟動linux服務(wù)器上的服務(wù)完成發(fā)布。
cd /home/hlz rm -f publish unzip publish.zip rm -f publish.zip cd /root
systemctl enable Test.service systemctl start Test.service systemctl status
Test.service
?
總結(jié)
到這里在windows上使用jenkins
持續(xù)集成就完成了。中間還有一些細(xì)節(jié)需要另行配置的都可以自由發(fā)揮,主要流程大概就是這么多了。這里的是通過在本地繼續(xù)集成然后通過Publish over SSH
插件傳輸?shù)絣inux服務(wù)器進(jìn)行.Net Core項(xiàng)目的部署的。那么我們也可以直接在Linux上部署Jenkins
,這樣就不需要這一步連接服務(wù)器的操作了??梢灾苯釉诜?wù)器上一次性解決問題。
?
逃避不一定躲得過,面對不一定難受.轉(zhuǎn)身不一定最軟弱.
?
歡迎大家掃描下方二維碼,和我一起踏上設(shè)計(jì)模式的闖關(guān)之路吧!
?
?
熱門工具 換一換