如何在Jenkins中设置"资源根URL"

10

我们正在设置一个新的Jenkins实例,发现“资源根URL”默认为空。我已经阅读了Jenkins文档和一些Stack Overflow的回答,但仍不清楚如何填写此字段。在我们的情况下,我们使用的是一台带有专用外部IP地址(点分十进制)但没有域名的租用服务器实例。顺便提一句,“Jenkins URL”似乎已正确设置为我们的外部点分十进制地址。

  1. 什么样的格式才是合适的“资源根URL”?
  2. 如何在没有域名的情况下设置“资源根URL”?
  3. 文档提到CSP(内容安全策略)应该是其中的一部分,它是什么,如何设置?
  4. 总结一下,构建Jenkins的“资源根URL”的步骤是什么?

谢谢!

2个回答

17
据我所知,您需要将两个不同的域指向同一个Jenkins实例。这似乎是Content-Security-Policy的frame-ancestors指令的限制,详见JENKINS-41891的第6条评论
简而言之,CSP(内容安全策略)是一种安全功能,它限制浏览器包含外部资源(例如图像和CSS)或执行外部脚本。
在Jenkins的上下文中,CSP用于限制用户提供的内容(例如发布的Maven站点)与Jenkins的混淆/交互。如果没有它,即使开发人员没有Jenkins的管理权限,但可以在Maven站点中包含脚本(即具有源代码库提交权限),只要管理员浏览包含此恶意脚本的发布Maven站点,就可能触发管理Jenkins任务。
问题是,通常您希望在Jenkins发布的用户生成的内容上使用脚本。但由于安全风险,CSP仍会阻止它们。
因此,您有以下选择:
  • 接受发布的构件中无法工作的脚本。如果您不需要托管在Jenkins实例上的发布构件,则可能不需要资源URL,也不必担心。
  • 放宽CSP限制:这在Jenkins用户手册:配置内容安全策略中有描述,但繁琐且存在安全风险(易出错)。
  • 使用第二个域:这是资源根URL。从浏览器的角度来看,两个URL之间没有任何关系,因此资源URL上的脚本不被信任与“主”URL混淆。

因此,如果您想使用资源根URL,则需要两个域名(或一个域名和一个IP)才能正常工作。然后,您应该能够像这样设置Jenkins:

在此示例中,jenkins.example.orgjenkins-static.example.org都指向相同的IP。


请注意,以上所有内容均由非安全和非Jenkins专家编写,因此可能不是100%准确。但它应该能够传达思想。

感谢您的详细解释,我之前也对如何从Jenkins文档中设置它感到困惑,这篇文章真是帮了我大忙。 - dhqvinh

-1

我在这个问题上花费了太多时间。经过一番挖掘,我发现我可以使用相同的端点进行curl操作,这样我就能更快地进行测试。curl https://jenkins.example.com/git/notifyCommit?url=bitbucket.org/MyUsername/TheRepo&token=mytoken&branches=*/main 不要包含.git,并且分支可能会有所不同。我注意到我得到了多个ID输出,你可能需要对你的分支进行具体说明。但是,如果你想要curl到你的心愿,你很可能会找到适合你设置的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接