在进入正题之前,首先介绍一下项目之间的依赖关系 构件。什么是依赖关系呢,例如,项目Test1构建是需要在项目Test2构件完成后进行,这就是依赖关系。在Jenkins上的界面来解释,就是图1的红色区域选项。
使用本地Jenkins的小伙伴请安装 Parameterized Trigger Plugin这个插件
为了模仿这个过程,我创建了Test1和Test2,每个项目里面的构建内容都是 windows batch commonds,输入的命令大家可以随意。
1. Test1 的相关配置如下
首先要知道我们要传递的是packageName这个参数
(1)在Test1中首先设置这个参数。
(2)选择Trigger parameterized build on other projects
Projects to build 选择你要触发的项目,这里我们写Test2。Trigger when build is 按需选择。
predefined parameters中可以定义你要传递的参数,写法如下,也可以将当前job的环境变量传递给另外一个项目。
这样Test1就设置好了
2. Test2 的相关配置如下
Test2 中的配置,选择参数化构建过程。参数名称和刚刚写的要一致![在这里插入图片描述]
windows batch commonds中验证参数是否被正确的传递
3. 最后我们分别来看一下两个Job的控制台输出
首先是Test1的控制台输出。可以看到调用了Test 2
接着我们看下Test2的控制台输出
可以看出,由Test1 的Number4触发,我们传的packageName参数也被传递了过来。
下面来介绍下,pipeline代码中如何把两个JOB给串接起来。我们知道,在图形界面的jenkins中的自由风格的job的设置页眉,我们可以选择,执行完job A之后触发执行Job B, 那么pipeline又是如何实现这一过程呢。
环境准备
当前我的JobA 命名为ProjectA-pipeline-demo,JobB 命名为ProjectA1-pipeline-demo
1. ProjectA-pipeline-demo 的相关配置如下
这是我在本地写的一个简易的pipeline Job,使用build函数可以实现pipeline Job之间的调用和参数传递。
// An highlighted block
import hudson.model.*;
pipeline{
agent any
stages{
stage("Hello Pipeline") {
steps {
script {
println "Hello Pipeline!"
println env.JOB_NAME
println env.BUILD_NUMBER
}
}
}
stage("Init paramters in json") {
steps {
script {
println "read josn input file"
def packagename = "xxx"
println packagename
callTestingJob(packagename)
}
}
}
}
}
def callTestingJob(packagename){
println packagename
build job:"1", propagate: false, wait: true,parameters: [
string(name:'packagename', value: packagename)
]
}
上面我们学习了同类型间的相互调用与传参,那么,不同类型的Job之间如何串联起来呢。我们这里把pipeline Job命名为ProjectB-pipeline-demo,Project Job命名为1.
1. ProjectB-pipeline-demo 的相关配置如下
这是我在自己本地写的一段简易的pipeline代码
// An highlighted block
import hudson.model.*;
pipeline{
agent any
stages{
stage("Hello Pipeline") {
steps {
script {
println "Hello Pipeline!"
println env.JOB_NAME
println env.BUILD_NUMBER
}
}
}
stage("Init paramters in json") {
steps {
script {
println "read josn input file"
def packagename = "xxx"
println packagename
callTestingJob(packagename)
}
}
}
}
}
def callTestingJob(packagename){
println packagename
build job:"1", propagate: false, wait: true,parameters: [
string(name:'packagename', value: packagename)
]
}
定义了一个callTestingJob函数添加调用Job B的代码。传递packagename这个参数。
2. Project 1的相关配置如下
添加一个名字与ProjectB-pipeline-demo要传递参数相同的参数
用windows batch commonds测试一下,看packeageName能不能打印出来。
3. 看下控制台的输出
首先是ProjectB-pipeline-demo的控制台输出。可以看到调用了1
接着我们看下1的控制台输出
可以看出,由ProjectB-pipeline-demo的Number 34触发,我们传的packageName参数也被传递了过来。
【1】https://blog.csdn.net/winter199/article/details/90604933
【2】https://blog.csdn.net/u011541946/article/details/89344002