2017-10-26

使用指令 (jenkins cli) 來執行 Jenkins 動作:安裝 plugin、重新啟動...

一般情境我們都是使用 Jenkins GUI 來操作來安裝套件或是其他動作,可說是簡單又方便幾乎沒有進入門檻,對於想要學習 Jenkins 的人非常友善,也是推薦做法,今天則是要來介紹在無法使用 GUI 的情境 - 全自動化 script 安裝或是 docker 安裝時只能透過指令來執行 Jenkins 動作


下載 Jenkins CLI

Jenkins CLI 是跟著 Jenkins 版本而有不同的,如果 Jenkins 有更新就需要重路下載,載點就是在 Jenkins 中

  • 下載連結格式

    https://{jenkis_url}/jnlpJars/jenkins-cli.jar

  • 下載連結範例

    https://localhost:8080/jnlpJars/jenkins-cli.jar

Jenkins CLI 指令介紹頁面

  • 說明 URL 格式

    http://{jenkins_url}/cli/

  • 說明 URL 範例

    http://localhost:8081/cli/

  • 說明實例

    1jenkinscli

執行 Jenkins CLI 指令

  • 需要安裝 java 並加入環境變數中

    在 Jenkins 安裝機器上,安裝 Jenkins 時即會預設安裝 Java

  • 指令格式

    java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...] [arguments...]

  • 指令範例

    java -jar jenkins-cli.jar -s http://localhost:8081 version

  • 指令實例

    3comamnd

Jenkins CLI 特定指令說明

  • 說明指令格式

    java -jar jenkins-cli.jar -s {jenkins_url} help {command}

  • 說明指令範例

    java -jar jenkins-cli.jar -s http://localhost:8081 help install-plugin

  • 設明指令實例

    2helpcommand

執行 Jenkins CLI 指令需認證

因為 Jenkins 重要性很高,一般都會有認驗證檢查做第一層保護,避免重要資訊外洩或是惡意操作造成問題,Jenkins CLI 也有相同機制

  • 錯誤訊息
    • 一般指令
      ERROR: anonymous is missing the Overall/Read permission
      
    • help 指令
      ERROR: You must authenticate to access this Jenkins.
      Jenkins CLI
      Usage: java -jar jenkins-cli.jar [-s URL] command [opts...] args...
      Options:
      -s URL       : the server URL (defaults to the JENKINS_URL env var)
      -http        : use a plain CLI protocol over HTTP(S) (the default; mutually exclusive with -ssh and -remoting)
      -ssh         : use SSH protocol (requires -user; SSH port must be open on server, and user must have registered a public key)
      -remoting    : use deprecated Remoting channel protocol (if enabled on server; for compatibility with legacy commands or command modes only)
      -i KEY       : SSH private key file used for authentication (for use with -ssh or -remoting)
      -p HOST:PORT : HTTP proxy host and port for HTTPS proxy tunneling. See https://jenkins.io/redirect/cli-https-proxy-tunnel
      -noCertificateCheck : bypass HTTPS certificate check entirely. Use with caution
      -noKeyAuth   : dont try to load the SSH authentication private key. Conflicts with -i
      -user        : specify user (for use with -ssh)
      -strictHostKey : request strict host key checking (for use with -ssh)
      -logger FINE : enable detailed logging from the client
      -auth [ USER:SECRET | @FILE ] : specify username and either password or API token (or load from them both from a file);
      for use with -http, or -remoting but only when the JNLP agent port is disabled
      
      The available commands depend on the server. Run the help command to
      see the list.
      
  • 錯誤畫面
    • 一般指令

      4permission

    • help 指令

      5helppermission

  • 解決方式

    我個人使用指定帳號密碼的方式示範,但文件上較推薦使用 ssh 方式

    • 說明指令格式

      java -jar jenkins-cli.jar -s {jenkins_url} {command} --username {username} --password {password}

    • 說明指令範例

      java -jar jenkins-cli.jar -s http://localhost:8081 help install-plugin --username yowko --password pass.123

    • 設明指令實例

      6withauth

心得

因為想要透過 docker 來建立 Jenkins 服務,為了完全自動化作業所以想到利用 command script 來安裝需要的 plugin,進而發現原來 Jenkins 提供非常完整的 CLI 支援,順手紀錄一下。

想到一個 Jenkins 就有這麼多東西要學習,真的是學無止盡呀

參考資訊

  1. Jenkins CLI
  2. Support --username and --password as parameters to jenkins-cli.jar

沒有留言:

張貼留言