关于Jenkins Dynamic Parameter 的简单使用
前言最近在使用jenkins研究集成测试方面,并且使用reportNg来生成测试的报告,发现每次运行后的测试报告都会覆盖掉我们之前的测试报告,这个不是我们想要的结果,我们需要的应该是根据执行的日期生成一个目录,接着报告文件都在对应的时间目录下面。所以就需要引入Dynamic Parameter 这个插件了。正文Dynamic Parameter可以动态的生成我们想要的一些参数,使用的语言是gro
前言
最近在使用jenkins研究集成测试方面,并且使用reportNg来生成测试的报告,发现每次运行后的测试报告都会覆盖掉我们之前的测试报告,这个不是我们想要的结果,我们需要的应该是根据执行的日期生成一个目录,接着报告文件都在对应的时间目录下面。所以就需要引入Dynamic Parameter 这个插件了。
正文
Dynamic Parameter 可以动态的生成我们想要的一些参数,使用的语言是groovy,跟java有部分的类似,只是说groovy是个动态类型。首先我们需要在jenkins上安装对应的插件 ,
进入系统管理->插件管理->可选插件中找到 Dynamic Parameter Plug-in 进行安装,安装完后,我们在配置项目中勾选参数化构建过程后,就可以新建一个 Dynamic Parameter,
,取名为mtime
这里我需要返回一个当前的时间,并且还需要根据时间生成一个对应的时间目录,到时候这个目录就是用来存放我们转移过来的测试报告的地方了。
具体的代码
def time = new Date().format('yyyy-MM-dd_HH_mm_ss')
filepath = "/opt/apache-tomcat-7.0.64/webapps/report/"+time
def file = new File(filepath);
file.mkdir()
return time
现在我们已经有了一个时间了,那要如何对文件进行转移呢,这里使用的是python,我们在Post steps中新增一个步骤,Execute shell,运行一个shell命令。这里的话直接使用
pythonScript的具体代码如下:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import sys,os
def get_current_path():
path = sys.path[0]
#判断为脚本文件还是py2exe编译后的文件,如果是脚本文件,则返回的是脚本的目录,如果是py2exe编译后的文件,则返回的是编译后的文件路径
if os.path.isdir(path):
return path+"/"
elif os.path.isfile(path):
return os.path.dirname(path)+"/"
pass
def copyFiles(sourceDir, targetDir):
print os.listdir(sourceDir)
for file in os.listdir(sourceDir):
sourceFile = os.path.join(sourceDir, file)
targetFile = os.path.join(targetDir, file)
if os.path.isfile(sourceFile):
if not os.path.exists(targetDir):
os.makedirs(targetDir)
if not os.path.exists(targetFile) or(os.path.exists(targetFile) and (os.path.getsize(targetFile) != os.path.getsize(sourceFile))):
open(targetFile, "wb").write(open(sourceFile, "rb").read())
if os.path.isdir(sourceFile):
First_Directory = False
copyFiles(sourceFile, targetFile)
def main(argv):
workspace = get_current_path()
if len(argv) > 1 and argv[1] != None :
target_path = getlastdir(workspace,5)+argv[1]
print target_path
copyFiles(workspace+"/target/surefire-reports/html",target_path)
def getlastdir(filepath,num):
for i in range(num):
filepath = os.path.dirname(filepath)
filepath += '/report/'
return filepath
if __name__ == '__main__':
main(sys.argv)
代码其实不难,就是获取到输入的命令行的参数,接着构造出我们存放报告的目录,接着进行文件的copy。但是这里的实现有一点很糟糕的就是把目录都写死了,按照原先的想法的话是应该在外部传参的时候将文件目录传进来,这样子就可以避免了后续如果修改路径的话,pythonScript也要进行同样的修改,但是目前还没有好的解决方法。
最后再来配置下我们发送的邮件内容了:
收到的实际邮件效果如图:
这样子我们就可以直接点击对应的路径就看到了测试报告的结果了。
更多推荐
所有评论(0)