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

一、背景

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

在这里插入图片描述

环境准备

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

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

Project Job间的相互调用及传参

使用本地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间的相互调用及传参

下面来介绍下,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的相关配置如下
在这里插入图片描述
添加一个名字与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

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
对于Jenkins版本回退的需求,可以通过以下步骤来实现: 1. 首先,在Jenkins上配置参数化构建过程,以便在每次构建之前提示是否需要回退。这样可以根据需要选择发布还是回滚,默认情况下是发布状态。 [2] 2. 为了支持版本回退操作,需要将项目的包文件归档到每次构建的任务下。这样,在Jenkins的每个任务下都会备份相应的包文件,方便进行版本回退。可以在构建过程中编写脚本来生成相应的归档文件。 [2] 3. 编辑Pipeline脚本,根据选择的操作进行环境构建。如果选择发布,就执行构建操作;如果选择回滚,就将之前归档的包文件替换到现有路径下。将归档脚本添加到Pipeline脚本中,在每次发布完成后执行包文件归档操作。 [2] 4. 保存并测试配置。在构建过程中,选择进行发布操作还是回滚操作。如果选择回滚操作,需要指定要回滚的版本。 [2] 5. 后期可以进行优化。由于回滚操作会归档每个版本的包文件,长时间运行可能导致磁盘空间占用过高。建议配置保留的包文件个数或天数,删除之前多余且不需要回滚的包文件。 [2] 需要注意的是,以上步骤是根据实际搭建经验总结的,如果有任何问题,可以在评论区留言,共同探讨进步。 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Git、Jenkins、Ansible实践CICD视频课程](https://download.csdn.net/download/qwmwysr/87808175)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [jenkins版本回滚-jenkinsfile回滚(pipeline回滚实操)](https://blog.csdn.net/tiny_du/article/details/119958284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Jenkins版本回滚](https://blog.csdn.net/V_wenmao/article/details/120457951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值