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会被销毁,节省资源。