本文為霍格沃茲測試學院優秀學員 Jekins 學習踩坑筆記。測試開發技能進階,文末加群。
1、創建 job
1)啟動 Jenkins 後在首頁點擊"開始創建一個新任務"。
2)輸入任務名稱,選擇自由風格,點擊“確定”。
2、構建保持配置
1) 任意輸入描述,然後勾選"丟棄舊的構建", 在"保持構建的最大個數中"輸入 3。
由於 Jenkins 構建產生的日誌等信息會保存在本機磁盤中,這樣無限構建任務的話就會佔用很多磁盤空間,因此可以在這裡對舊的構建進行配置丟棄,可以選擇以天數為條件,也可以選擇保持的個數,這裡就以保持 3 個構建數為例。
3、參數化設置
1)勾選"參數化構建過程",選擇添加"字符參數"
2)設置參數名稱、默認值和描述
4、定時構建
1)在"構建觸發器"中勾選"定時構建",日程表中輸入H2/ * * * *,表示每兩分鐘構建一次。
5、Execute Shell
1)在構建中選擇執行 shell,簡單的執行一條打印語句,打印上面設置好的參數param;設置好之後保存即可。
6、結果展示
- 可以看到構建結果是每 2 分鐘構建一次,且只保留最近的 3 次構建,參數 param使用了默認值Jenkins。
- 打開控制檯輸出可以看到執行的日誌信息。
- 如果想要修改參數值,選擇Build with Parameters,修改參數,點擊開始構建即可。
7、補充說明
7.1 定時構建時間描述
在上述設置定時構建時,輸入了一行命令H2/ * * * *來表示每隔 2 分鐘構建一次,這是一種crontab的寫法,具體描述分五個部分:
<code>分鐘 小時 日期 月份 星期幾 * * * * * - - - - - | | | | | | | | | +----- 星期中星期幾 (0 - 7) (星期天 為 0 或 7) | | | +---------- 月份 (1 - 12) | | +--------------- 一個月中的第幾天 (1 - 31) | +-------------------- 小時 (0 - 23) +------------------------- 分鐘 (0 - 59)/<code>
- 星號(*):代表所有可能的值,例如 month 字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。
- 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”。
- 中槓(-):可以用整數之間的中槓表示一個整數範圍,例如 “2-6” 表示 “2,3,4,5,6”。
- 正斜線(/):可以用正斜線指定時間的間隔頻率,例如 “0-23/2” 表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如 */10,如果用在 minute 字段,表示每十分鐘執行一次。
但是實際在 Jenkins 中進行定時構建時,寫法相似但是還是有區別,還是以上述的H2/ * * * *來表示每隔 2 分鐘為例,當我們用*/2 * * * *寫法時:
可以看到 Jenkins 建議我們使用H來代表通配符,因此在表示每隔多久時建議使用H/的方式。
另外,如果表示每天上午 9 點構建,如果使用0 9 * * *:
可以看到 Jenkins 建議我們使用H 9 * * *的方式:
下面是一些常用定時方式的參考示例:
- 每 30 分鐘構建一次:H/30 * * * *。
- 每 2 小時構建一次:H H/2 * * *。
- 每天早上 9 點構建一次:H 9 * * *。
- 每天 8 點、12 點、21 點各構建一次:H 8,12,21 * * *。
- 週一至週五,每天 22 點到 23 點之間每隔 3 分鐘構建一次:H/3 22-23 * * 1-5。
7.2 時間不一致
7.2.1 現象原因
運行完畢後,會發現一個問題,構建的時間與我們實際的時間不一致:
- Jenkins 顯示時間
- 系統實際時間
因為我們是用 Docker 部署的,所以再通過打印 Docker 容器的時間進行查看:
<code>jenkins@0520b8208ffb:/$ date Fri Apr 10 01:35:30 UTC 2020 jenkins@0520b8208ffb:/$ exit exit xxxdeMacBook-Pro:jenkins_home xxx$ date 2020 年 4 月 10 日 星期五 09 時 35 分 35 秒 CST/<code>
再進入"系統管理"->"系統信息"->"user.timezone"查看:
綜上所述可以確定因為 Jenkins 容器使用的是 UTC 時間,和我們的北京時間差了正好 8 個小時,針對我們是 Docker 部署的,解決方法如下 (其他直接在系統部署的可以另行百度~)。
7.2.2 解決方法
在 Jenkins 容器啟動的時候添加參數
<code>$ docker run ... -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai/<code>
啟動後再次查看"系統管理"->"系統信息"->"user.timezone",發現時區已修改為上海:
查看構建歷史,發現時間已於系統時間保持一致,修改完成:
以上,歡迎大家一起交流探討。
(文章來源於霍格沃茲測試學院)