Jenkins應用管理
激活
安裝Jenkins之后訪問
172.16.246.207:8080
-
根據頁面提示輸入管理員密碼解鎖Jenkins配置
通常密碼在頁面上都有所提示,例如
/var/lib/jenkins/secrets/initialAdminPassword
管理界面
登陸Jenkins之后, Jenkins -> Manage Jenkins
,
通常對應的url是 http://172.16.246.207:8080/manage
插件管理
通常我們剛剛安裝完Jenkins之后,在主界面的通知欄,或Jenkins管理界面前面看到許多錯誤的信息,一般都是由于缺失某些插件造成,這時候可以按照提示,到插件管理的頁面,將對應插件安裝。
進入 Jenkis 管理界面
之后, Manage Jenkins ->Manage Plugins
,
通常對應的url是 http://172.16.246.207:8080/pluginManager/
手動安裝插件
如果有插件一直安裝失敗的情況,可以從jenkins官網下載插件,然后導入到jenkins。
Manage Jenkins ->Manage Plugins ->高級 ->上傳插件
,
通常對應的url是:http://172.16.246.207:8080/pluginManager/advanced
作業管理
注:這里的作業,有時候也稱作任務。
前提
-
待觸發的構建腳本
發生相應觸發條件(比如后面監視的Git項目被更新等等),執行特定的腳本,這里暫時也稱構建腳本。
這里給出一個例子,假設腳本路徑:
172.16.246.207:/var/lib/jenkins/myshell/test/test_trigger1.sh
, 屬于jenkins用戶,腳本內容:#!/bin/bash echo "測試觸發執行1" sleep 2 echo "腳本執行工作路徑為:$(pwd)" A=1 while [ $A -le 13 ]; do echo "Step $A" sleep 1 A=$(expr $A + 1) done echo "測試執行完畢"
當然隨著需求,不同的任務作業可能會執行不同的觸發腳本,后面需要時會提及。
-
監視的Git項目
此處假設被監視項目源碼地址為:
ssh://szic@172.16.246.207:/home/szic/test/jenkins_git_repo
, 在此項目上發生一定條件會觸發執行構建腳本。 -
權限添加
因為有些過程需要通過ssh遠程執行,而jenkins自動執行的過程中要求不能在執行過程中交互輸入密碼驗證,所以需要提前添加好需要遠程訪問的用戶與主機的授權信息以實現免密直接遠程執行。
-
用于執行構建腳本的權限
jenkins@vmcnszs207:~$ ssh-copy-id jenkins@172.16.246.207
因為將要執行172.16.246.207下jenkins用戶目錄中的一個腳本,所以需要將遠程訪問jenkins@172.16.246.207的授權信息添加。(注意:這里,其實本身訪問者就是jenkins@172.16.246.207,直接用本地路徑而不用ssh訪問即可,這里只是為通用起見,采用了遠程ssh執行的方式進行。
-
用于獲取待監視Git項目代碼的權限
jenkins@vmcnszs207:~$ ssh-copy-id szic@172.16.246.207
這樣會自動將當前
jenkins
用戶的.ssh/id_rsa.pub
文件內容追加至在172.16.246.207
的szic
用戶目錄下.ssh/authorized_keys
文件中,實現免密ssh登陸(即ssh szic@172.16.246.207
),因此可以后面的過程中直接連接添加的172.16.246.207
下的git項目。 -
其它權限
如果需要用ssh訪問其它主機對應的其它用戶,需要同樣用
ssh-copy-id
的方式添加授權,實現免密執行。
-
添加新任務作業
這里講述的任務作業主要有三種類型:
- 觸發式任務作業: 發生一定條件自動觸發構建腳本。
- 參數任務作業: 執行構建時需要傳入一個參數。
- 計劃任務作業: 按照一定周期定期自動構建(屬于觸發式構建的一種)。
-
通用設置
-
在登錄界面執行
Jenkins ->新建任務
, 通常對應的界面為: http://172.16.246.207:8080/view/all/newJob根據需求,輸入Job基本信息,如:名稱、類型。
如圖:
-
選擇監視的項目源碼
這里選擇監控git項目,項目路徑若在本地直接填寫本地路徑,若在遠程需ssh下載,則需前面
ssh-copy-id
添加的信息。添加操作如圖:
-
設置執行的構建腳本
同樣,如果遠程執行腳本,也需要用
ssh-copy-id
添加相應的授權信息。設置操作如圖:
-
-
觸發式任務設置
假設需求是:某Git項目如果發生變化,就觸發執行某腳本,這個時候,就需要添加觸發式任務了。
在前面添加任務(參見: 添加任務 (參見第2.3.4.2節) ),或者編輯任務(參見: 編輯已有任務作業 (參見第2.3.4.5節) )的時候,可以添加觸發式任務的屬性。
-
設置構建觸發器
這樣可以通過特定的URL觸發構建過程,對于有些時候利用
git hook
腳本檢測的用戶提交代碼后,自動訪問該URL,導致觸發,很有用。-
選擇
觸發遠程構建
,并通過添加token name
來標識觸發任務構建的特定URL,如下: -
如上設置之后,點擊
保存
,即可創建好對應的觸發式任務,并獲取觸發執行的URL。假設這里設置的觸發token名稱如圖為
trigger_test1_token
, 實踐發現,此時在瀏覽器中,直接按照提示鍵入URL:http://172.16.246.207:8080/job/trigger_test1/build?token=trigger_test1_token
, 即可觸發構建腳本(此時跳轉到一個空白頁面),但是如果事先瀏覽器中沒有登陸過,鍵入如上URL后需要登陸用戶才可觸發,在外部工具如curl
等直接向該URL發送請求,并不會觸發任務執行,需要特定用戶特定令牌環信息才可通過外部工具直接發送URL觸發,參見后面 添加用戶令牌 (參見第2.3.4.2.2.2節)。
-
-
添加用戶令牌
主要是為了設置用戶觸發特定觸發器URL的TOKEN,以防所有人都能通過構建觸發器的特定URL觸發構建。
設置好構建觸發器之后,需要再為特定的用戶獲取一個授權token,然后通過外部工具向觸發器的特定URL觸發作業構建的時候,加入這個用戶token的授權信息才能觸發。
-
選擇
Jenkins->用戶列表
-
再選擇
設置
, 并創建用戶對應的令牌 -
拷貝令牌:
拷貝之后,不用點擊頁面上的
保存
也可(注意,需要自行記錄拷貝的token,因為之后將無其它方式再次獲取此token只能更新重新獲取新的)。
安全起見,建議令牌環每隔一段時間更新一次。
至此,獲取到用戶的Token,可以利用如curl等工具,結合該token與任務作業的觸發器URL,觸發構建腳本。具體參見 測試觸發執行任務 (參見第2.3.4.4節) 部分。
-
-
設置執行的構建腳本
這里直接使用 設置執行的構建腳本 (參見第2.3.4.2.1.3節) 的設置。
-
-
參數式任務設置
假設需求是: 執行任務時,會將參數傳入構建腳本,并執行。
這里創建的任務是參數式任務,假設前面通用過程中設置的任務名稱是
param_test
。-
設置參數信息
包括參數名稱、默認值、以及描述信息,過程如下:
-
設置執行的構建腳本
這里,腳本的設置與前面不同,需要帶有參數信息,可以將前面的參數名稱傳遞給腳本,待執行的腳本內容如下:
#!/bin/bash echo "測試參數執行" echo "腳本執行工作路徑為:$(pwd)" echo "腳本執行參數為:$1" echo "測試執行完畢"
設置如下:
注:最后點擊
保存
即可。
-
-
計劃式任務設置
假設需求是: 按照一定的周期執行任務。
這里創建的任務是計劃式任務,假設前面通用過程中設置的任務名稱是
cron_test
-
設置構建觸發器
這樣可以按照特定的時間規則觸發構建過程,對于有些時候比如定期發布新版本,很有用。
-
選擇
定時構建
,并通過添加日程表
內容來標識計劃任務構建的規則,如下: -
關于計劃規則,參見cron命令的規則, man手冊:
man 5 crontab
大致如下:
配置描述計劃任務配置信息,每行的基本格式如下: * * * * * 總共六個字段,每個字段對應含義分別為: 分 時 日 月 周 每個部分以空格分隔,除了最后一個部分(命令)可以在內部使用空格之外,其他部分都不能使用空格。 例如: 30 20 * * * 表示每天的20:30。
-
-
設置執行的構建腳本
這里的方式與 設置構建腳本 (參見第2.3.4.2.1.3節) 中的方法一樣,不詳細描述,
腳本如下:
#!/bin/bash echo "測試計劃執行" echo "腳本執行工作路徑為:$(pwd)" echo "執行時間為:$(date "+%F %T")" echo "測試執行完畢"
設置截圖:
-
測試執行任務
-
測試執行任務
-
方式一、在Jenkins任務界面執行
如下:
-
找到
Jenkins->待執行任務
如圖:
這里,點擊任務后面的執行任務按鈕也行,或者進入任務到后面的界面執行。
-
執行任務
進入任務界面之后,點擊
立即構建
即可,如圖:
-
-
方式二、在視圖中直接執行
-
選擇
Jenkins->我的視圖
如下:注:如果沒有
我的視圖
, 可以在Jenkins->新建視圖
中添加。 -
執行剛剛添加的任務如下:
-
-
對于參數任務的執行
-
找到
Jenkins->待執行任務
如圖:
這里,點擊任務后面的執行任務按鈕也行,或者進入任務到后面的界面執行。
執行過程類似,給出兩種方式:
-
方式1. 視圖中直接執行
選擇如圖:
填入參數并執行,如圖:
-
方式2. 進入任務界面后執行
進入任務界面如圖:
選擇
Build with Parameters
并填入參數構建如圖:
-
-
-
查看任務執行歷史情況
-
選擇
Jenkins->構建歷史
如下: -
在前面點擊任務對應的終端圖標后,便可以看到任務執行的情況(成功、失敗、以及執行中的輸出等),如下:
-
測試觸發執行任務
假設我們要觸發執行的任務,其觸發式信息在 觸發式任務設置 (參見第2.3.4.2.2節) 設置了。大致信息是:
- 任務作業:
trigger_test1
- 作業觸發器token名:
trigger_test1_token
- 獲取到用戶的Token之后,用戶
szic
的token為11ad4c850981f9ec225774804a8559b512
可以類似如下的方式直接觸發腳本:
$curl -X POST 172.16.246.207:8080/job/trigger_test1/build?token=trigger_test1_token --user szic:11ad4c850981f9ec225774804a8559b512
#或者
$curl -X POST szic:11ad4c850981f9ec225774804a8559b512@172.16.246.207:8080/job/trigger_test1/build?token=trigger_test1_token
實踐發現,雖然我們已經有了用戶Token可以直接通過 curl
等外部命令發送請求觸發任務,但是如果在瀏覽器上訪問: [[http://szic:11ad4c850981f9ec225774804a8559b512@172.16.246.207:8080/job/trigger_test1/build?token=trigger_test1_token]]
仍然只能在登陸Jenkins之后,才能觸發。如果沒有登陸,瀏覽器也會提示輸入登陸用戶密碼后,才能跳轉到一個空白的頁面(表示已經觸發了構建腳本)。
一般常用的方式是可將相應觸發命令添加到git的相應hook中,使其能夠在特定的時機(比如push)來觸發任務,執行到構建腳本。
編輯已有任務作業
找到
Jenkins->待編輯作業
-
進入編輯選項編輯作業
可以點擊待編輯作業右面的小三角,然后選擇編輯按鈕如下:
也可直接點擊待編輯作業,然后選擇右面的
配置
按鈕,如下:
另外,這里還可以看到編輯歷史等信息。
刪除任務
找到
Jenkins->待刪除作業
-
進入編輯選項刪除作業
可以點擊待刪除作業右面的小三角,然后選擇
刪除項目
按鈕如下:也可直接點擊待刪除作業,然后選擇右面的
刪除項目
按鈕,如下:
用戶管理
選擇路徑: 系統管理->管理用戶
, 通常對應的 URL 是 http://172.16.246.207:8080/securityRealm/
操作如圖:
創建新用戶
-
點擊
新建用戶
,即可進入添加用戶的頁面。 -
然后填入用戶信息,主要是用戶名、密碼、郵箱等。
編輯用戶
-
選擇路徑:
管理用戶->待編輯的用戶
, 可以直接點擊右側的配置圖標,或者直接點擊對應用戶。 -
編輯用戶
這里可以對用戶名稱、token等信息進行設置
權限管理
確定權限
管理權限前,需要確定相應的用戶,以及將要被分配給用戶的權限。
創建的用戶可參照前面 創建新用戶 (參見第2.3.5.1節) 的方式添加相應用戶,下面是他們將會具有的權限:
- szic: 管理系統
- tester: 查看系統,管理系統中所有任務作業
- test_manager: 管理特定的任務作業
- test_developer: 執行任務作業
- Anonymous: 只讀,即直接進入Jenkins主頁后,不登陸狀態下能看到的內容。
安裝 role-strategy
插件
進入插件管理器,安裝插件 Role-based Authorization Strategy
。便于可以為不同用戶或組使用不同的權限策略。
選擇路徑:
Jenkins->插件管理
可選插件->過濾輸入"Role-based AuthorizationStrategy"->選中列表的"Role-based Authorization Strategy ->直接安裝
具體方式參見: 插件管理 (參見第2.3.3節) 。這里安裝如下:
如果無法直接安裝可以手動下載安裝,下載地址: role-strategy 。
全局安全配置
這里將使用剛剛安裝的 role-strategy
插件的策略管理權限。如下:
-
選擇路徑:
系統管理->全局安全配置
-
找到
授權策略->Role-Based Strategy
管理角色
進入 role-strategy
插件, 選擇路徑: Jenkins->Manage and Assign Roles->Manage Roles
不同的角色,對應不同的權限范圍。
-
添加全局角色(Global roles)
全局角色負責對系統權限的管理控制。
這里有兩個管理角色,不同角色有不同的管理權限:
- admin:對整個jenkins都可以進行操作
- ops:可以對所有的job進行管理
- others: 只有讀的權限
添加信息對應如下:
注意保存。
-
添加項目角色(Item roles)
項目角色負責對項目權限的管理控制,也就是任務作業的管理權限。
這里有兩個管理角色,不同角色有不同的管理權限:
- test_job_manager:只對特定任務作業(這里是
test_job
)有管理權限。 - test_job_developer:特定任務作業(這里是
test_job
)只有構建、瀏覽、以及查看項目的權限。
添加過程如下:
注意保存。
- test_job_manager:只對特定任務作業(這里是
分配角色
前面創建的各種角色,將分配給不同的用戶,實現對其的權限控制。
-
選擇
Manage and Assign Roles->Assign Roles
如下:
-
分配
Global Roles
和Item Roles
如下:
注意保存。
檢查設置后的權限
最后每個人看到的系統界面,根據權限不同,如下:
-
szic: 管理系統
-
test: 查看系統,管理系統中所有任務作業
-
test_manager: 管理特定的任務作業
-
test_developer: 執行任務作業
Anonymous: 只讀,這里暫時沒有想到登陸的方式。
節點管理
關于節點
節點是Jenkins實現分布式部署的途徑,一臺Jenkins實現多臺服務器的部署.簡單的舉個例子,我們有一臺Jenkins服務器,有兩臺甚至多臺的生產服務器需要我們Jenkins去部署、構建等操作。在大中型的項目中,Jenkins是與生產服務器部署在不同的服務器上面的,但是需要Jenkins服務器去管理生產服務器,這時候一臺生產服務器就是Jenkins的一個節點,多個就是多個節點。
從節點
-
從節點環境
-
操作系統
root@cnszs215:/etc/apt/sources.list.d# cat /etc/issue Ubuntu 14.04.4 LTS \n \l
這里簡單介紹下從節點環境搭建過程,后面將從主節點操作連接從節點,并遠程在從節點上執行任務作業。
-
SSH認證
這里,假設主節點是
172.16.246.207
, 從節點是172.16.246.215
。從節點可能會通過 ssh 方式訪問主節點(比如下載代碼)。
事先需要為從節點配置相關的sshkey,以及免密登陸,如下:
jenkins@cnszs215:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/jenkins/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/jenkins/.ssh/id_rsa. Your public key has been saved in /home/jenkins/.ssh/id_rsa.pub. The key fingerprint is: 0c:05:49:37:4d:61:0c:44:c8:0d:c7:83:f6:35:da:76 jenkins@cnszs215 The key's randomart image is: +--[ RSA 2048]----+ | o+@O=+. | | *++o= | | ... = . | | oo o E | | S. . | | | | | | | | | +-----------------+ jenkins@cnszs215:~$ ssh-copy-id szic@172.16.246.207 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys szic@172.16.246.207's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'szic@172.16.246.207'" and check to make sure that only the key(s) you wanted were added.
-
JDK信息
從節點需要安裝JDK環境,并且JDK環境要與主節點版本匹配。
如果從節點JDK環境與主節點設置不一致,則在主節點添加完從節點,連接之時會出現類似如下錯誤:
-
檢查主節點JDK環境
假設主節點JDK環境如下:
jenkins@vmcnszs207:~$ java -version openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1) OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)
-
設置從節點JDK環境
從節點按照如下命令安裝與主節點版本匹配的JDK:
#apt-get install openjdk-11-jdk #java -version root@cnszs215:/etc/apt/sources.list.d# java -version openjdk version "11.0.5" 2019-10-15 OpenJDK Runtime Environment (build 11.0.5+10-post-Ubuntu-2ubuntu114.04) OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Ubuntu-2ubuntu114.04, mixed mode, sharing)
注:如果從服務器沒有openjdk-11-jdk安裝包,可能需要添加源,Ubuntu14.04的源添加信息如下:
root@cnszs215:/etc/apt/sources.list.d# pwd /etc/apt/sources.list.d root@cnszs215:/etc/apt/sources.list.d# cat openjdk-r-ppa-trusty.list deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu trusty main # deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu trusty main
可能會很慢。
-
-
-
Jenkins用戶
主節點連接從節點的指定用戶,這里假設是以Jenkins用戶做為從節點的Jenkins用戶,實際按需進行。
如下命令創建相應的Jenkins用戶,并設置用戶登陸密碼:
#useradd -d /home/jenkins jenkins #passwd jenkins
主節點
即安裝了Jenkins服務的主機。
-
插件安裝
安裝
SSH Build Agents
插件,這樣在后面添加節點的時候,啟動方式
選項中才會有Launch agents via SSH
這個啟動方式。 -
添加從節點
-
選擇路徑:
Jenkins->系統管理->節點管理
-
進入節點管理后: 依次進行的過程:
新建節點->輸入節點名稱(這里為MSAF_BUILD)->選擇固定節點->確認
-
對新建節點信息進行配置
注:這里遠程工作目錄即從節點jenkins用戶的主目錄,具體可按需配置;標簽用來在給任務作業分配節點時匹配使用。
-
添加認證信息: 在
啟動方式->主機
之處,這里使用ssh用戶登陸信息做為憑據。注:這里必須在主節點上先登陸一次從節點,以有從節點的記錄,才能保證后續節點啟動時連接的成功。
下面是207主節點、203從節點的例子,鍵入
yes
后,203成為known hosts
,才能保證從節點啟動成功:jenkins@vmcnszs207:~$ ssh 172.16.246.203 The authenticity of host '172.16.246.203 (172.16.246.203)' can't be established. ECDSA key fingerprint is SHA256:b7q9WVRQVm/HY25UWznwKhPDLbOPigTB3nC/bavK7xg. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '172.16.246.203' (ECDSA) to the list of known hosts. jenkins@172.16.246.203's password:
-
查看新添加節點: 上述過程保存之后,可以看見新添加的節點
-
選擇進入節點并啟動代理:
注意:在這個界面中也可再次對節點信息進行修改配置。
-
連接代理成功并看到正常的狀態
注意:這里需要保證從節點的JDK版本和安裝了Jenkins服務的主節點JDK版本一致,否則會連接失敗,參見: JDK信息 (參見第2.3.7.2.1.3節) 。
-
-
添加只在新從節點上執行的任務作業
-
新建一個任務作業,依次選擇
限制項目的運行節點-填入標簽表達式
標簽表達式填寫成與前面建立節點時的標簽一致,這樣任務作業便只會限定在指定的節點上進行。
-
填寫項目源代碼信息(如果有的話)
注意:這里憑據方面,需要對前面相關ssh認證進行配置方可,否則無法下載代碼,參見: SSH認證 (參見第2.3.7.2.1.2節) 。
代碼將下載到之前為子節點設定的主目錄的
workspace
下,這里是:/home/jenkins/workspace/test_msaf
。 -
指定項目構建執行腳本
腳本路徑是相對于子節點
172.16.246.215
而言的路徑。腳本內容如下:
jenkins@cnszs215:~/myshell/test$ cat test_node_exec.sh #!/bin/bash echo "測試遠程執行1" sleep 2 echo "腳本執行工作路徑為:$(pwd)" echo "腳本執行所在node的網絡信息" ip addr A=1 while [ $A -le 13 ]; do echo "Step $A" sleep 1 A=$(expr $A + 1) done echo "測試執行完畢"
-
查看到執行情況如下:
注:如果從節點被斷開,那么任務會被掛住,等待從節點啟動后再執行。現象如下:
-
-
添加隨機在主節點和新從節點之間執行的任務作業
過程與前面 添加只在新從節點上執行的任務作業 (參見第2.3.7.3.3節) 相同,不同之處在于不限定執行的主機:
-
新建一個任務作業,項目基本之處選擇
在必要的時候并發構建
選擇并發構建應當不是必須的,這里只是為了提現出隨機性(不選擇,則發現一般都會在從節點上執行,也可能是概率,有待實踐)。
-
為避免構建于不同主機上路徑不一致的文件,直接將腳本內容填寫到待執行構建步驟:
-
在任務列表中,多點擊幾次后,執行過程如下.
注:如果從節點被斷開,那么任務會直接被分配到主節點上進行。
-