作者 主題: [CI]IT求生術系列 - 教你十分鐘利用Jenkins搞定持續整合測試  (閱讀 1598 次)

0 會員 與 1 訪客 正在閱讀本文。

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7311
    • 檢視個人資料
0. 前言源由

  監控 (Mornitoring & Control) 系統一直都是IT環境中不可或缺的一個環節,多年 IT 的發展,在監視 (Monitoring) 這個領域已有眾多成熟的解決方案,而控制 (Control) 這部份,由於平台廣度支援考量的因素,現有成熟的解決方案多半為成本較高的商用軟體,拜於 DevOps 概念之興起,自動化 (Automation) 的需求與發展也越趨成熟.

  自動化並非是取代 IT 人員的職位,反而是增加 IT 的產能與減少人為錯誤的發生,這對 IT 發展是正面的助力與效益.

  本文撰寫的目的,僅是分享初步體驗心得,故無需高深技術或是程式開發等能力,只需要有基本 IT 概念及操作能力即可.

  標題已經寫明要十分鐘搞定,故請恕我刪去許多功能介紹.

  其實各平台已有安裝包,但這邊考量的角度為以最小或適當權限執行應用服務,以 root 或 administratior 雖然可以作到所有事,但若是自動化的過程中,有 shell 或 batch 的撰寫錯誤(如 output 錯導入某 disk 裝置)造成系統異常,是會造成服務停擺,或你的環境有被授權允許安裝非辨公的軟體嗎?故這篇文章會先以一般用戶 (Normal User) 及減少安裝 (Portable) 的環境作介紹.


1. 系統需求
  • Java7, 建議 Java8
  • 256MB-1GB 磁碟可用空間

2. 軟體安裝
  • 到 Jenkis 網站,下載最新版 jenkins.war (本文撰寫時為 v1.646)
代碼: (URL) [選擇]
https://jenkins-ci.org/
  • 執行
代碼: (Shell) [選擇]
java -jar jenkins.war
  • 操作
代碼: (URL) [選擇]
http://localhost:8080

3. 新增作業
  • 點選[新增作業]
  • 於[作業名稱]中填入一個作業的名稱,如 testtask
  • 挑選[建置 Free-Style 軟體專案]
  • 按[OK]完成
  • 於[建置觸發程序]項目中勾選[定期建置]
  • 於[排程]中填入排程週期時間
    • 假如沒指定便不會自動定期執行,需要手動執行
    • 格式如 cron, 可用 # 開頭作附註,如每5分鐘執行一次,就填入下面的內容
代碼: (Cron) [選擇]
#每5分鐘
5 * * * *
  • 於[建置]項目中點選[新增建置步驟],挑選[執行 Windows 批次指令]
  • 於[指令]內容中,填入欲執行的 Windows 指令,如
代碼: (Shell) [選擇]
ping localhost
  • 按[儲存]完成
  • 點選[回到儀表板]應該就可以看到剛才新增的作業在列表中,而且開始依指定的週期進行作業執行

4. 功能測試
  • 正常執行狀況
    • 作業執行成功的終端機輸出 (Console Output) 結果如下:
代碼: (Log) [選擇]
由計時器啟動
建置中 工作區 /home/testuser/.jenkins/jobs/Task1/workspace
[workspace] $ /bin/sh -xe /tmp/hudson1841741314535644877.sh
+ date
日  2月 14 10:42:00 CST 2016
+ ping -c 5 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.013 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.019 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.012 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.053 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.055 ms

--- localhost ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.012/0.030/0.055/0.020 ms
+ echo Hello!!
Hello!!
+ date
日  2月 14 10:42:04 CST 2016
Finished: SUCCESS
  • Ping 不到 IP
    • 因為執行結果是異常
    • 會呈現作業錯誤的狀態
    • 作業執行失敗的終端機輸出 (Console Output) 結果如下:
代碼: (Log) [選擇]
由計時器啟動
建置中 工作區 /home/testuser/.jenkins/jobs/Task3/workspace
[workspace] $ /bin/sh -xe /tmp/hudson8024915939564601609.sh
+ date
日  2月 14 10:44:04 CST 2016
+ ping -c 5 localhost123
ping: unknown host localhost123
Build step '執行 Shell' marked build as failure
Finished: FAILURE
  • 指令打錯
    • 因為指令執行是異常
    • 會呈現作業錯誤的狀態
    • 作業執行失敗的終端機輸出 (Console Output) 結果如下:
代碼: (Log) [選擇]
由計時器啟動
建置中 工作區 /home/testuser/.jenkins/jobs/Task4/workspace
[workspace] $ /bin/sh -xe /tmp/hudson6497490487894411825.sh
+ date
日  2月 14 10:47:04 CST 2016
+ ping123 -c 5 localhost
/tmp/hudson6497490487894411825.sh: 3: /tmp/hudson6497490487894411825.sh: ping123: not found
Build step '執行 Shell' marked build as failure
Finished: FAILURE


5. 系統管理
  • 透過 Jenkins CLI 模式
    • 解壓縮 jenkins.war 可以找到 jenkins-cli.jar
    • 或是於安裝後,於用戶<家目錄>中的某個目錄中找到,詳細路徑如下
代碼: (Path) [選擇]
C:\Users\Testuser\.jenkins\war\WEB-INF\jenkins-cli.jar
  • 重新啟動
代碼: (Shell) [選擇]
java -jar jenkins-cli.jar -s http://localhost:8080 restart
  • 關閉服務
代碼: (Shell) [選擇]
java -jar jenkins-cli.jar -s http://localhost:8080 shutdown

6. 安全控管
  **以下安全性設定內容適用於 Linux 平台,於 Windows 平台,可能無法出現某些選項供設定**

  預設啟動 Jenkins 後是沒有任何安全性控管,任何連接到 Jenkins Web 管理頁面,皆可以進行作業的新增或異動,若想限制特定用戶及允許作業設定的權限,而其他用戶僅能檢視作業執行進度及狀況,需參照以下步驟進行安全性設定:
  • 勾選[管理 Jenkins]
  • 點選[設定全域安全性]
  • 勾選[啟用安全性]
  • 於[存取控制] - [安全性領域]中,勾選[Jenkins 內建使用者資料庫 ]
  • 於[存取控制] - [授權]中,勾選[登入成功的使用者可以做任何事 ]
  • 點選[儲存]
  再次以連接 Jenkins Web 管理頁面後,點選頁面右上角的[註冊],以註冊一個新用戶(由 Jenkins 管理帳號).
  當以註冊用戶登入後,便可進行作業的設定修改,而未登入者僅能檢視作業的執行狀況.


7. 應用埸景
  應用在程式開發 (Program Development) 已有太多案例,可以自行逛網查詢.
  以系統管理 (Infra. Admin) 角度看 Jenkins, 它其實就是一個集中式的排程器,它可以應用在一些場景,如:
  • 爬蟲程式
  • 跑 Batch 匯入 BI
  • D2D2T 備份作業稽核
  • 結合日常管理的 Batch 或 Shell
  因為 Jenkins 會紀錄是否成功及訊息內容,故可以套用在需要集中式管理,或是事後需要調閱執行結果的需求上,管理人員只需要專精在自己擅長的平台上作管理行為設計,其他自動化的部份可以交給 Jenkins 負責.


~~於2016情人節完成初版~~
« 上次編輯: 2016-02-14 11:14 由 duncanlo »