跳过正文
  1. Posts/

如何修复 Shields.io 徽章在 Jenkins 中无法显示

·423 字·1 分钟· ·
沈显鹏
作者
沈显鹏
目录

问题
#

我在 Jenkins 中使用以下 Groovy 代码发布文档:

publishHTML([
    allowMissing: false,
    alwaysLinkToLastBuild: false,
    keepAll: false,
    reportDir: "docs/build/html/",
    reportFiles: 'index.html',
    reportName: "Documentation",
    useWrapperFileDirectly: true
])

然而,一些来自 Shields.io 的徽章在已发布的文档中无法正常显示。

Jenkins 中无法显示徽章

解决方法
#

在 Script Console 中更新 Jenkins CSP 的可用脚本

以下是应在 “Manage Jenkins → Script Console” 中运行的精简且正确的 Groovy 脚本:

System.setProperty(
  "hudson.model.DirectoryBrowserSupport.CSP",
  "default-src 'self'; img-src * data:;"
)

该设置允许从任意域加载图片(img-src *),包括 Shields.io。 如果你希望更安全地限制来源,可以这样设置:

System.setProperty(
  "hudson.model.DirectoryBrowserSupport.CSP",
  "default-src 'self'; img-src 'self' https://img.shields.io data:;"
)

🟡 注意:此更改是临时的(仅在内存中生效),Jenkins 重启后会失效。


永久生效的方法

  1. 修改 Jenkins 启动参数(取决于你的 Jenkins 运行方式):

如果使用 /etc/default/jenkins(Debian/Ubuntu):

JENKINS_JAVA_OPTIONS="-Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self'; img-src 'self' https://img.shields.io data:;\""

如果使用 systemd(CentOS/Red Hat 或现代系统):

编辑或覆写 jenkins.service 文件:

Environment="JAVA_OPTS=-Dhudson.model.DirectoryBrowserSupport.CSP=default-src 'self'; img-src 'self' https://img.shields.io data:;"
  1. 重启 Jenkins
sudo systemctl restart jenkins

结果
#

现在,Shields.io 徽章在 Jenkins 中可以正常显示了。

Jenkins 中可以显示徽章


转载本文时请注明作者与出处。禁止商业用途。你可以通过 RSS 订阅我的博客。

相关文章

Jenkins Linux Agent 配置
·353 字·1 分钟
本文提供了 Jenkins Linux Agent 的逐步配置指南,包括 Java 运行时的准备、节点创建以及常见问题的排查方法。
Jenkins Windows Agent 配置
·608 字·2 分钟
本文提供 Jenkins Windows Agent 的详细配置步骤,包括 Java 运行时准备、节点创建以及常见问题的排查方法。
如何优雅地控制 Jenkins 构建是否中断?只看这篇
·1033 字·3 分钟
在 Jenkins 中,disableConcurrentBuilds 选项用于管理并发构建。本文介绍了如何根据分支类型动态设置 abortPrevious 的值,从而实现更灵活的构建管理。
Jenkins 执行 Shell 如果返回值不为0,作业(Job)停止并失败怎么办?
·393 字·1 分钟
如何在 Jenkins Pipeline 中处理 Shell 返回值不为0的情况,以确保作业(Job)在执行成功后仍然显示为成功状态。
将 Jenkins Shell 返回的字符串处理为字符数组
·600 字·2 分钟
如何在 Jenkins Pipeline 中将 Shell 返回的字符串处理为字符数组,以便在后续步骤中进行处理和使用。
忽略 Jenkins Shell 步骤中的故障
·389 字·1 分钟
如何在 Jenkins 中使用 set +e 和 set -e 来控制 Shell 脚本的执行行为,以便在出现错误时不终止整个构建流程。