1.1 拉取Jenkins鏡像
進入官網:https://jenkins.io/download/
點擊Docker進入Docker Hub

我們這里選擇jenkins/jenkins:lts版本的Jenkins,因為Jenkins:latest版本是官方版本,而且是英文的,下載插件什么的因為牆的各種原因導致無法下載和下載報錯
復制紅框中的命令:docker pull jenkins/jenkins:lts拉取鏡像,如果下載鏡像比較慢可以考慮給docker設置一個鏡像加速【推薦使用aliyun的,不會的可以百度一下】

配置 Docker 鏡像站(此命令可以加速下載)
Linux
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
該腳本可以將 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。適用於 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有細微不同。
在服務器上輸入命令:
docker pull jenkins/jenkins:lts
- 1


注意查看 docker鏡像中,Jenkins版本是否是最新版
命令:
docker inspect b137a5753eb1
- 1

1.2 創建目錄
為了方便后期Jenkins中配置文件的修改,同時,防止jenkins中重要文件因為容器損毀或刪除導致文件丟失,因此需要將/var/jenkins_home目錄對外掛載
mkdir -p /apps/devops/jenkins
對目錄開放docker進程操作的完全讀寫的權限
chmod 777 /apps/devops/jenkins

1.3 啟動容器
docker run -itd -p 9003:8080 -p 9004:50000 --restart always -v /apps/devops/jenkins:/var/jenkins_home --name jenkins jenkins/jenkins:lts
-p 端口映射:Jenkins是Java程序,默認端口是8080
1.4 打開Jenkins管理頁面
訪問地址:
http://192.168.143.128:9003
- 1

出現如上頁面,代表jenkins啟動成功。
1.5 查看日志獲取初始密碼
命令:
docker logs -f jenkins
- 1
復制如下圖中紅框內的初始密碼
當然,你也可以不通過日志查看,你可以進入黃色框中描述的文件查看初始密碼也是一樣的,二選一
將密碼復制、粘貼到如下框框中,進入jenkins,需要等待數十秒(可能更久)!
如果出現下圖情況,等很久,還沒有進入
解決方案:
① 進入我們前面掛載的Jenkins目錄 /apps/devops/jenkins,執行命令:
vi hudson.model.UpdateCenter.xml
② 將文件hudson.model.UpdateCenter.xml中https://updates.jenkins.io/update-center.json改成http://updates.jenkins.io/update-center.json(把https改成http)

③ 保存,重啟Jenkins容器
-
[root@localhost jenkins] # docker restart jenkins
-
jenkins
-
[root@localhost jenkins] #
④ 重新進入Jenkins管理頁面:http://192.168.142.128:9003(稍等一會兒,就可以進入步驟6.安裝建議的插件頁面)
1.6 安裝推薦的插件
如下圖所示,左側顯示安裝推薦的插件,右側選擇自定義安裝插件。
我們選擇安裝推薦的插件,點擊左側的(中間可能會安裝很長時間。有時候卡住不動了的話,可以重新啟動kenkins在輸入密碼進入,沖洗刷新下載下列插件)
如果全部都能正確安裝,則會自動進入如下圖界面

將信息輸入對應輸入框內,點擊保存並完成,進入如下圖所示
1.7 成功安裝Jenkins
默認,點擊保存並完成,OK,這就算搭建成功了(因為我是在VMware CentOS7上使用Docker搭建的Jenkins,GitLab,gitlab又非常耗費資源,所以可能會卡住不動,重啟一下Jenkins就可以了),如圖
2. 配置Jenkins
2.1 設置Jenkins時區為北京時間
點擊系統管理——腳本命令行
輸入腳本並運行:
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
- 1
如圖顯示Result表示成功
2.2 安裝自動化構建和部署所需的插件
所需插件:【Maven Integration】、【Pipeline Maven Integration】、【Gitlab】、【Gitlab hook】、【SSH】、【Publish Over SSH】
進入系統管理——插件管理
① 安裝Maven插件:點擊可選插件——過濾MavenIntegration插件——勾選Maven Integration和Pipeline Maven Integration——點擊直接安裝
如圖,開始安裝Maven插件
② 安裝Gitlab插件:點擊可選插件——過濾Gitlab插件——勾選Gitlab和Gitlab hook——點擊直接安裝
如圖,開始安裝Gitlab插件
③ 安裝SSH插件和Publish Over SSH插件:點擊可選插件——過濾SSH插件——勾選SSH和Publish Over SSH——點擊直接安裝
安裝Publish Over SSH插件的原因:因為本方式是使用docker啟動jenkin服務,所以在jenkins后續執行構建任務時候,需要在build成功后,將服務的jar包[以spring boot]服務為例,需要將jar包拷貝到Dockerfile所在服務器的指定目錄,進行微服務的啟動;所以,此處需要配置SSH服務器的連接,意思就是在jenkins的任務結束后,去執行指定的服務器上的shell命令,做spring boot或cloud服務的鏡像的構建,容器的運行,等一系列的事情

如圖,開始安裝SSH插件
插件全部安裝完成后,可以重啟一下Jenkins
2.3 添加憑據

點擊添加憑據——輸入宿主機服務器的用戶名和密碼
點擊確定后

2.4 配置SSH remote hosts
這個配置是干什么的呢?配置SSH連接Dockerfile所在服務器的相關信息,並添加憑證,最后測試連接並保存,以備后面使用!!!
點擊系統管理——系統設置
找到配置——下拉選擇SSH remote hosts
如下圖,輸入對應的信息,並校驗是否連接成功!成功后,點擊應用——點擊保存
2.5 全局工具配置
由於我們要實現的是SpringBoot項目的自動化部署操作,所以需要安裝JDK、Git、Maven、Docker
2.5.1 安裝JDK
可以安裝多個,根據項目JDK版本需求
輸入自定義JDK名稱——勾選自動安裝——輸入Oracle賬戶、密碼——選擇JDK版本——勾選同意協議

2.5.2 安裝Git
輸入自定義Git名稱——勾選自動安裝
2.5.3 安裝Maven
輸入自定義名稱——勾選自動安裝——選擇版本
2.5.4 安裝Docker
輸入自定義名稱——勾選自動安裝
最后,點擊應用——點擊保存,OK,完成
那這些在什么時候才真正的安裝了呢?
是在初次使用到JDK或Maven的時候,才會去自動安裝
2.6 全局安全配置
點擊系統管理——全局安全配置
去掉防止跨站點請求偽造前的勾——點擊應用——保存
這里要說明一下為什么去掉這個勾選:
webhooks與jenkins配合使用時提示:HTTPStatus403-Novalidcrumbwasincludedintherequest,這是因為jenkins在http請求頭部中放置了一個名為.crumb的token。在使用了反向代理,並且在jenkins設置中勾選了“防止跨站點請求偽造(Prevent Cross Site Request Forgery exploits)”之后此token會被轉發服務器apache/nginx認為是不合法頭部而去掉。導致跳轉失敗。
2.7 關於webhook
這里需要聲明一下:
-
1.webhook網絡鈎子
-
可以看成是一個callback 回調方法
-
本回調方法核心即包含:
-
觸發條件+可供觸發的URL+密碼(可選)
-
觸發條件為:push、 merge、PR(即 New Pull Request)等等git操作,
-
比如你提交一個push操作,就會觸發 URL請求,會以POST請求去請求這個URL。
-
除此以外,你還可以自己指定這個POST請求的數據格式。( JSON,x-www-form-urlencoded等)。
-
-
2.webhook是gitlab端的
-
觸發webhook的條件,可以自行配置,都是本地對gitlab的git操作
-
觸發后去請求的 URL地址,是Jenkins提供的。也就是觸發后是去請求Jenkins的
-
-
3.而實現代碼從gitlab到jenkins到自動部署,webhook就是gitlab和jenkins之間的關鍵點。
-
后續會先配置jenkins,以獲取到 URL和Token,拿着這兩個東西去gitlab配置webhook,即可。
-
同時,webhook本身還會有很多的觸發條件可以勾選。后續步驟可見!
3. 新建Jenkins任務
3.1 點擊新建任務,輸入名稱【本處輸入名稱注意】
【注意,本名稱一般和項目名稱一致,因為本名稱會在jenkins工作空間下生成目錄,類似於IDEA或Ecplise的工作空間的概念】
【所以,一般情況下,保證本名稱=項目名稱=docker鏡像名稱=docker容器名稱 這樣能盡可能的減輕jenkins配置的shell命令的復雜性!從而形成一定的規范!!】
選擇構建一個Maven項目【因為是springboot的服務】

3.2 源碼管理
輸入描述信息,源碼管理選擇Git,從gitlab復制克隆地址粘貼到Repository URL中,沒有報錯就表示OK的,(注意,這里我是克隆HTTP方式的地址,如果你是克隆SSH方式的地址,你需要添加Creadentials,配置個API Token就可以了)
3.3 構建觸發器
這里會獲取到文章開始提到的URL和Token,這兩個東西需要記錄下來,供gitlab配置webhook使用
點擊高級,拉下來找到Generate並點擊,生成一串Secret Token:24d90d26b374ae2df2cda01c17338843(拿小本本記一下這個Token,等下跟上面的URL都會用到的)
3.4 添加webhook
前往gitlab,進入要構建的項目,在setting中選擇Integrations,輸入URL和Secret Token 這兩在上面圖中已經給你標注了,去掉Enable SSL verification的勾選
根據自己的需求,勾選webhook的觸發事件都有哪些
點擊Add webhook,如圖表示成功添加了webhook
3.5 構建環境
勾選Add timestamps to the Console Output,等下可以看到控制台打印的信息,這個根據自己的需求勾選哈
3.6 Pre Steps(構建之前的步驟)
配置前一步需要做的事情是:清理本項目在jenkins的workspace中的歷史文件夾
你可以不用知道WORKSPACE具體的地址在哪里,因為下方有鏈接可以查看到當前jenkins中有哪些可用的變量供你使用
默認WORKSPACE地址:/var/jenkins_home/workspace(如果你jenkins是docker啟動的,並且掛載了目錄在宿主機,那你在宿主機也是可以看到的,即 /apps/Devops/jenkins/workspace)
本處選擇是是,執行shell,則表示本處配置的shell命令,是默認在jenkins容器中執行的,而不是在宿主機上
下拉選擇執行 shell
打開可用的環境變量列表看看,WORKSPACE是我們要的
在執行 shell的命令中輸入以下命令,設置全局變量
-
SERVER_NAME_1=springboot
-
echo "=========================>>>>>>>工作空間WORKSPACE的地址:$WORKSPACE "
-
cd $WORKSPACE
-
echo "=========================>>>>>>>進入工作空間WORKSPACE,清除工作空間中原項目的工作空間$SERVER_NAME_1 "
-
rm -rf $SERVER_NAME_1
-
echo "=========================>>>>>>>清除工作空間中原項目的工作空間$SERVER_NAME_1 ......成功success"
注意:本處的SERVER_NAME_1=springboot 是配置項目的名稱
3.7 Build(構建)
我們是springboot項目,所以用到maven,這里設置一下全局操作,clean項目,並打成jar包,所以這里輸入:
clean package

3.8 Post Steps(執行任務)
只在jenkins構建成功后,才執行這一步
因為最后的構建成功的maven項目的jar包是以docker啟動服務為目的,所以最后的docker操作,一定是在jenkins容器以外的服務器上運行的,可能是本機宿主機,也可能是遠程的服務器,這個根據自己的情況去配置
本處選擇,在遠程的SSH執行shell腳本
選中只有構建成功才執行這些命令,然后選擇Execute shell script on remote host using ssh
創建SSH執行命令,命令內容太多了,從創建文件夾和Dockerfile到docker容器運行,有需要的自己去下載,SSH執行命令下載地址(可以私聊找我要)
OK,到這里基本的任務已經新建成功,至於后續的兩個步驟,根據自己的需求自行配置,沒有難度的
點擊應用,保存
3.9 測試
測試push事件觸發自動化構建和部署
前往gitlab,剛我們新增的webhook,點擊test下拉選擇push events,出現HTTP 200表示OK了
回到Jenkins可以看到任務列表,進入任務列表中的springboot,可以看到構建歷史
點擊構建歷史中的其中一個任務,可以看到真正構建中
點擊控制台輸出,可以看到執行的命令都在控制台輸出了
看到控制台輸出最后顯示:SUCESS 表示成功了
在服務器上執行命令
docker ps
可以看到我們啟動起來的springboot容器
在瀏覽器輸入:http://服務器ip:9009/test 即可訪問剛自動部署的項目
4. 參考資料
https://blog.csdn.net/cjiankai/article/details/98213024?utm_source=app
后記:配置發送郵件:
完成基於jenkins的持續集成部署后,任務構建執行完成,測試結果需要通知到相關人員。這篇博客,介紹如何在jenkins中配置郵件通知的方法。。。
一、安裝郵件插件
由於Jenkins自帶的郵件功能比較雞肋,因此這里推薦安裝專門的郵件插件,不過下面也會順帶介紹如何配置Jenkins自帶的郵件功能作用。
可以通過系統管理→管理插件→可選插件,選擇Email Extension Plugin插件進行安裝:

由於我已經安裝了該插件,因此這里顯示在已安裝目錄下,還未安裝的童鞋可以通過右上角的搜索框搜索改插件,然后在線安裝,安裝好之后重啟Jenkins。

二、系統設置
通過系統管理→系統設置,進行郵件配置:

1、設置jenkins地址和管理員郵箱地址

2、設置發件人等信息
PS:這里的發件人郵箱地址切記要和系統管理員郵件地址保持一致(當然,也可以設置專門的發件人郵箱,不過不影響使用,根據具體情況設置即可)

上圖的默認收件人郵箱可以添加多人,中間用英文半角逗號隔開即可。
3、配置郵件內容模版

附:郵箱內容模版(Default Content):
-
-
<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>
-
本郵件由系統自動發出,無需回復! <br/>
-
各位同事,大家好,以下為${PROJECT_NAME }項目構建信息 </br>
-
<td><font color="#CC0000">構建結果 - ${BUILD_STATUS}</font></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>構建狀態: ${BUILD_STATUS}</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>
-
-
<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>
-
詳細提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
-
-
</td>
-
</tr>
-
</table>
-
</body>
-
</html>
4、設置郵件觸發機制

上面的幾步完成后,點擊應用,保存即可。
5、配置Jenkins自帶的郵件功能
配置內容如下,和Email Extension Plugin插件同樣的配置,可以通過勾選通過發送測試郵件測試配置按鈕來測試配置是否成功發送郵件,如下圖:

完成上面的系統設置后,點擊保存即可。
三、項目配置
在完成系統設置后,還需要給需要構建的項目進行郵件配置。
1、進入項目配置界面
進入新建的項目界面,點擊配置按鈕,進入系統配置頁面:

2、配置構建后操作模塊
進入系統配置頁面后,點擊上方的構建后操作選項,配置內容如下:

進入構建后操作的模塊,然后會看到下面的內容,具體的配置信息如圖中標注:

接上圖:

配置內容默認即可,郵件內容類型可以根據自己的配置選擇,收件人列表可以從前面的系統設置中默認收件人選項配置。
四、構建觸發郵件測試
如下圖,為我收到的測試郵件,郵件內容可以通過系統設置里面進行個性化的配置,可參考我上面的模板,或者自定義即可。

參考:
https://www.cnblogs.com/imyalost/p/8781759.html
下面是我的郵件配置


在這里掃碼獲取密碼



上圖是系統的配置
下面是項目構建后的操作通知(這是我自己的圖,可以參照下)






轉自:https://blog.csdn.net/hunheidaode/article/details/104003270?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
