【发布时间】: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 感谢该错误链接!不幸的是,我在公司环境中运行它,所以我认为我无权检查我们正在运行的那个插件的版本——我会看看我是否可以找到有这个访问权限的人,并在这里报告。