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)
https://jenkins-ci.org/
java -jar jenkins.war
http://localhost:8080
3. 新增作業
- 點選[新增作業]
- 於[作業名稱]中填入一個作業的名稱,如 testtask
- 挑選[建置 Free-Style 軟體專案]
- 按[OK]完成
- 於[建置觸發程序]項目中勾選[定期建置]
- 於[排程]中填入排程週期時間
- 假如沒指定便不會自動定期執行,需要手動執行
- 格式如 cron, 可用 # 開頭作附註,如每5分鐘執行一次,就填入下面的內容
#每5分鐘
5 * * * *
- 於[建置]項目中點選[新增建置步驟],挑選[執行 Windows 批次指令]
- 於[指令]內容中,填入欲執行的 Windows 指令,如
ping localhost
- 按[儲存]完成
- 點選[回到儀表板]應該就可以看到剛才新增的作業在列表中,而且開始依指定的週期進行作業執行
4. 功能測試
- 正常執行狀況
- 作業執行成功的終端機輸出 (Console Output) 結果如下:
由計時器啟動
建置中 工作區 /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) 結果如下:
由計時器啟動
建置中 工作區 /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) 結果如下:
由計時器啟動
建置中 工作區 /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
- 或是於安裝後,於用戶<家目錄>中的某個目錄中找到,詳細路徑如下
C:\Users\Testuser\.jenkins\war\WEB-INF\jenkins-cli.jar
java -jar jenkins-cli.jar -s http://localhost:8080 restart
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情人節完成初版~~