Jenkins 使用
一、簡介
1. Make工具
這個工具是最最原始的工具了,在linux下編過程序,看過比較大的c/c++代碼的人應該都聽說過這個工具(Windows下對應的工具為nmake)。它負責組織構建的過程,也就是負責指揮編譯器如何編譯,連接器如何連接,最后生成一個可用的文件。
2. Ant工具
但是有人覺得make工具的很難使用,他的語法很難理解,就發明了ant
3. Maven工具
Maven像make一樣是個構建(build)工具,Maven工具是對ant工具的進一步改進(這么說不太準確,但是可以這么理解)。在make工具中,如果我們要編譯某些源文件,我們肯定首先要安裝編譯器等工具,但是有時候需要不同版本的編譯器,如果把每個包都下載下來,在makefile中進行配置制定,需要的包非常多,很難管理,于是人們發明了Maven工具。Maven使用配置文件pom.xml對環境進行配置,例如設定編譯器的版本,設定所需支持包的URL,這樣maven就可以自動去下載所需的包。這樣如果需要對構建環境進行改變時,直接改變pom文件就可以了,maven會自動網絡上下載配置的包。Maven可以利用一些別的工具,實現對編譯結果的統計,對源代碼的檢查,對于代碼的測試等。
4. Jenkins工具
其實Maven還是不夠強大。Maven可以控制編譯,控制連接,可以生成各種報告,可以進行代碼測試。可是如何控制這個流程呢?先編譯還是先連接?先進行代碼測試,還是先生成報告?這個工具就是Jenkins。Jenkins能夠對流程進行控制,對能夠對各個階段生成的各種結果進行綜合,以圖表的形式呈現出來。但是不同的工具生成不同格式的結果,Jenkins如何讓這些結果呈現出來?這就是jenkins插件,Jenkins插件使maven中用到的各種工具生成的結果能夠在Jenkins中呈現出來。

二、Jenkins
jenkins是一個廣泛用于各種項目的"自動化"編譯、打包、分發部署。jenkins本身是用java語言開發的,所以安裝jenkins的機器至少要有jdk。jenkins可以很好的支持各種語言(java, c#, php等)的項目構建,也完全兼容ant、maven、gradle等多種第三方構建工具,同時跟svn、git能無縫集成,也支持直接與知名源代碼托管網站github、bitbucket直接集成。Jenkins默認情況下可以實現項目更新(通過SVN)和項目發布(通過MAVEN)1、Jenkins 安裝(windows)
1)windows安裝包
1.以管理員身份運行cmd.exe,進入到jenkins安裝目錄
2.停止服務:jenkins.exe stop
2019-05-05 22:31:21,203 INFO - Stopping the service with id ‘Jenkins’
3.啟動服務:jenkins.exe start
2019-05-05 22:32:09,753 INFO - Starting the service with id ‘Jenkins’
2)war安裝包
下載jenkins.war, 下載成功后,將war包文件放入對應的目錄(如C:\Users\Jenkins\),在命令行切換目錄到Jenkins,然后執行java -jar jenkins.war
訪問http://localhost:8080 。
Jenkins集群配置
集群配置也十分簡單,就是添加slave節點的過程。點擊系統管理->管理節點->新建節點,各個配置后面都有詳細的幫助說明的。
在啟動方法這里推薦使用 Launch slave agents>構建Job
其實到這一步,就是jenkins的常規流程了,你可以參照創建Job選項的界面的各個配置,制定你構建計劃,或者我們直接使用腳本來完成我們的構建操作(建議)選擇構建Execute shell,文章末尾會附上一個完整項目的shell構建流程。
Pipeline
Pipeline字面意思就是流水線,很好用的Jenkins的一個插件,將很多步驟按順序排列好,做完一個執行下一個。真實的工作環境有很多job,比如先編譯,然后執行靜態代碼檢查、單元測試、然后部署服務器、服務器重啟、進行ui測試等。我們需要對這些job進行一些設置將它們的上下游關系配置好。
這時候Pipeline就派上用場了。在Jenkins主頁點擊新建視圖,然后選擇Build Pipeline View,然后填寫Select Initial Job,構建后的操作可以選擇其他的Job,以此類推,這樣一個流水線就完成了。Pipeline提供視圖界面,你可以在視圖上形象地看到整個構建計劃的執行流程和完成度。
2、Jenkins常用命令
(1)關閉Jenkins
http://localhost:8080/exit
(2)重啟Jenkies
http://localhost:8080/restart
(3)重新加載配置信息
http://localhost:8080/reload
(4)Jenkins時區設置為北京時間
打開 【系統管理】->【腳本命令行】運行下面的命令
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
3、插件安裝
(1)如果在安裝jenkins的時候沒有安裝相關插件,可以按照如下方式安裝(已經安裝,則不需要)

(2)選擇可選插件菜單,搜索自己想要的插件,然后安裝,如果有插件一直安裝失敗的情況,可以從jenkins官網下載插件,然后導入到jenkins。在jenkins插件管理->高級,選擇上傳插件進行安裝。

4、定時構建語法
* * * * * (五顆星,中間用空格隔開)
第一顆*表示分鐘,取值0~59
第二顆*表示小時,取值0~23
第三顆*表示天,取值1~31
第四顆*表示第幾月,取值1~12
第五顆*表示星期,取值0~7,其中0和7代表的都是周日
H表示隨機,沒有用到 H 隨機的話,不要加括號
1.
H/30 * * * * 每30分鐘構建一次:
2.
H H/2 * * * 每隔2個小時構建一次
H 4-19/3 * * * 凌晨點到下午7點,每隔3個小時構建一次
0 8 * * * 每天早上8點構建一次
H 8-18/3 * * * 每天早上8點到晚上6點每三小時檢查一次
3.
* * 3-5 * * 每個月的3號,4號,5號 都會被構建,具體時間未知
20 16 15 * * 每個月的15號下午16點20分構建一次
4.
0 8,12,22 * * * 每天的8點,12點,22點,一天構建3次(多個時間點,中間用逗號隔開)
5.
每個月的1-7號一天構建一次
H/30 8-19/3 1-28 1-11 1-5 在1-11月中的1號-28號,每個工作日,早晨的8點到下午7點每隔3.5個小時會觸發構建
5、用戶和權限
jenkins 配置用戶角色權限需要安裝插件 Role Strategy Plugin
1.安裝 Role Strategy Plugin 插件,下載地址:https://updates.jenkins-ci.org/download/plugins/role-strategy/
打開jenkins 系統管理-->管理插件-->高級,點擊上傳,選擇下載的插件安裝
2、安裝完后,重啟jenkins,進入系統設管理-->Configure Global Security ,配置如下,保存

3.配置User/Group權限
打開 系統管理-->Manage and Assign Roles

3-1. 管理角色(Manage Roles)
選擇該項可以創建全局角色、項目角色,并可以為角色分配權限

添加test組,并給Over all 的Read 權限、Job Build 權限、View的Read權限。
Project roles 配置Pattern,例如匹配以 auto開頭的,需要寫成 auto.*切記!配置完后保存
3-2.添加用戶權限(Assign Role)
系統需要有用戶(若沒有可添加:系統管理 --> 用戶管理 -->添加用戶),然后:

4,創建 autotest 任務, 用戶test(只有構建權限)用戶登錄進去,發現只能看到autotest任務,實現不同用戶不同視圖及不同權限

四、ssh密鑰
1、檢查是否已存在SSH密鑰對
服務器可以通過ssh來通信和連接,linux一般默認已安裝了ssh服務,windows一般未安裝,建議安裝OpenSSH
1)、在Windows, Linux, macOS系統下,進入用戶home目錄(windows為C:\Users\當前用戶名)
2)、進入.ssh/子目錄(windows為C:\Users\當前用戶名\.ssh),
3)、若不存在則需按照下文步驟生成SSH密鑰對,
若存在以下文件,則表明已經生成過:
| Algorithm | Public key | Private key |
|---|---|---|
| ED25519 (preferred) | id_ed25519.pub | id_ed25519 |
| RSA (at least 2048-bit key size) | id_rsa.pub | id_rsa |
| DSA (deprecated) | id_dsa.pub | id_dsa |
| ECDSA | id_ecdsa.pub | id_ecdsa |
2、生成SSH密鑰對
1)、打開windows CMD
2)、執行ssh-keygen命令,comment可以是郵箱賬號會出現在.pub文件中
ssh-keygen -t rsa -b 2048 -C "<comment>"
可按提示輸入密碼(亦可直接回車跳過)生成完成后,既可在如下圖提示的目錄下查看到密鑰對文件


3、通過SSH密鑰對實現免密登錄Linux服務器
將公鑰拷貝到目標主機的用戶home/.ssh目錄下的authorized_keys文件中。又或者通過如下命令進行公鑰拷貝:
# 其中可通過-p指定ssh端口(默認22)
ssh-copy-id 用戶名@目標主機IP -p 22
拷貝完成后即可在私鑰所在的機器上直接免密登錄綁定公鑰的機器
ssh 用戶名@目標主機IP
五、Jenkins部署項目
當我們每次把代碼提交到倉庫的時候,都希望Jenkins會自動部署運行,我們應該給它一個憑證以便訪問文件,即免密訪問,如果想要訪問對方主機,需要把本機機的公鑰交給它即可。
在jenkins所在主機生成ssh密鑰,我們把公鑰給倉庫平臺gitlab、把私鑰給Jenkins。
1、添加公鑰到gitlab用戶,用來clone代碼
我們在Jenkins所在的主機生成秘鑰,然后查看id_rsa.pub ,把公鑰復制到倉庫就行
1)、登錄gitlab,點擊右上角頭像 -> 下拉菜單Settings -> 左側菜單SSH Keys

2)、將之前生成的公鑰id_rsa.pub內容粘貼到Key文本框,同時自定義title。添加完成后,即可在私鑰所在的機器上擁有該ssh公鑰綁定賬戶的操作權限(注意對應ssh gitlab庫鏈接)
2、接下來我們要把私鑰交給Jenkins。依次點擊 憑據–系統–全局憑據–添加憑據

我們先修改類型為SSH Username with private key,然后點擊下面的 Enter directly,把Jenkins所在主機的私鑰復制粘貼到此即可
點擊ok之后返回查看是否添加成功
六、jenkins操作
1、jenkins普通任務
1 )新建任務
我們點擊 New Item創建一個新任務,輸入任務名。類型選擇Freestyle project,然后點擊OK

我們直接選擇Source Code Management,選擇git,填寫倉庫的SSH鏈接和選擇憑證用戶,最后點save即可

2)構建任務
新建任務之后,點擊左邊的Build Now即可開始執行任務。我們可以在左下角看到構建歷史,還可以點擊倒三角形選擇Console Output看到具體的構建步驟


2、jenkins觸發式任務
1)準備一個測試腳本,開發如果提交了代碼就執行這個測試腳本。
2)我們點擊New Item創建一個新任務,輸入任務名。類型選擇Freestyle project,然后點擊OK

3)源碼管理選擇git,然后只需要在repository url中輸入git倉庫地址即可。

4)構建觸發器:即gitlab有提交操作則自動部署,這里只需設置一個認證的token即可,
gitlab調用觸發器,使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可

在系統管理–>用戶管理–>查看用戶id和token,需要把用戶id和API Token加入觸發器中,做用戶驗證

根據觸發器驗證令牌和用戶id+token會生成一個下面的url,只需要訪問這個URL地址jenkins就會自動部署對應項目的代碼。
http://admin:984c9edf027e750f0587808fab0c3f9b@192.168.100.10:8080/job/jenkins_trigger/build?token=hehe
在jenkins全局安全設置中取消勾選“防止跨站點請求偽造,不然jenkins會認為gitlab的請求不合法。

(5)普通構建,選擇execute shell,執行部署腳本即可


(6)jenkins定時構建,定時構建一般用在安卓,ios打包,每天凌晨會拉取安卓,ios進行編譯打包,并自動推送到共享。本示例演示定時執行一個命令

選擇Execute Windows batch command

(6)在gitlab中配置webhooks,配置URL,每次提交代碼就訪問這個url,執行構建

URL這里輸入上面上面用戶ID+API token+job token生成的URL地址即可。觸發工作選擇,push event,merge request event即可。

(7)添加完成測試:點擊test模擬提交操作,看看是否會執行自動構建

Jenkins查看,可以看到構建也是成功的。

七、高級改造
1) 改造二:加入直接查看報告的能力
在本地執行時,我們是 allure 可執行文件來生成報告,那集成到 Jenkins,我們需要先安裝 allure 的插件
在插件管理中搜索 alluer 插件進行安裝

在全局工具中配置 allure 相關

然后繼續改造 Job,在構建后的操作中添加 allure 報告的信息。

這樣之后,我們就可以在構建后,在 Jenkins 上直接查看執行后的報告了。
這樣使用之后,感覺還是差點東西,差什么呢,因為用例很多,每次構建的時間都很長,這就導致我無法知道什么時候結束,來第一時間查看結果并反饋執行情況。所以我們還需要繼續改造,加入通知的能力。
2)改造三:增加通知的能力
在和項目組溝通后,確定了兩種方式的通知,企業微信通知郵件通知。 研究一番之后,發現,Jenkins 使用插件來實現企業微信通知,只能顯示少量的信息(如:開始時間),并不能達到我們想的顯示大致的執行結果的能力,所以這部分,我就直接使用 Python 腳本來實現了,不使用 Jenkins。 這里就不做詳細說明了,大致的思路是:解析執行生成的 xml 文件來獲取執行結果信息,然后按照企業微信機器人的方式來通知。附上一張我調試的效果圖:

雖然企業微信通知沒有使用 Jenkins,但是郵件的通知,Jenkins 還是很好用的,我們用 Jenkins 來進行郵件的通知發送,接著改造 job。
在構建后的操作中添加 Editable Email Notfication,填寫發送郵件的信息。

這樣改造之后,我們也擁有了通知的能力。
這時候領導又提要求了,現在想晚上使用腳本來巡檢,早上查看結果。這樣不可能每天晚上登錄 Jenkins 來構建,所以我們需要繼續改造,加入定時構建的能力。
3) 改造四:增加定時構建
在 job 的構建觸發器中選擇 Build periodically H 2 1,2,3,4,5 表示周一到周五每天凌晨 2 點左右開始構建,填寫后,可以查看到下面顯示的下次構建的時間 這樣改造之后,每天晚上就自動構建了。

到這里我們就擁有了 Git,查看報告,郵件通知,定時構建的能力。
這個時候運維的小伙伴又提要求了,給我們自動化測試分配了一臺服務器,讓我們在那臺設備上測試,不想和開發發布的混在一起。
4)改造五:指定節點運行
我們需要在指定節點構建,通過 Jenkins 來調度。這樣我還需要接著改造了。
1. 添加節點
進入系統管理(configuer system)》管理節點(manage nodes and clouds),點擊新增節點。

注意:節點的標簽不要用中文 再配置節點屬性和工具

如果啟動方式沒有上方選擇的選項,需要到全局安全配置中勾選如圖的地方:

2. 連接節點
新增的節點是沒有連接 Jenkins 服務的,需要啟動一個 agent 來主動連接到服務。

按照如下步驟來操作: 到從節點(執行機)上登錄 Jenkins,點擊剛剛添加的節點中,會如下圖顯示

點擊紅框標記的圖標,會下載下來一個文件

雙擊打開下載的文件,會顯示一個小窗口,自動連接(需要 jdk 環境)

連接后會添加到執行機的服務中運行,之后不用再操作。
注意:如果連接提示失敗,可能是端口沒有開放,配置時選擇的隨機生成端口,如果連接提示端口沒有打開,將 Jenkins 所在的服務器上剛使用的端口打開即可。

改造 Job,配置使用執行的節點
在一般信息中勾選限制項目的運行節點,填寫我們添加的節點的標簽。


浙公網安備 33010602011771號