持續集成高級篇之Jenkins cli與Jenkins ssh

系列目錄html

Jenkins Cli介紹

Jenkins Cli爲Jenkins提供的一個cli工具,此工具功能很是強大,能夠完成諸如重啓jenkins,建立/刪除job,查看job控制檯輸出,添加/刪除節點等功能.可是實際工做中,像建立任務這樣的配置顯然cli很是吃力,不如直接在web管理界面操做,可是對於重啓Jenkins,查看診斷信息等,執行一個手動構建任務等,則直接使用cli比進入web管理界面操做更加方便.所以何時web管理界面,何時使用cli,要看是否有利於提高生產力,是否有利於提高我的能力,是否有利於提高團隊的自動化做業水平這些指標,不要覺得使用cli就表明水平高而盲目使用cli從而致使效率降低或者問題增多.java

jenkins cli能夠經過jenkins提供的jar包來建立一個cli環境或者使用ssh客戶端來執行cli,本節也會分別介紹它們.git

使用jenkins自身客戶端來執行cli

咱們打開jenkins的安裝目錄,進入到war\WEB-INF目錄,此目錄下面有一個jenkins-cli.jar文件,它即是用來建立jenkins cli環境的.咱們在這個目錄下打開命令行工具,而後執行java -jar jenkins-cli.jar help即可以看到它的輸出幫助信息web

img

能夠看到-s選項能夠指定一個url,這個url就是jenkins web管理界面的url,如今是測試環境,url爲http://localhost:8080,固然想要執行cli,還須要輸入你的用戶名和密碼,這裏經過 -auth選項指定用戶名密碼.shell

咱們把上以信息綜合起來,組成如下命令windows

java -jar jenkins-cli.jar -s http://localhost:8080 -auth tylerzhou:密碼 help

以上語句中,help爲要執行的命令.api

須要注意的是,這裏執行的命令直接是命令名稱,不能加像其它命令行工具- -- 或/標識瀏覽器

若是你找不到Jenkins-cli.jar,能夠經過在瀏覽器輸入http://localhost:8080/jnlpJars/jenkins-cli.jar進行下載保存,注意把以上地址替換爲您的實際地址安全

點擊回車,能夠看到全部Jenkins cli可執行的命令和命令的簡短描述.下面介紹幾個可能比較經常使用的命令dom

1) 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 您的帳戶:您的密碼+要執行的命令,而不是進入一個環境後只輸入命令就好了.

2) build+要構建的job名,便可經過cli來觸發一次構建.

構建成功後,咱們打開web管理界面即可以看到多一次構建.

cli構建命令是一個很是實用的命令,雖然咱們的大部分任務都是基於git的一個自動化流程.可是有些時候也須要手動執行一些腳原本完成工做中的一些自動化操做.若是每次打開web管理界面手動執行顯然不如經過cli來執行效率高.

3) restart/safe-restart 能夠重啓jenkins服務,經過它們的名稱能夠看到safe-restart爲安全重啓,它會等到全部的操做都完成而後執行重啓

4) clear-queue 清除構建隊列.沒有實際jenkins使用經驗的朋友可能不知道,因爲Jenkins自身緣由或者咱們腳本測試不夠充分致使的bug,有時候會形成Jenkins構建阻塞,一直處於構建狀態沒法完成,這時候經過web管理界面點擊取消構建也沒法取消掉.此時呆以嘗試這個命令.固然也可能仍然沒法終止,此時須要使用restart命令暴力重啓服務.

使用api token登錄

以上咱們都是經過用戶名:密碼的方式來登錄cli,這樣把明文密碼暴露出來是不可取的,其實Jenkins cli還能夠經過用戶名:apitoken的方式來實現登錄cli.下面咱們介紹五如何設置api token.

咱們打開jenkins web管理界面,點擊左側的People按鈕,在出現的界面中會列出可能不止一個用戶,此時點擊自身登錄jenkins的用戶名,在進入的界面中點擊configure按鈕,在出現的界面中找到Api token

img

點擊Add new token便會出現一個生成token的小界面,輸入token的名稱,能夠是任意名稱,而後點擊generate,這時候就會生成一個token

img

注意必定要把這個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方式鏈接了.咱們可使用上面講到的封閉方法簡單的封閉一下,這樣就不用每次都輸入重複的,固定的內容了.

相關文章
相關標籤/搜索