wil*_*kil 15 triggers dynamic build-triggers jenkins
我们希望在jenkins中的不同下游构建中动态触发集成测试.我们有一个参数化集成测试项目,它将测试名称作为参数.我们从git repo动态确定我们的测试名称.
我们有一个父项目,它使用jenkins-cli为源代码中的每个测试开始构建集成项目.父项目和集成项目通过匹配指纹相关联.
这种方法的问题是聚合测试结果不起作用.我认为问题是"下游"集成测试是通过jenkins-cli启动的,所以jenkins没有意识到它们是下游的.
我看了很多jenkins插件试图让这个工作.Join和Parameterized Trigger插件没有帮助,因为他们希望构建一个静态的项目列表.可用于参数化触发器的参数工厂也不起作用,因为没有工厂可以创建任意参数列表.Log Trigger插件不起作用.
Groovy Postbuild插件看起来应该可以工作,但我无法弄清楚如何从中触发构建.
小智 14
def job = hudson.model.Hudson.instance.getJob("job")
def params = new StringParameterValue('PARAMTEST', "somestring")
def paramsAction = new ParametersAction(params)
def cause = new hudson.model.Cause.UpstreamCause(currentBuild)
def causeAction = new hudson.model.CauseAction(cause)
hudson.model.Hudson.instance.queue.schedule(job, 0, causeAction, paramsAction)
Run Code Online (Sandbox Code Playgroud)
这最终对我有用.
注意:管道插件应该使这个问题没有实际意义,但我没有机会更新我们的基础设施.
要启动不带参数的下游作业:
job = manager.hudson.getItem(name)
cause = new hudson.model.Cause.UpstreamCause(manager.build)
causeAction = new hudson.model.CauseAction(cause)
manager.hudson.queue.schedule(job, 0, causeAction)
Run Code Online (Sandbox Code Playgroud)
要使用参数启动下游作业,您必须添加一个ParametersAction
.假设Job1
有参数A
,C
分别默认为"B"和"D".即:
A == "B"
C == "D"
Run Code Online (Sandbox Code Playgroud)
假设Job2
具有相同的A和B参数,但也采用E
默认为"F"的参数.以下post构建脚本Job1
将复制其A
和C
参数,并将参数设置E
为A
's和C
's值的串联:
params = []
val = ''
manager.build.properties.actions.each {
if (it instanceof hudson.model.ParametersAction) {
it.parameters.each {
value = it.createVariableResolver(manager.build).resolve(it.name)
params += it
val += value
}
}
}
params += new hudson.model.StringParameterValue('E', val)
paramsAction = new hudson.model.ParametersAction(params)
jobName = 'Job2'
job = manager.hudson.getItem(jobName)
cause = new hudson.model.Cause.UpstreamCause(manager.build)
causeAction = new hudson.model.CauseAction(cause)
def waitingItem = manager.hudson.queue.schedule(job, 0, causeAction, paramsAction)
def childFuture = waitingItem.getFuture()
def childBuild = childFuture.get()
hudson.plugins.parameterizedtrigger.BuildInfoExporterAction.addBuildInfoExporterAction(
manager.build, childProjectName, childBuild.number, childBuild.result
)
Run Code Online (Sandbox Code Playgroud)
你必须添加$JENKINS_HOME/plugins/parameterized-trigger/WEB-INF/classes
到Groovy Postbuild插件Additional groovy classpath
.
归档时间: |
|
查看次数: |
18625 次 |
最近记录: |