經過 CLI 管理 Jenkins Server

Jenkins 內置的命令行接口容許管理員經過命令行工具訪問並管理 Jenkins。這讓咱們能夠經過腳本自動化的建立配置或執行任務,也就是把 Jenkins 中的配置代碼化了。Jenkins 同時支持經過 SSH 和客戶端命令行工具 jenkins-cli.jar 進行訪問。本文主要介紹如何經過這兩種方式用命令行操做 Jenkins。說明:本文的演示環境爲 ubuntu 16.04。html

經過 SSH 執行命令

在 Jenkins Server 的默認安裝中,內置的 SSH service 是沒有啓用的:java

咱們能夠經過下面的配置讓 Jenkins 啓用 SSH service,Jenkins ->Configure Global Security:ubuntu

筆者選擇讓 Jenkins 的 SSH Server 監聽 8090 端口,若是你選擇的是 Random,那麼監聽的端口是隨機產生的,不管如何,咱們均可以用下面的命令來得到  Jenkins SSH Server 監聽的端口號:緩存

$ curl -Lv http://192.168.21.145:8080/login 2>&1 | grep 'X-SSH-Endpoint'

說明:筆者的 Jenkins Server 部署在主機 192.168.21.145 上,監聽的端口號爲 8080。用戶至少要有 Overall/Read 權限才能訪問命令行接口,可是根據執行的命令的不一樣還須要更高的權限。本文主要演示如何配置遠程執行命令,因此演示用的用戶具備所有權限。安全

爲用戶添加身份驗證的祕鑰
使用 SSH 的最佳方式是經過祕鑰進行身份驗證,這裏咱們把遠程機器上用戶的公鑰添加到 Jenkins 用戶 jack 的 Public Keys 列表中(Jenkins -> jack):dom

如今就能夠遠程調用 Jenkins Server 提供的命令了,先來問一下 "我是誰?":
$ ssh -l jack -p 8090 192.168.21.145 who-am-issh

help 命令
咱們能夠經過 help 命令來查看全部的可用命令:curl

$ ssh -l jack -p 8090 192.168.21.145 help

help 命令的輸出很長,上圖僅截取了一部分,咱們還能夠經過 help 命令查看其它命令的詳細用法,筆者會在後面的文章中詳細介紹經常使用命令,這裏先一筆帶過。工具

build 命令
爲了演示方便,咱們先來簡單瞭解一下 build 命令,它用來觸發 job 和 pipeline 的執行。下面的是用它來觸發一個名稱爲 test 的 job,這個 job 很是簡單,僅僅輸出字符串 "hello":ui

$ ssh -l jack -p 8090 192.168.21.145 build test -f -v

還不賴,任務被成功的執行了!

到此爲止,咱們已經能夠組織自動化腳本遠程操做 Jenkins Server 了。下面咱們一塊兒看看 Jenkins 提供的另一種方式:客戶端命令行工具。

客戶端命令行工具

雖然基於 SSH 的 CLI 很是便捷,而且可以知足大多數需求,可是在某些狀況下,與 Jenkins 一塊兒發佈的客戶端 CLI 工具可能更合適。例如,客戶端 CLI 工具的默認傳輸方式是 HTTP,這意味着不須要在防火牆中打開額外的端口來就可使用。
一般不須要進行特殊的系統配置來啓用基於 HTTP 的命令行鏈接。若是是在 HTTP(S) 反向代理後面運行 Jenkins,必定要確保請求和響應不會被緩存。

下載客戶端命令行工具
Jenkins 自帶的命令行工具是一個 java 程序,能夠經過下面的 url 下載到遠程主機上:

JENKINS_URL/jnlpJars/jenkins-cli.jar

好比:

$ wget http://192.168.21.145:8080/jnlpJars/jenkins-cli.jar

注意,這是個 java 程序,要運行它須要確保你的主機上安裝了 jre。

經過用戶名和密碼認證用戶身份
下面咱們用客戶端工具來觸發 test job,先經過用戶名和密碼的方式進行認證:

$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -auth jack:123456 build test -f -v

雖然命令成功執行了,但使用密碼畢竟太不安全。

使用 API Token
安全起見仍是應該使用 API Token,先爲用戶 jack 生成 API Token:

把上面命令中的密碼換成 API Token 就能夠了:

$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -auth jack:11d5ca0f9ee2dac8c47492b3e6b71c82cd build test -f -v

結果和上面是同樣的。還能夠把用戶名和 API Token 保存到文件中,這樣能進一步提升安全性:

$ echo jack:11d5ca0f9ee2dac8c47492b3e6b71c82cd > .jenkins-token

而後可使用 @ 符如下面的方式引用:

$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -auth @/home/nick/.jenkins-token build test -f -v

執行的結果也是同樣的。注意要在 @ 後面不要用 ~ 號代替用戶的家目錄。

除此以外還能夠經過環境變量來指定用戶名和 API Token:

$ export JENKINS_USER_ID=jack
$ export JENKINS_API_TOKEN=11d5ca0f9ee2dac8c47492b3e6b71c82cd
$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 build test -f -v

效果也是同樣的。

經過 SSH 進行鏈接
好吧,客戶端命令行工具也支持經過 SSH 進行鏈接。同時指定 -ssh 和 -user 選項就能夠了:

$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -ssh -user jack build test -f -v

總結

經過 Ansible 等工具自動化的建立 Jenkins Server(參考前文《經過 Ansible 建立 Jenkins Server》),而後再經過 Jenkins 提供的 CLI 自動化的操做 Jenkins 中的配置。這樣咱們就打通了整個 Jenkins Server 的自動化過程(固然,筆者還會介紹如何自動化的建立運行 Jenkins Server 的宿主機)。好吧,這都只是些簡單的 demo,在生產環境中要作的事情可要多的多!

參考:
Jenkins CLI

相關文章
相關標籤/搜索