Jenkins 使用指南 之 高階應用篇

Elijah_Wang發表於2021-02-08

Note: 本次 Jenkins 服務安裝,伺服器以 CentOS 7 系統為例,且以 root 使用者啟動並執行服務。

本篇 Jenkins 使用指南,將簡要概述一下 Jenkins 服務的以下高階應用:

  • Execute Shell with Default ENV Variables (Jenkins 的內建環境變數構建)
  • Build with Parameters (Jenkins 的引數構建)
  • Build with Parameters (Jenkins 的構建版本回退)
  • Build on Remote Servers (Jenkins 的遠端構建)

I. Execute Shell with Default ENV Variables (Jenkins 的內建環境變數構建)

Note: 此處,以 Jenkins 內建引數 GIT_BRANCH (Git 分支名稱) 為例。

1. Jenkins 的內建環境變數列表

通過訪問以下 URL 可以檢視 Jenkins 的內建環境變數列表

http://{YOUR_IP}:{YOUR_PORT}/env-vars.html/

eg. 127.0.0.1:8080/env-vars.html/

2. Jenkins 的內建環境變數 GIT_BRANCH (Git 分支名稱) 的配置

  • 前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,點選 “配置”,進入配置頁面
  • 前往配置 Source Code Management (原始碼管理) > Branches to build,點選”新增分支”,輸入:{GIT_BRANCH},用以指定 環境變數 GIT_BRANCH 為當前觸發構建操作的 Git 分支名稱

3. Jenkins 的內建環境變數 GIT_BRANCH (Git 分支名稱) 的使用

  • 前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,點選 “配置”,進入配置頁面
  • 前往配置 Build (構建),修改先前寫好的構建部署 Shell 指令碼:
cd /home/www/project_name/
# 檢視一下,環境變數 GIT_BRANCH 的輸出結果,eg. origin/dev
echo ${GIT_BRANCH}
git fetch --all
# Shell 的字串擷取操作,eg. ${GIT_BRANCH} 的值為 origin/dev,則:${GIT_BRANCH:7} 的值為 dev
git checkout ${GIT_BRANCH:7}
git pull origin ${GIT_BRANCH:7}:${GIT_BRANCH:7}
chown -R www:www /home/www/project_name/
# some other shell scripts ...
...

以上的 Shell 指令碼,即可實現以下效果:

當某一 Git 操作觸發了 Jenkins 的構建操作,伺服器端的專案程式碼即切換至當前觸發 Jenkins 構建操作的 Git 分支,並進行部署。

II. Build with Git Parameters (Jenkins 的 Git 引數構建)

Note: 此處,Git 引數仍以 Git 分支名稱變數 BRANCH 為例。

1. 安裝外掛 Git Parameter Plug-In

  • i. 前往 Manage Jenkins -> Manage Plugins -> Available
  • ii. 在下方可選列表中勾選 Git Parameter Plug-In
  • iii. 點選 Download now and install after restart
  • iv. 勾選重啟服務

2. 外掛 Git Parameter Plug-In 的使用與 Git 引數的配置

  • i. 前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,點選 “配置”,進入配置頁面
  • ii. 前往配置 General (通用) > Gitee connection (Gitee 連結),勾選 “This project is parameterized” 選項
  • iii. 點選 “新增引數”,選擇 “Git Parameter”,然後,填入引數資訊:
    • a. 名稱: 填寫引數名稱,eg. BRANCH
    • b. 描述: 填寫引數描述即可,eg. Git Branch Name.
    • c. 引數型別: 選擇 Git 引數型別,eg. 分支
    • d. 預設值: 填寫 Git 引數的預設值,eg. origin/dev

3. 檢視配置後的 Git 引數效果

執行完以上操作後,前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,此時即可發現,在左側的選單欄裡,已經新增了一個選項: Build with Parameters.

點選該新增選單選項,即可檢視配置後的 Git 引數效果: 右側頁面出現了一個基於 Git 分支名稱 BRANCH 的構建選項下拉框。

從此,你就可以選擇當前專案下的任意分支,然後點選 “開始構建” 了。

4. Git 引數的使用

承上所說,當我們選擇了當前專案下的某一個分支,然後點選 “開始構建” 後,其實並不會真的如我們所願,根據當前選中的 Git 分支進行構建。因為,我們尚未將該 Git 引數 (也即 Shell 變數) BRANCH 引入到先前寫好的的構建部署 Shell 指令碼中。那我們應該怎麼做呢?

具體操作步驟如下:

  • 前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,點選 “配置”,進入配置頁面
  • 前往配置 Build (構建),修改先前寫好的構建部署 Shell 指令碼:
cd /home/www/project_name/
# 檢視一下,Git 引數 (也即 Shell 變數) BRANCH 的輸出結果,eg. origin/dev
echo ${BRANCH}
git fetch --all
# Shell 的字串擷取操作,eg. ${BRANCH} 的值為 origin/dev,則:${BRANCH:7} 的值為 dev
git checkout ${BRANCH:7}
git pull origin ${BRANCH:7}:${BRANCH:7}
chown -R www:www /home/www/project_name/
# some other shell scripts ...
...

以上的 Shell 指令碼,即可實現以下效果:

當我們在 “Build with Parameters” 頁面選擇了當前專案下的某一個分支,然後點選 “開始構建” 後,伺服器端的專案程式碼即切換至當前選中的那個 Git 分支,並進行部署。

III. Build with Git Parameters (Jenkins 的構建版本回退)

Jenkins 的構建版本回退,本質上,算是剛才第二種情況的一種特例,也即:該功能仍舊依託於外掛 Git Parameter Plug-In 來實現。

Note: 此處,Git 引數以標籤名稱變數 TAG 為例。

1. 安裝外掛 Git Parameter Plug-In

略。

2. 外掛 Git Parameter Plug-In 的使用與 Git 引數的配置

  • i. 前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,點選 “配置”,進入配置頁面
  • ii. 前往配置 General (通用) > Gitee connection (Gitee 連結),勾選 “This project is parameterized” 選項
  • iii. 點選 “新增引數”,選擇 “Git Parameter”,然後,填入引數資訊:
    • a. 名稱: 填寫引數名稱,eg. TAG
    • b. 描述: 填寫引數描述即可,eg. Git Tag Name.
    • c. 引數型別: 選擇 Git 引數型別: 標籤
    • d. 預設值: 填寫 Git 引數的預設值,eg. v1.0

3. 檢視配置後的 Git 引數效果

執行完以上操作後,前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,在左側的選單欄裡,點選選單選項: Build with Parameters,檢視配置後的 Git 引數效果。

此時即可發現: 右側頁面已經較先前增加了一個新的基於 Git 標籤名稱 TAG 的構建選項下拉框。

從此,你就可以選擇當前專案下的任意標籤 (也即版本名稱),然後點選 “開始構建” 了。

4. Git 引數的使用

承上所說,當我們選擇了當前專案下的某一個標籤,然後點選 “開始構建” 後,其實並不會真的如我們所願,根據當前選中的 Git 標籤進行構建。同樣,還是因為我們尚未將該 Git 引數 (也即 Shell 變數) TAG 引入到先前寫好的的構建部署 Shell 指令碼中。那我們應該怎麼做呢?

具體操作步驟如下:

  • 前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,點選 “配置”,進入配置頁面
  • 前往配置 Build (構建),修改先前寫好的構建部署 Shell 指令碼:
cd /home/www/project_name/
git fetch --all
git checkout branch_name
git pull origin branch_name:branch_name --tags
git checkout ${TAG}
chown -R www:www /home/www/project_name/
# some other shell scripts ...
...

以上的 Shell 指令碼,即可實現以下效果:

當我們在 “Build with Parameters” 頁面選擇了當前專案下的某一個標籤,然後點選 “開始構建” 後,伺服器端的專案程式碼即切換至當前選中的那個 Git 標籤所對應的版本,並進行部署。

IV. Build on Remote Servers (Jenkins 的遠端構建)

1. 安裝外掛 SSH Plugin

  • i. 前往:Manage Jenkins -> Manage Plugins -> Available
  • ii. 在下方可選列表中勾選 SSH Plugin
  • iii. 點選 Download now and install after restart
  • iv. 勾選重啟服務

2. 外掛 SSH Plugin 的配置

Remote Servers 遠端伺服器配置:

  • i. 前往 Manage Jenkins -> Configure System -> SSH remote hosts > SSH sites
  • ii. 填寫 Hostname(Your_IP), Port(Default: 22)
  • iii. Credentials 點選 Add - > Jenkins:
    • a. Domain 選擇 Global credentials
    • b. Kind 選擇 Username with password
    • c. Scope 選擇你需要的範圍: Global
    • d. 輸入 username, password
    • e. 在 ID, Descripiton 中輸入你想要的 ID 和描述內容 (所填 ID 保證其唯一性即可)。
  • iv. Check connection 測試連結:Successful connection.

3. Remote Servers 遠端伺服器配置的使用

Note: 目前假設,剛才配置好的遠端伺服器,其使用者身份 (username) 不是 root.

  • i. 前往先前建立好的構建專案 (eg. GiteeTest) 的管理頁面,點選 “配置”,進入配置頁面
  • ii. 前往配置 Build (構建),點選 “增添構建步驟”,選擇 “Execute shell script on remote host using ssh”
    • a. SSH site: 選擇先前配置好的遠端伺服器
    • b. 在 Shell 命令文字框內,輸入如下構建部署 Shell 指令碼:
    • c. 最後,一定不要勾選 “Execute each line”!!!
cd /home/www/project_name/
# 檢視一下,Git 引數 (也即 Shell 變數) BRANCH 的輸出結果,eg. origin/dev
echo ${BRANCH}
# echo ${GIT_BRANCH}
sudo git fetch --all
# Shell 的字串擷取操作,eg. ${BRANCH} 的值為 origin/dev,則:${BRANCH:7} 的值為 dev
sudo git checkout ${BRANCH:7}
sudo git pull origin ${BRANCH:7}:${BRANCH:7}
sudo chown -R www:www /home/www/project_name/
# some other shell scripts ...
...

以上,在先前配置好的遠端伺服器上,以非 root 使用者身份執行的 Shell 指令碼,即可實現以下效果:

當我們在 “Build with Parameters” 頁面選擇了當前專案下的某一個分支,然後點選 “開始構建” 後,遠端伺服器端的專案程式碼即切換至當前選中的那個 Git 分支,並進行部署。

4. 生成並新增 SSH 公鑰

Note: 千萬不要忘記,需要將該遠端伺服器當前使用者下的 SSH 公鑰新增至 gitee 使用者配置中!!!

以上,Jenkins 高階應用介紹完畢。

— END —

本作品採用《CC 協議》,轉載必須註明作者和本文連結
夏蟲不語冰

相關文章