Jenkins 踩坑 | job 創(chuàng)建、參數(shù)化、定時(shí)構(gòu)建及時(shí)區(qū)偏差問題解決
啟動 Jenkins 后在首頁點(diǎn)擊"開始創(chuàng)建一個(gè)新任務(wù)"。
2)輸入任務(wù)名稱,選擇自由風(fēng)格,點(diǎn)擊“確定”。
1) 任意輸入描述,然后勾選"丟棄舊的構(gòu)建", 在"保持構(gòu)建的最大個(gè)數(shù)中"輸入 3。
1)勾選"參數(shù)化構(gòu)建過程",選擇添加"字符參數(shù)"
2)設(shè)置參數(shù)名稱、默認(rèn)值和描述
1)在"構(gòu)建觸發(fā)器"中勾選"定時(shí)構(gòu)建",日程表中輸入H2/ * * * *,表示每兩分鐘構(gòu)建一次。
1)在構(gòu)建中選擇執(zhí)行 shell,簡單的執(zhí)行一條打印語句,打印上面設(shè)置好的參數(shù)param;設(shè)置好之后保存即可。
可以看到構(gòu)建結(jié)果是每 2 分鐘構(gòu)建一次,且只保留最近的 3 次構(gòu)建,參數(shù) param使用了默認(rèn)值Jenkins。
打開控制臺輸出可以看到執(zhí)行的日志信息。
如果想要修改參數(shù)值,選擇Build with Parameters,修改參數(shù),點(diǎn)擊開始構(gòu)建即可。
在上述設(shè)置定時(shí)構(gòu)建時(shí),輸入了一行命令H2/ * * * *來表示每隔 2 分鐘構(gòu)建一次,這是一種crontab的寫法,具體描述分五個(gè)部分:
星號(*):代表所有可能的值,例如 month 字段如果是星號,則表示在滿足其它字段的制約條件后每月都執(zhí)行該命令操作。
逗號(,):可以用逗號隔開的值指定一個(gè)列表范圍,例如,“1,2,5,7,8,9”。
中杠(-):可以用整數(shù)之間的中杠表示一個(gè)整數(shù)范圍,例如 “2-6” 表示 “2,3,4,5,6”。
正斜線(/):可以用正斜線指定時(shí)間的間隔頻率,例如 “0-23/2” 表示每兩小時(shí)執(zhí)行一次。同時(shí)正斜線可以和星號一起使用,例如 */10,如果用在 minute 字段,表示每十分鐘執(zhí)行一次。
但是實(shí)際在 Jenkins 中進(jìn)行定時(shí)構(gòu)建時(shí),寫法相似但是還是有區(qū)別,還是以上述的H2/ * * *?來表示每隔 2 分鐘為例,當(dāng)我們用/2 * * * *寫法時(shí):
可以看到 Jenkins 建議我們使用H來代表通配符,因此在表示每隔多久時(shí)建議使用H/的方式。
另外,如果表示每天上午 9 點(diǎn)構(gòu)建,如果使用0 9 * * *:
可以看到 Jenkins 建議我們使用H 9 * * *的方式:
下面是一些常用定時(shí)方式的參考示例:
1.每 30 分鐘構(gòu)建一次:H/30 * * * *。
2.每 2 小時(shí)構(gòu)建一次:H H/2 * * *。
3.每天早上 9 點(diǎn)構(gòu)建一次:H 9 * * *。
4.每天 8 點(diǎn)、12 點(diǎn)、21 點(diǎn)各構(gòu)建一次:H 8,12,21 * * *。
5.周一至周五,每天 22 點(diǎn)到 23 點(diǎn)之間每隔 3 分鐘構(gòu)建一次:H/3 22-23 * * 1-5。
運(yùn)行完畢后,會發(fā)現(xiàn)一個(gè)問題,構(gòu)建的時(shí)間與我們實(shí)際的時(shí)間不一致:
Jenkins 顯示時(shí)間
系統(tǒng)實(shí)際時(shí)間
因?yàn)槲覀兪怯?Docker 部署的,所以再通過打印 Docker 容器的時(shí)間進(jìn)行查看:
再進(jìn)入"系統(tǒng)管理"->“系統(tǒng)信息”->“user.timezone"查看:
綜上所述可以確定因?yàn)?Jenkins 容器使用的是 UTC 時(shí)間,和我們的北京時(shí)間差了正好 8 個(gè)小時(shí),針對我們是 Docker 部署的,解決方法如下 (其他直接在系統(tǒng)部署的可以另行百度~)。
在 Jenkins 容器啟動的時(shí)候添加參數(shù)
啟動后再次查看"系統(tǒng)管理”->“系統(tǒng)信息”->“user.timezone”,發(fā)現(xiàn)時(shí)區(qū)已修改為上海:
查看構(gòu)建歷史,發(fā)現(xiàn)時(shí)間已于系統(tǒng)時(shí)間保持一致,修改完成:
以上,歡迎大家一起交流探討。