【问题标题】:Jenkins Multibranch pipeline cannot find Jenkinsfile in subfolderJenkins Multibranch 管道在子文件夹中找不到 Jenkinsfile
【发布时间】:2023-04-26 11:39:02
【问题描述】:

我正在使用 Jenkins Multibranch 管道——特别是一个组织文件夹,它监控我的所有 Bitbucket 存储库并为包含 Jenkinsfile 的任何存储库构建管道。为简单起见,我将其配置为目前仅查看我的 1 个存储库。

这是我的问题:

当 Jenkinsfile 位于我的 repo 的根文件夹中时,一切正常 - Jenkins 看到 Jenkinsfile,并按照 Jenkinsfile 中的定义创建管道。

repo
|
|___> Jenkinsfile

如您所见,Jenkins 发现它没有任何问题:


但是,我想将 Jenkinsfile 移动到我的存储库中的子文件夹(让我可以灵活地为 1 个存储库定义多个管道)。 当我将其移动到子文件夹 (jenkins/ci-pipeline/Jenkinsfile) 时,即使我明确将相对文件路径提供给 Jenkins,它也无法再找到 Jenkinsfile!

repo
|
|___> jenkins
       |
       |___> ci-pipeline
              |
              |___> Jenkinsfile

如您所见,尽管将相对文件路径 (jenkins/ci-pipeline/Jenkinsfile) 提供给 Jenkins,但它声称无法再找到 Jenkinsfile:

顺便说一句,即使 Jenkins 字段的描述说它是“相对位置”,我还是尝试给它一个绝对文件路径 (${WORKSPACE}/jenkins/ci-pipeline/Jenkinsfile),而不是看看这是否可行:

不幸的是,这也不起作用 - 此外,Jenkins 没有扩展其 WORKSPACE 环境变量:

我还登录了我的 Jenkins 工作节点并确认 Jenkinsfile 存在于该子文件夹中,位于我的存储库的 Jenkins 工作区中。


有人可以告诉我我做错了什么吗? 这看起来很简单,但它只是拒绝工作,它让我发疯!

【问题讨论】:

  • 如果您在 Jenkinsfile 上设置了多分支并将其移至 jenkins/ci-pipeline/Jenkinsfile,您将其移至哪个分支? F.e.如果您的多分支现在正在构建 50 多个作业,并且您将该文件移动到 1 个分支(开发)并重新配置 Jenkins 以检查新路径,则除非您合并更改,否则其他 49 个分支将找不到该 Jenkinsfile。当您已经有多个作业正在运行时,可能很难看到这一点。 jenkins/ci-pipeline/Jenkinsfile 应该可以,如果我是对的,它会区分大小写..
  • 为简单起见,所有这些都是在同一个分支上完成的——上面的所有屏幕截图都来自同一个分支。因此,在同一个分支上,当 Jenkinsfile 在根文件夹中时它可以工作,但当它移动到子文件夹时会失败。
  • 当我尝试相同的方法(按照您的建议从根目录移动到子文件夹 jenkins/ci-pipeline/Jenkinsfile)并将脚本路径配置到新位置并再次扫描时,它运行良好。与您共享的设置相同(不含 ${WORKSPACE})。所以你的语法没有问题。您是否正在运行最新的 Jenkins 版本 + 插件(Bitbucket Branch Source Plugin)? issues.jenkins-ci.org/browse/JENKINS-49261
  • @Unforgettable631 感谢该错误链接!不幸的是,我在公司环境中运行它,所以我认为我无权检查我们正在运行的那个插件的版本——我会看看我是否可以找到有这个访问权限的人,并在这里报告。

标签: jenkins jenkins-pipeline


【解决方案1】:

作为@Unforgettable631 的suggested,这似乎是由于我的Bitbucket Branch Source Plugin (2.2.9) 版本过时所致。 如https://issues.jenkins-ci.org/browse/JENKINS-49261 中所述,该版本的插件存在一个错误,即如果 Jenkinsfile 在子文件夹中,则无法找到它。

【讨论】: