jenkins-pipeline - 为什么生成 DSL 时 Jenkins.get().getRootUrl() 不可用?
问题描述
我正在调试atlassian-bitbucket-server-integration-plugin的问题。生成需要 Bitbucket webhook 的多分支管道作业时会发生该行为。从 Jenkins UI 创建管道作业时,该插件工作正常。但是,当使用 DSL 创建等效作业时,插件会在尝试创建 webhook 时出错。
我已经追踪到这一行RetryingWebhookHandler
:
String jenkinsUrl = jenkinsProvider.get().getRootUrl();
if (isBlank(jenkinsUrl)) {
throw new IllegalArgumentException("Invalid Jenkins base url. Actual - " + jenkinsUrl);
}
jenkinsUrl
用作 webhook 的目标。从 UI 创建管道作业时,jenkinsUrl
将按预期设置。当我的 DSL 在自由格式作业中创建管道作业时,jenkinsUrl
始终是null
. 结果,无法创建 webhook,作业失败。
我尝试了各种替代方法来获取 Jenkins 根 URL,例如静态引用Jenkins.get().getRootUrl()
和JenkinsLocationConfiguration.get().getUrl()
. 但是,所有值都为空。此时似乎 Jenkins 上下文不可用。
我想提交一个 PR 来修复插件中的这种行为,但我想不出任何可行的方法。我正在寻找有关根本原因和潜在解决方法的建议。例如:
- 我的自由格式作业的执行方式是否有特定的原因可能导致这种情况?
- 是否有任何特定于从 DSL 生成作业的方式可能导致这种情况?
- 我应该考虑另一种机制来从配置中获取根 URL,这可能会更好吗?
- 这种行为是否可能指向我的 Jenkins 实例中的错误配置?
如果需要,我可以分享我用来生成作业的 DSL,但我认为这无关紧要。通过注释掉失败的 webhook 代码,我确认 DSL 生成了一个正确的作业config.xml
。因此,唯一的问题是如何为插件获取正确的配置,以便它可以设置 webhook。
解决方案
事实证明,这种行为是由 Jenkins 的部分错误配置引起的。
在调试 Bitbucket 中损坏的构建链接的问题时(指向我unconfigured-jenkins-location
而不是真正的 Jenkins URL),我在 Jenkins 的首页上发现了一条我之前错过的黄色警告消息,告诉我没有设置根服务器 URL:
Jenkins root URL is empty but is required for the proper operation of many Jenkins features like email notifications, PR status update, and environment variables such as BUILD_URL.
Please provide an accurate value in Jenkins configuration.
此错误消息包含指向Manage Jenkins > Configure System > Jenkins Location的链接。实际上在那里设置了正确的 Jenkins URL (我已经仔细检查过),但是没有设置同一部分中的系统管理员电子邮件地址。当我添加一个有效的电子邮件地址时,黄色警告消失了。
此更改修复了 BitBucket 中损坏的构建 URL,以及我的 DSL 的问题。因此,即使它没有多大意义,似乎缺少系统管理员电子邮件地址是这种行为的根本原因。
推荐阅读
- angular - Angular:如何在响应中获取内部对象数据?
- google-cloud-platform - 谷歌云功能部署错误与terraform
- r - 更改 geom_raster() 中列的顺序
- node.js - npm 没有正确启动,找不到模块'worker_threads
- google-cloud-dataflow - 新 Cloud Pub/Sub 订阅中的未确认消息
- reactjs - 在反应中将卡片的内容从一页传递到另一页
- javascript - JavaScript/Express Promise.all() 问题
- here-api - 逐向导航中的测量单位
- flutter - 如何为大型项目编写 injection_container(服务注入器)
- python - tesseract-ocr个位数识别如何提高?