Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)

Jenkins技巧之同类型及不同类型之间的job调用及传参

  • 一、背景
    • 环境准备
  • 二、同类型Job间的相互调用
    • Project Job间的相互调用及传参
    • Pipeline Job间的相互调用及传参
  • 三、不同类型Job间的相互调用
    • Pipeline Job 调用Project Job并传参
        • 参考文献

一、背景

在进入正题之前,首先介绍一下项目之间的依赖关系 构件。什么是依赖关系呢,例如,项目Test1构建是需要在项目Test2构件完成后进行,这就是依赖关系。在Jenkins上的界面来解释,就是图1的红色区域选项。

Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第1张图片

环境准备

  1. 一台电脑
  2. Jenkins环境(这个网上有,可以随意找)

二、同类型Job间的相互调用

Project Job间的相互调用及传参

使用本地Jenkins的小伙伴请安装 Parameterized Trigger Plugin这个插件

为了模仿这个过程,我创建了Test1和Test2,每个项目里面的构建内容都是 windows batch commonds,输入的命令大家可以随意。

1. Test1 的相关配置如下

首先要知道我们要传递的是packageName这个参数
(1)在Test1中首先设置这个参数。Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第2张图片
(2)选择Trigger parameterized build on other projects

Projects to build 选择你要触发的项目,这里我们写Test2。Trigger when build is 按需选择。

predefined parameters中可以定义你要传递的参数,写法如下,也可以将当前job的环境变量传递给另外一个项目。Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第3张图片
这样Test1就设置好了

2. Test2 的相关配置如下

Test2 中的配置,选择参数化构建过程。参数名称和刚刚写的要一致![在这里插入图片描述]
windows batch commonds中验证参数是否被正确的传递
Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第4张图片
3. 最后我们分别来看一下两个Job的控制台输出Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第5张图片
首先是Test1的控制台输出。可以看到调用了Test 2

接着我们看下Test2的控制台输出
Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第6张图片
可以看出,由Test1 的Number4触发,我们传的packageName参数也被传递了过来。

Pipeline Job间的相互调用及传参

下面来介绍下,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 调用Project Job并传参

上面我们学习了同类型间的相互调用与传参,那么,不同类型的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的相关配置如下
Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第7张图片
添加一个名字与ProjectB-pipeline-demo要传递参数相同的参数Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第8张图片
用windows batch commonds测试一下,看packeageName能不能打印出来。

3. 看下控制台的输出

Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第9张图片

首先是ProjectB-pipeline-demo的控制台输出。可以看到调用了1

接着我们看下1的控制台输出
Jenkins技巧之同类型及不同类型之间的job调用及传参(带参触发)_第10张图片
可以看出,由ProjectB-pipeline-demo的Number 34触发,我们传的packageName参数也被传递了过来。

参考文献

【1】https://blog.csdn.net/winter199/article/details/90604933
【2】https://blog.csdn.net/u011541946/article/details/89344002

你可能感兴趣的:(jenkins入门,js,jenkins)