Linux環境下Jenkins任務調度的主要方法
這是Jenkins最常用的定時調度方式,通過cron表達式定義任務執行時間。操作路徑為:進入任務配置頁面→找到“構建觸發器”部分→勾選“Build periodically”→輸入cron表達式。
cron表達式格式為MINUTE HOUR DOM MONTH DOW
(分鐘、小時、日、月、星期),支持特殊字符:*
(匹配所有值)、M-N
(范圍,如1-5
表示1到5號)、M-N/X
或*/X
(步長,如*/15
表示每15分鐘)、A,B,C
(枚舉,如MON,WED,FRI
表示周一、三、五)。
為避免多任務同時執行導致系統負載過高,建議使用H
(哈希)符號,如H/15 * * * *
(每隔15分鐘執行一次,時間點隨機分布)、H H/2 * * *
(每兩小時執行一次)。
示例:每天凌晨2點執行構建,表達式為0 2 * * *
;每周一到周五的上午9:45到下午3:45每兩小時執行一次,表達式為H */2 * * 1-5
。
若使用Pipeline(流水線)模式,可直接在Jenkinsfile
中通過triggers
塊配置定時觸發。語法與內置觸發器一致,但需注意:Pipeline中的cron表達式會覆蓋“構建配置”中的定時設置(若同時存在,以Pipeline中的為準)。
示例:
pipeline {
agent any
triggers {
cron('H 23 * * *') // 每天23點執行
}
stages {
stage('Build') {
steps {
echo '夜間構建執行中...'
}
}
}
}
此外,Pipeline還支持輪詢SCM(Source Code Management),通過pollSCM
觸發器定期檢查代碼倉庫(如Git)是否有變更,若有變更則觸發構建。示例:每5分鐘檢查一次Git倉庫,表達式為pollSCM('H/5 * * * *')
。
通過Linux系統的crontab
工具,定期調用Jenkins的Remote Access API觸發任務。操作步驟如下:
crontab -e
),添加如下行(以每天凌晨2點觸發為例):0 2 * * * curl -X POST http://JENKINS_SERVER_URL/job/JOB_NAME/build --user USERNAME:API_TOKEN
其中,JENKINS_SERVER_URL
為Jenkins服務器地址(如http://localhost:8080
),JOB_NAME
為目標任務名稱,USERNAME
和API_TOKEN
為Jenkins賬號信息。Esc
→:wq
),通過crontab -l
驗證任務是否添加成功。若Jenkins運行在Kubernetes集群中,可通過Kubernetes插件動態調度任務到集群內的Pod執行,提升任務的可擴展性和可靠性。操作步驟如下:
https://kubernetes.default.svc
)和Credentials(如kubeconfig文件);agent
塊引用Pod模板,示例:pipeline {
agent {
kubernetes {
label 'jenkins-agent' // Pod標簽
yaml """
metadata:
labels:
app: jenkins-agent
spec:
containers:
- name: jnlp
image: jenkins/inbound-agent:latest
resources:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "250m"
memory: "256Mi"
"""
}
}
stages {
stage('Test') {
steps {
sh 'echo "在Kubernetes Pod中執行任務"'
}
}
}
}
Kubernetes插件會根據Pod模板的定義,自動創建并調度Pod執行任務,任務完成后Pod會被銷毀,節省資源。