Jenkins Cli介紹
Jenkins Cli為Jenkins提供的一個cli工具,此工具功能非常強大,可以完成諸如重啟jenkins,創建/刪除job,查看job控制台輸出,添加/刪除節點等功能.但是實際工作中,像創建任務這樣的配置顯然cli非常吃力,不如直接在web管理界面操作,但是對於重啟Jenkins,查看診斷信息等,執行一個手動構建任務等,則直接使用cli比進入web管理界面操作更加方便.因此什么時候web管理界面,什么時候使用cli,要看是否有利於提升生產力,是否有利於提升個人能力,是否有利於提升團隊的自動化作業水平這些指標,不要以為使用cli就代表水平高而盲目使用cli從而導致效率下降或者問題增多.
jenkins cli可以通過jenkins提供的jar包來創建一個cli環境或者使用ssh客戶端來執行cli,本節也會分別介紹它們.
使用jenkins自身客戶端來執行cli
我們打開jenkins的安裝目錄,進入到war\WEB-INF
目錄,此目錄下面有一個jenkins-cli.jar
文件,它便是用來創建jenkins cli環境的.我們在這個目錄下打開命令行工具,然后執行java -jar jenkins-cli.jar help
便可以看到它的輸出幫助信息
可以看到-s選項可以指定一個url,這個url就是jenkins web管理界面的url,現在是測試環境,url為http://localhost:8080
,當然想要執行cli,還需要輸入你的用戶名和密碼,這里通過 -auth選項指定用戶名密碼.
我們把上以信息綜合起來,組成以下命令
java -jar jenkins-cli.jar -s http://localhost:8080 -auth tylerzhou:密碼 help
以上語句中,help為要執行的命令.
需要注意的是,這里執行的命令直接是命令名稱,不能加像其它命令行工具
- -- 或/
標識
如果你找不到Jenkins-cli.jar,可以通過在瀏覽器輸入
http://localhost:8080/jnlpJars/jenkins-cli.jar
進行下載保存,注意把以上地址替換為您的實際地址
點擊回車,可以看到所有Jenkins cli可執行的命令和命令的簡短描述.下面介紹幾個可能比較常用的命令
- list-jobs,可以列出Jenkins里所有的job,就像打開jenkins web管理界面首頁看到的那樣.
命令如下
java -jar jenkins-cli.jar -s http://localhost:8080 -auth 您的賬戶:您的密碼 list-jobs
需要注意的是,Jenkins cli需要每次執行命令的時候都帶上
java -jar jenkins-cli.jar -s http://localhost:8080 -auth 您的賬戶:您的密碼
+要執行的命令,而不是進入一個環境后只輸入命令就行了.
- build+要構建的job名,即可通過cli來觸發一次構建.
構建成功后,我們打開web管理界面便可以看到多一次構建.
cli構建命令是一個非常實用的命令,雖然我們的大部分任務都是基於git的一個自動化流程.但是有些時候也需要手動執行一些腳本來完成工作中的一些自動化操作.如果每次打開web管理界面手動執行顯然不如通過cli來執行效率高.
-
restart/safe-restart 可以重啟jenkins服務,通過它們的名稱可以看到safe-restart為安全重啟,它會等到所有的操作都完成然后執行重啟
-
clear-queue 清除構建隊列.沒有實際jenkins使用經驗的朋友可能不知道,由於Jenkins自身原因或者我們腳本測試不夠充分導致的bug,有時候會造成Jenkins構建阻塞,一直處於構建狀態無法完成,這時候通過web管理界面點擊取消構建也無法取消掉.此時呆以嘗試這個命令.當然也可能仍然無法終止,此時需要使用restart命令暴力重啟服務.
使用api token登陸
以上我們都是通過用戶名:密碼的方式來登陸cli,這樣把明文密碼暴露出來是不可取的,其實Jenkins cli還可以通過用戶名:apitoken
的方式來實現登陸cli.下面我們介紹五如何設置api token.
我們打開jenkins web管理界面,點擊左側的People
按鈕,在出現的界面中會列出可能不止一個用戶,此時點擊自身登陸jenkins的用戶名,在進入的界面中點擊configure
按鈕,在出現的界面中找到Api token
欄
點擊Add new token
便會出現一個生成token的小界面,輸入token的名稱,可以是任意名稱,然后點擊generate,這時候就會生成一個token
注意一定要把這個token復制下來然后保存到其它地方,下次再找開的時候就看不到它了.
完成后點擊保存.
此時我們在cli中輸入以下命令
java -jar jenkins-cli.jar -s http://localhost:8080 -auth tylerzhou:11f52cef1324556a41d966083ffcf0ac1b
其中tylerhzou為用戶名,后面就是我們剛才創建的token
如果執行成功,以上命令就輸出jenkins cli的所有命令.
把命令信息保存到單獨文件
我們可以看到,使用token的方式登陸會導致命令行非常長,嚴重影響命令可讀性,其實我們可以把auth信息保存到一個文件文件里.我在Jenkins安裝目錄/war/WEB-INF
目錄下創建了一個名為password.txt
的文本文件,內容如下
tylerzhou:11f52cef1324556a41d966083ffcf0ac1b
也即上面auth里輸入的用戶名:apitoken
這時我們在-auth選項里 通過指定@文件名方式指定包含用戶名(密碼或token)的文件來實現登陸.
代碼如下
java -jar jenkins-cli.jar -s http://localhost:8080 -auth @password.txt
以上@后面的password.txt即為我們創建的密碼文件
SSH方式登陸Jenkins執行cli
使用SSH方式登陸Jenkins需要進行配置,默認情況下jenkins SSHD port使用的是一個隨機端口號,這樣顯然不利於ssh登陸,使用ssh登陸我們需要顯式知道端口號是多少.我們打開Manage jenkins>Configure Global Security
找到SSH Server
欄,把默認random選項切為fixed
然后輸入一個同用端口號,我使用的是16022
配置完成后點擊保存.端口配置好了,我們還需要添加公鑰到當前用戶配置項,請參照上面使用api token登陸
一節,進入到當前用戶設置界面,這次我們不配置apitoken,而是往下拉找到SSH Public Keys
選項,把我們生成的ssh公鑰復制到這里.關於生成ssh key請參閱其它資料或者前面章節,這里不再贅述.
完成以后,我們就可以通過ssh方式執行命令了.
輸入以下命令
ssh -l tylerzhou -p 16022 localhost help
其中-l指定的用戶為我們登陸jenkins時的賬戶.
如果配置成功,以上命令就會列出所有的Jenkins 命令和簡短介紹.
ssh執行的命令和上面通過
jenkins-cli.jar
執行的命令是一樣,可以互相參照.
對jenkins cli進行簡單封裝
使用bat簡單封裝
可以看到,以上執行cli不論是通過工具還是ssh,每次都需要帶上一些固定的登陸信息,非常煩,我們可以進行一下簡單的封裝,這樣每次只需要輸入命令,不再需要每次重復輸入固定內容
我們把它封裝成個bat命令,命令如下
@echo off
cls
:start
set /p arg="請輸入您的命令: "
java -jar jenkins-cli.jar -s http://localhost:8080 -auth @password.txt %arg%
goto start
以上命令產首先創建一個start標簽,然后提示用戶輸入命令,輸入以后傳到的jenkins cli工具里,然后執行goto語句跳到start標簽.以上命令會重復執行,想要終止需要按下ctrl+c來終止
使用powershell腳本進行封裝
由於筆者對bat不是很熟練,因此寫起復雜腳本感覺比較費勁,這里使用powershell進行一下封裝,支持清屏,查看執行狀態和退出選項,腳本內容如下
[System.Console]::ForegroundColor=[System.ConsoleColor]::Green
$writeout=
" 退出請按1或者輸入exit
清屏請按2或者輸入cls或者clear
查看執行狀態請按3
查看幫助請輸入help
查看提示信息請按4"
Write-Host $writeout
[System.Console]::ForegroundColor=[System.ConsoleColor]::White
while ($true) {
$myvar=Read-Host "請輸入命令 "
if(($myvar -eq 1)-or($myvar -eq "exit")){break}
elseif (($myval -eq 2) -or ($myvar -eq "cls") -or($myvar -eq "clear")) {
Clear-Host
}
elseif ($myvar -eq 3) {
if($LASTEXITCODE -eq 0){
Write-Host "執行成功"
}else{
[System.Console]::ForegroundColor=[System.ConsoleColor]::Red
Write-Host "執行失敗"
[System.Console]::ForegroundColor=[System.ConsoleColor]::White
}
}
elseif($myvar -eq 4){
[System.Console]::ForegroundColor=[System.ConsoleColor]::Green
Write-Host $writeout
[System.Console]::ForegroundColor=[System.ConsoleColor]::White
}
else {
java -jar jenkins-cli.jar -s http://localhost:8080 -ssh -user tylerzhou $myvar.split(" ")
}
}
大家創建一個ps1文件,把以上內容復制進去然后按提示操作,便可以執行腳本了.
windows 沒有ssh客戶端的問題
有些童鞋在跟着做上面的ssh方式登陸時,可能在命令行輸入ssh會提示找不到命令,這是因為只有最新版本的windows 10(不是所有的版本都有).幸運的是,Jenkins-cli.jar
也提供了ssh登陸方式.我們輸入以下命令
java -jar jenkins-cli.jar -s http://localhost:8080 -ssh -user tylerzhou help
通過以上方式指定ssh方式登陸,並指定-user,不需要指定端口,便可以使用ssh方式連接了.我們可以使用上面講到的封閉方法簡單的封閉一下,這樣就不用每次都輸入重復的,固定的內容了.