酷!學園

技術討論區 => DevOps 討論版 => 主題作者是: duncanlo 於 2016-02-02 11:04

主題: [CI]IT求生術系列 - 教你十分鐘利用Jenkins搞定持續整合測試
作者: duncanlo2016-02-02 11:04
0. 前言源由

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

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

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

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

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


1. 系統需求

2. 軟體安裝
代碼: (URL) [選擇]
https://jenkins-ci.org/
代碼: (Shell) [選擇]
java -jar jenkins.war
代碼: (URL) [選擇]
http://localhost:8080

3. 新增作業
代碼: (Cron) [選擇]
#每5分鐘
5 * * * *
代碼: (Shell) [選擇]
ping localhost
4. 功能測試
代碼: (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
代碼: (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
代碼: (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. 系統管理
代碼: (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 Web 管理頁面後,點選頁面右上角的[註冊],以註冊一個新用戶(由 Jenkins 管理帳號).
  當以註冊用戶登入後,便可進行作業的設定修改,而未登入者僅能檢視作業的執行狀況.


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


~~於2016情人節完成初版~~