詹金斯未能建立下游工作
Posted
技术标签:
【中文标题】詹金斯未能建立下游工作【英文标题】:jenkins fails on building a downstream job 【发布时间】:2018-03-10 08:01:30 【问题描述】:我正在尝试像这样从当前工作中触发下游工作
pipeline
stages
stage('foo')
steps
build job: 'my-job', propagate: true, wait: true
目的是等待作业结果并根据该结果失败或成功。 Jenkins 总是以消息 Waiting for non-job items is not supported
失败。上面提到的作业没有任何参数,并且像我的其他作业一样定义,使用多分支管道插件。
我能想到的只是这种类型的 jenkins 项目不支持作为构建步骤输入,但这似乎违反直觉,并且对我来说是一个障碍。任何人都可以确认是否确实如此?
如果是这样,任何人都可以提出任何解决方法吗?
谢谢
【问题讨论】:
我在这里处理几乎相同的问题。不幸的是,我能找到的关于这个主题的唯一其他材料是 4 月的另一篇 *** 帖子:***.com/questions/43337070/… 【参考方案1】:这看起来像 JENKINS-45443,其中包含评论
Pipeline 不支持上游/下游作业系统,部分原因是技术限制,部分原因是没有静态作业配置可以实现这一点,除非检查最近的构建元数据。
但它也提供了解决方法:
只要解决方案仍在进行中,我会在此处提供我们的解决方法。它基于rtp (Rich Text Publisher) plugin,您应该安装它才能使其工作:
在我们的 Jenkinsfile 结束并触发作业后,我们等待它完成。在这种情况下,
build()
返回用于运行下游作业的对象。我们从中获取信息。警告:
getAbsoluteUrl()
函数是一个关键函数。使用它需要您自担风险!
def startedBld = build(
job: YOUR_DOWNSTREAM_JOB,
wait: true, // VERY IMPORTANT, otherwise build () does not return expected object
propagate: true
)
// Publish the started build information in the Build result
def text = '<h2>Downstream jobs</h2>Started job <a href="' + startedBld.rawBuild.getAbsoluteUrl () + '">' + startedBld.rawBuild.toString () + '</a>'
rtp (nullAction: '1',parserName: 'html', stableText: text)
本期为JENKINS-29913的一部分,已开两年:
目前
DependencyGraph
仅限于AbstractProject
,使得工作流无法参与上游/下游关系(在需要作业链接的情况下,例如由于安全限制)。
它引用 RFE(增强请求)JENKINS-37718,基于另一个(未答复)Stack Overflow question。
【讨论】:
【参考方案2】:实际上,我通过更加关注构建步骤的定义来解决这个问题。由于我的所有下游作业都定义为多分支管道作业,因此它们的结构类似于文件夹,文件夹中的每个项目代表一个单独的作业。因此调用下游作业的正确方法不是build job: 'my-job', propagate: true, wait: true
,而是build job: "my-job/my-branch-name", propagate: true, wait: true
。
此外,与问题无关但与手头的问题相关,请确保您在 jenkins 机器上始终至少有一个空闲的执行程序,因为等待语法将消耗一个线程用于等待作业,一个线程用于工作正在等待,你很容易发现自己处于资源匮乏的境地。
希望对你有帮助
【讨论】:
所以我提到的错误在这里不适用?无论如何 +1。 如果下游多分支管道还没有分支设置,这将如何工作?在这种情况下,我会收到此错误:ERROR: No item named my-job/new-branch found
.
如果构建没有发现任何分支但它显然不会工作。因此,在尝试从上游构建之前,请确保下游多分支作业具有您尝试调用的分支发现/构建。
@colti 我遇到了同样的问题,但这是因为我的工作处于同一水平。在引用这样的工作后:../my-job/branch
它工作了。
一般来说,正确的方法是什么?我尝试了build "my-job/$env.BRANCH_NAME"
,但失败并出现“未找到名为 X 的项目”错误,即使管道已经知道该分支。以上是关于詹金斯未能建立下游工作的主要内容,如果未能解决你的问题,请参考以下文章