问题
触发其他Jenkins任务?
这里有两种可能,一种是jenkins本身实例的job和另一种跨实例的调用。
至于你问我,为啥要跨实例调用呢?你也知道有些公司不大,部门倒是齐全,各部门或者小组都有自己的jenkins实例,为了串联它们也就要使用到这个技术了。
解决方法
如果是本实例中的调用,这个是基操。两种方式:
1 - 使用 “Post-build Actions” → “Build other projects”
2 - 使用 pipeline 脚本
如果是调用其他实例, 也有多种模式,最常见的是 webhook
1 - Job 设置为 “Trigger builds remotely”,启用令牌并监听 webhook
先看例子利用 Post-build Actions
这种配置就可以了。
利用pipieline脚本
pipeline {
agent any
stages {
stage('Job A') {
steps {
build job: 'job-A'
}
}
stage('Job B') {
steps {
build job: 'job-B'
}
}
}
}
跨实例的触发方式
在远程需要被触发的Job里面找到
设置好token,并获取到对应webHook地址
在你运行的Job 使用curl 远程调用就可以了。类似:
curl -X POST "http://jenkins.yourdomain.com/job/job-B/build?token=111111111"
补充:2025-7-29 调用细节,权限补充
由于Jenkins 默认开启了 CSRF 防护(crumb)。需要在请求头中加 crumb token。
而crumb token 又必须是需要通过user + user token获取。
因此,必须先创建一个user token
Jenkins Web UI → Manage Jenkins → Manage Users -User 配置中创建一个api token。
接着,通过user + api toekn 调用 “http://JENKINS_URL/crumbIssuer/api/json” 获取一个crumb token
再构建调用脚本,如下
CRUMB=$(curl --noproxy '*' -s -u "jenkins_your_user:jenkins_your_user_TOKEN" "http://YOUR_JENKINS_URL/crumbIssuer/api/json" | jq -r '.crumb')
curl --noproxy '*' -X POST "http://JENKINS_URL/job/YOUR_JOB/buildWithParameters?token=YOUR_JOB_TOKEN&YOUR_PARAM=YOUR_PARAM_VALUE" \
-H "Jenkins-Crumb: $CRUMB" \
-u "jenkins_your_user:jenkins_your_user_TOKEN"
总结
总体上来说,触发工作通常是在组件与主应用之间。起到联动的作用。
我知道有些大型软件的编译需要一次编译超过10个小时以上的,肯定会使用到不同job来配合。
这个时候就需要其他的工具一起来完成流程执行以及对流程监控的。比如引入 8n8的流程应用等等。
可以被外部或者内部触发,确实是jenkins的基础能力还是可以的。
请收藏问题合集,方便随时查找
jenkins的全解-工欲善其事,必先利其器