一、jenkins自動構建
什么自動構建、有啥用:
觸發方式
代碼提交(Git push)
定時任務(如每天凌晨構建)
手動點擊等方式(立即執行)
執行內容
從 Git/SVN 拉取最新代碼
運行編譯(如 Maven/Gradle)
執行單元測試、代碼掃描
生成部署包(如 JAR/WAR/Docker 鏡像)
自動部署到測試/生產環境
核心價值
省時:無需手動操作,提交代碼即觸發流程。
可靠:避免人為失誤,確保每次構建一致。
快速反饋:失敗時立即通知,問題早發現早修復。
一句話總結:
Jenkins 自動構建 = “代碼提交后,全流程自動化處理,直到軟件可運行”。
二、自動構建方式
注意:版本不同,自動構建按鈕的位置有差距,反正找到自動構建進行。
點擊項目
?點擊配置
方法1:觸發遠程構建?
設置密碼后保存
目前構建是第5次
現在訪問jenkins網址+后面的路徑和密碼試試,能不能自動構建
?方法2:其他項目構建后觸發
意思:就是前面有個項目構建了,構建完成后觸發我的項目構建,這種適用于有子項目或者項目有關系的。
目前我的項目構建序號是6,現在我執行我前面那個項目“web_demo_liushui”
刷新項目一看確實自動構建了
方法3:定時任務構建
* * * * * :表示分 時 日 月 周,和linux定時任務類似,但不完全一樣,到時候直接讓deepseek給你生成想要的時間也行,知道大概邏輯即可。
以下是案例:
現在我們設置下時間,保存看看到時間后,構建不
可以看到我設置的是下午6點47分,時間到了后刷新一下,發現構建了
方法4:輪詢SCM
輪詢SCM,是指定時掃描本地代碼倉庫的代碼是否有變更,如果代碼有變更就觸發項目構建。?
大概意思:我用的gitlab倉庫,他會掃描我的gitlab,如果gitlab變更了,就會執行構建,如果gitlab沒更新,那一直不會自動構建。
注意:這次構建觸發器,Jenkins會定時掃描本地整個項目的代碼,增大系統的開銷,不建議使用。
現在我設置一下,設置為2分鐘掃描一次gitlab,如果gitlab有變動,給我自動構建。
2分鐘過了,一直沒構建(以為我沒改代碼)
現在我idea改代碼,提交到gitlab
提交成功后,等待2分鐘,刷新項目。
方法5:githook自動觸發構建
剛才我們看到在Jenkins的內置構建觸發器中,輪詢SCM可以實現Gitlab代碼更新,項目自動構建,但是該方案的性能不佳。
那有沒有更好的方案呢?有的。就是利用Gitlab的webhook發現代碼提交或者修改后,gitlab立即觸發項目自動構建。
jenkins設置
(1)下載插件:GitLab 、 Gitlab Hook
(注意:新版本jenkins只安裝GitLab即可,老版本還得安裝Gitlab Hook)
遇到的問題:安裝這個插件時,部分安裝失敗,看報錯是已存在部分插件需要先手動跟新下。
插件安裝完成后,這里多了一個這種方式的觸發器
注意這里有個地址,就是jenkins的項目地址,這個地址要配置到gitlab,下面會說。?
(2)jenkins的全局變量設置
關閉一個東西
?gitlab設置
root登錄,開啟githook功能,且配置地址
開啟githook功能
?
設置項目的發送地址
?
?
添加成功后,測試一下。發現測試通了
?
驗證?
修改idea代碼,提交,會自動構建
看tomcat項目更新了,沒問題
?三、分支構建
例如說我們實際項目中會使用時又uat、sit、生產等環境。
jenkins可以根據設置,選擇我們想啟動的分支。
jenkins設置
進入項目,添加參數
設置參數名和默認值
?
自帶默認值
?
idea設置
?
提交代碼,build一下
?
新增一個uat分支
新增一個uat分支
?
創建成功,已經在uat分支了
同時查看gitlab也多了一個uat分支
修改代碼,提交到uat分支
?
?build選擇uat
看日志,看tomcat已經是uat項目
?
?build選擇master
?四、郵箱配置
安裝插件
email extension template
配置郵箱
插件安裝成功后,進入全局配置
?配置這一塊
在配置這一塊
在最上面,搜索系統管理員郵箱地址配置上
?
當面倒數第2個圖里的那個test config……也可以驗證下郵箱是不是通了
驗證郵箱配置成功
?
?給項目配置郵件發送
給具體某個項目配置,項目啟動成功后,發送郵箱,idea新增文件email.html,內容如下
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構建日志</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><td>(本郵件是程序自動下發的,請勿回復!)</td></tr><tr><td><h2><font color="#0000FF">構建結果 - ${BUILD_STATUS}</font></h2></td></tr><tr><td><br /><b><font color="#0B610B">構建信息</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>項目名稱 : ${PROJECT_NAME}</li><li>構建編號 : 第${BUILD_NUMBER}次構建</li><li>觸發原因: ${CAUSE}</li><li>構建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li><li>構建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li><li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li><li>項目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li></ul></td></tr><tr><td><b><font color="#0B610B">Changes Since LastSuccessful Build:</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>歷史變更記錄 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li></ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}</td></tr><tr><td><b>Failed Test Results</b><hr size="2" width="100%" align="center" /></td></tr><tr><td><prestyle="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre><br /></td></tr><tr><td><b><font color="#0B610B">構建日志 (最后 100行):</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><textarea cols="80" rows="30" readonly="readonly"style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea></td></tr>
</table>
</body>
</html>
然后jenkinsfile引用上面的文件
pipeline {agent anystages {stage('pull code') {steps {checkout scmGit(branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'dd118ea3-a9af-414b-9e56-3316395b041f', url: 'http://192.168.157.159:82/testjenkinszu/web_demo.git']])}}stage('build project') {steps {sh 'mvn clean package'}}stage('publis project') {steps {deploy adapters: [tomcat9(credentialsId: '0c67a409-c11f-46a0-ac46-f659c6097b0a', path: '', url: 'http://192.168.157.160:8090')], contextPath: null, war: 'target/*.war'}}}post {always{emailext(subject: '構建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',body: '${FILE,path="email.html"}',to:'2311685383@qq.com')}}
}
然后提交到gitlab,build一下,看看有沒發郵箱。我這沒法,但沒報錯,方式是這么個方法,沒法郵箱也沒排查出來,估計某個地方不對。
這個發郵箱生產、測試估計都用不到,用到了在排查吧。?