Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-1-B-代码解释和jenkins debug技巧

这篇主要是对上一篇的代码的一些解释,有些知识在上一篇没有交代清楚,等了解了这些基础知识,下面我们的练习都是围绕这篇的基础进行扩展。

1.pipeline stage 文件

import hudson.model.*;

println env.JOB_NAME
println env.BUILD_NUMBER
println env.WORKSPACE

pipeline{
	agent any
	stages{
		stage("init") {
			steps{
				script{
					model_test = load env.WORKSPACE + "/pipeline/module/pipeline-demo-module.groovy"
				}
			}
		}
		stage("Test Method") {
			steps{
				script{
					log_files = model_test.find_files('**/*.log')
				}
			}
		}
	}
}


2.pipeline module文件

import hudson.model.*;


def find_files(filetype) {
	
	def files = findFiles(glob:filetype)
	for (file in files) {
		println file.name
	}
}

return this;

1.导入jenkins依赖包

大部分时候,我们都需要在pipeline代码运行过程中去获取当前构建job的一些信息,例如当然运行job的名称和构建ID,以及构建结果,项目的完整URL等信息。这些都需要jenkins 类库来提供,我们只需要在代码里调用。第一句 import hudsun.model.*; 为什么这么写,我前面文章介绍过在lib文件夹下有一个jenkins-core.jar文件,有时候你会看到是一个hudsun-core.jar,其实是一样。你完全可以写成 import jenkins.model.*; 不信,你找到jenkins-core.jar文件进行解压,出来的文件就有jenkins和hudson两个相同的文件夹,里面的子文件也差不多相同,你可以可以找到hudsun.model这个文件路径。一般来说,我们代码里需要用到Jenkins相关基本上导入model下全部类就可以了。

2.env.JOB_NAME

这里使用env,env在Jenkins中也相当于一个关键字,其实就是environment,环境变量的缩写,通过env可以通过点(.)来调用一些属性的值。详细的知识,可以点击这里:http://65.49.216.200:8080/job/pipeline-project-demo/pipeline-syntax/globals,每台Jenkins环境都有这个知识页面,忘记了可以去翻翻看。

这里重点提下env下的WORKSPACE介绍:The absolute path of the directory assigned to the build as a workspace,什么意思呢,就是当前运行的jenkins job的绝对路径。这里workspace和jenkins本身的workspace不是同一个,要搞清楚。我代码两处地方用到了env.WORKSPACE,第一次在pipeline{...}外就打印为空,没有拿到当前job的workspace路径,第二次是在load 关键字之后,用来拼接处model方法的绝对路径,这次就有值(在日志控制台有打印)。第一次没有值,但是上一行代码env.JOB_NAME就有值,这里我没有找到准确的答案,知道的朋友可以在这篇留言。

这里简单提一下使用env.WORKSPACE的场景,有时候,我们需要代码自动在当前job的运行目录下新建一个文件,并写入内容。这个时候文件的路径拼接就肯定要用到env.WORKSPACE。

3.关键字load

这里面load(file path),就是加载外部groovy 文件的作用。为了代码可读性,一般都使用env.WORKSPACE + “ file path 部分路径”来表示加载外部groovy文件的绝对路径,这样不会出错。等号左边就是一个object对象,你可以在前面加上关键字def,也可以不用。在groovy中,可用也可以不用,那就建议不用,这是一种groovy范。

因为我在stage{...}需要调用外部model的文件里面的方法,所以这里使用了load, 我调用了一个查找文件的方法findFiles。

4. return this;

在一个groovy类文件中,this就表示groovy这个类对象。由于我们使用了load来加载一个外部模块类,那么在结尾处最后写return this就是把这个模块用一个对象去接收,这样我们在pipeline stage中,就可以通过模块.方法来进行调用。

5.Jenkins debug技巧

当前我们写的这种代码在eclipse上无法做单元测试,也就是你必须要运行在jekins job上才能进行测试。那么是不是,我每次修改代码都要提交,然后在jenkins上触发构建才能进行测试。在这个点上,jenkins给我们提供了一个方法debug的工具。

任意点击一个构建号,例如http://65.49.216.200:8080/job/pipeline-project-demo/20/console

然后点击左侧菜单的replay菜单

这个就是如何在jenkins上直接做单元测试,而不是每次都Eclipse提交代码到git,然后跑一个jenkins job,发现还是没有改好bug,又来一次修改和提交。这个replay页面还是很方便进行单元测试。还有一个rebuild按钮,以后来介绍。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值