持續集成工具之Jenkins使用配置

  在上一篇部落格中,我們主要介紹了DevOps理念以及java環境和jenkins的安裝,回顧請參考//www.cnblogs.com/qiuhom-1874/p/13805666.html;今天我們主要來看看jenkins常用插件的安裝、配置使用;

  我們知道在安裝jenkins的過程中,激活jenkins後,首先是讓我們安裝一些插件,我們選擇的是推薦插件;推薦插件一般都是很常用的基礎插件,也是我們使用jenkins的必須品,但這樣安裝好的jenkins在很多功能上都達不到我們使用的需求,於是我們需要額外安裝其他插件來豐富jenkins的功能;

  手動下載安裝gitlab插件

[root@node04 ~]# cd /var/lib/jenkins/plugins/
[root@node04 plugins]# wget //updates.jenkins-ci.org/latest/gitlab-plugin.hpi
--2020-10-13 20:04:19--  //updates.jenkins-ci.org/latest/gitlab-plugin.hpi
Resolving updates.jenkins-ci.org (updates.jenkins-ci.org)... 52.202.51.185
Connecting to updates.jenkins-ci.org (updates.jenkins-ci.org)|52.202.51.185|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: //updates.jenkins-ci.org/download/plugins/gitlab-plugin/1.5.13/gitlab-plugin.hpi [following]
--2020-10-13 20:04:20--  //updates.jenkins-ci.org/download/plugins/gitlab-plugin/1.5.13/gitlab-plugin.hpi
Reusing existing connection to updates.jenkins-ci.org:80.
HTTP request sent, awaiting response... 302 Found
Location: //get.jenkins.io/plugins/gitlab-plugin/1.5.13/gitlab-plugin.hpi [following]
--2020-10-13 20:04:21--  //get.jenkins.io/plugins/gitlab-plugin/1.5.13/gitlab-plugin.hpi
Resolving get.jenkins.io (get.jenkins.io)... 52.167.253.43
Connecting to get.jenkins.io (get.jenkins.io)|52.167.253.43|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: //mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/gitlab-plugin/1.5.13/gitlab-plugin.hpi [following]
--2020-10-13 20:04:22--  //mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/gitlab-plugin/1.5.13/gitlab-plugin.hpi
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8456411 (8.1M) [application/octet-stream]
Saving to: 『gitlab-plugin.hpi』

100%[==================================================================>] 8,456,411   2.21MB/s   in 3.7s   

2020-10-13 20:04:27 (2.21 MB/s) - 『gitlab-plugin.hpi』 saved [8456411/8456411]

[root@node04 plugins]# ll gitlab-plugin.hpi 
-rw-r--r-- 1 root root 8456411 Sep 12  2019 gitlab-plugin.hpi
[root@node04 plugins]# 

  提示:對於jenkins來說,每一個插件就有一種功能,我們需要用到某些功能,就必須安裝對應的插件;安裝插件我們可以去//updates.jenkins-ci.org/download/plugins/這個網站下載,把下載好的插件放到jenkins的數據目錄里有個plugins目錄下即可;

  重啟jenkins

[root@node04 plugins]# systemctl restart jenkins
[root@node04 plugins]# ls -d gitlab-plugin* 
gitlab-plugin  gitlab-plugin.hpi
[root@node04 plugins]# ll gitlab-plugin
total 4
drwxr-xr-x 2 root root 4096 Oct 13 20:06 help
drwxr-xr-x 3 root root   19 Oct 13 20:06 images
drwxr-xr-x 3 root root   38 Oct 13 20:06 META-INF
drwxr-xr-x 3 root root   17 Oct 13 20:06 WEB-INF
[root@node04 plugins]# 

  提示:可以看到重啟jenkins後,對應下載的.hpi包就自動解壓;

  驗證:登錄jenkins,查看對應插件是否已經安裝生效?

  提示:可以看到gitlab plugin插件已經在安裝好了;以上是手動安裝插件的方式,但通常如果一個插件有依賴其他插件,這種手動的安裝方式就顯得格外麻煩,因為我們要手動解決插件和插件間的依賴關係;所以通常手動安裝插件的方式很少;

  使用jenkins web影像介面安裝插件

  提示:以上我們要安裝role base插件,我們需要切換到可選插件上,然後搜索關鍵字,然後把要安裝的插件打勾,然後點擊下面的直接安裝;

  提示:這裡顯示安裝已經完成,我們需要點擊安裝完成後重啟,此時jenkins就會重啟,重啟後的插件就生效了;

  提示:當然我們也可以手動到命令行介面重啟jenkins;

  驗證:刷新web介面,去插件管理查看對應插件是否安裝好了?

  提示:可以看到對應插件已經在已安裝的列表中了;說明插件安裝好了;以上就是jenkins的插件安裝方法;

  創建用戶

  提示:返回首頁,點擊系統管理,然後找到管理用戶;

  提示:點擊新建用戶,填寫對應用戶的用戶名,密碼,郵箱,然後點擊新建用戶;

  提示:此時用戶列表中就有兩個用戶;

  驗證:登錄test帳號,看看是否可以登錄?

  提示:可以看到test用戶是可以正常登錄,並且擁有和管理員一樣的介面;這意味著我們剛才創建的test用戶是一個管理員;

  更改授權策略

  提示:點擊系統設置,找到全局安全配置里,可以看到默認授權策略是登錄用戶可以做任何事情,這也是我們剛才新建用戶test,登錄進去看到和管理員一樣的介面的原因;

  更改授權策略為role base

  提示:選擇role base 然後點擊應用就好了;

  給test用戶授權

  提示:更改授權策略為role base以後,返回主菜單,點擊系統管理,裡面就會多一個manage and assign roles的圖標,我們點擊它就可以來管理jenkins用戶的角色和角色許可權以及角色對應的用戶;

  提示:首先要添加一個角色,在role to add中輸入對應的角色名稱,然後點擊後面的add就創建好一個角色,創建好角色後,我們就可以對他做賦權,需要用到哪些許可權,就在對應的格子里打勾就好;最後點擊下面的保存或應用;如上,read only這個角色就是對全部有讀的許可權;只要關聯到該角色的用戶都會擁有同角色相同的許可權;

  關聯用戶

  提示:進入分配角色里,可以看到現在多了read only這個角色;默認情況這裡只看得到一個管理員帳號,對於test用戶,我們要在下面輸入test,然後點擊添加,然後對應的test用戶才會到上面的表中,然後我們就可以選擇給test用戶屬於哪個角色,在對應的角色下面打上對勾即可;最後點擊最下方的應用保存,此時對test用戶角色綁定就完成了;

  驗證:現在登錄test用戶,看看是否還和剛才登錄看到的介面一樣呢?

  提示:可以看到現在登錄test用戶就不是管理員介面了;

  jenkins 郵箱配置

  提示:打開系統管理,系統配置,默認情況這裡的系統管理員郵件地址是沒有的,這裡我們填寫一個互聯網郵件地址即可;然後接著往下拖,最後有一個郵件通知;

  提示:點擊開高級;這裡需提前把互聯網郵箱的smtp打開,打開方法很簡單,不會的可以去看本人部落格//www.cnblogs.com/qiuhom-1874/p/13797199.html,這篇部落格里有介紹;

  提示:填寫好以上內容,我們可以先測試下我們的配置是否正確,如果正確我們會在[email protected]的郵件中收到一份測試郵件,如下,如果有問題,這裡會提示我們;

  提示:如果能夠正常的收到郵件,說明我們配置的郵件資訊沒有問題,此時就可以點擊應用jenkins的郵件通知就配置好了;

  配置jenkins自動從gitlab上拉取程式碼到本地

  在jenkins伺服器上生成ssh密鑰對

[root@node04 ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:afCQfhOo1+JKhgsdSYpobedmlK532Ao/UIXE0Vs073c [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|    oo+ .o       |
|     o = .o      |
|  .   * +  .     |
|oo.. +.* o.      |
|+.ooo++ S  . . E |
|...+=o + .  . .  |
|. o.+=+          |
| . +*= o         |
|  ..oo+          |
+----[SHA256]-----+
[root@node04 ~]# 

  把jenkins上生成的公鑰拷貝到gitlab上

  提示:把jenkins 啟動用戶的公鑰放在gitlab上,這樣再用jenkins的啟動用戶到指定的gitlab上克隆程式碼就不會在讓我們輸入用戶名和密碼了;

  測試:在jenkins 使用root 克隆gitlab上的test項目,看看是否還要輸入密碼?

  提示:我們複製項目的克隆地址要複製基於ssh協議對克隆地址;

  提示:第一次克隆需要輸入yes確認我們連接的主機;可以看到現在用jenkins啟動用戶root克隆gitlab上的項目都是不需要輸入用戶名和密碼;

  在jenkins伺服器添加證書

  提示:到jenkins的系統管理–>manage credentials –>選擇全局–>添加憑據;填寫好上面的內容;這裡的添加證書就是把剛才在放在gitlab上的公鑰對應的私鑰放上去;必須要和gitlab上的公鑰是一對,這樣才可以實現加密解密;

  添加好憑據以後,接下來我們可以添加一個項目,然後測試,看看jenkins是否能夠自動從gitlab上把對應的項目拉到本地

  創建項目

  提示:這裡把要克隆的項目地址複製到倉庫地址欄,然後選擇對應的憑證,點擊保存;源碼管理就配置完了;

  提示:可以看到控制台輸出的日誌是成功狀態的;

  驗證:去jenkins的保存數據的目錄下,看看對應項目是否克隆下來了?

  提示:可以看到在jenkins的數據目錄下有個workspace的目錄下有一個和我們在jenkins上創建的任務名稱同名的一個目錄,裡面放著我們從gitlab上拉下來的文件;說明我們配置jenkins免密從gitlab上拉去程式碼沒有問題;後續我們就可以把這些程式碼經過處理,分批部署到其他伺服器上了;後續怎麼處理程式碼,怎麼部署,我們可以基於jenkins的pipline腳本,也可以自己寫shell腳本交給jenkins幫我們執行,以達到處理程式碼和部署相關操作;