Kubernetes 节点上的 Jenkins 提示其插件需要更新版本的 Jenkins,但又不想丢失数据

标签 jenkins kubernetes kubernetes-helm persistent-volumes

Jenkins(在 Kubernetes 节点上)提示它需要更新版本的 Jenkins 才能运行我的一些插件。

SEVERE: Failed Loading plugin Matrix Authorization Strategy Plugin v2.4.2 (matrix-auth) java.io.IOException: Matrix Authorization Strategy Plugin v2.4.2 failed to load. - You must update Jenkins from v2.121.2 to v2.138.3 or later to run this plugin.

同一个日志文件还进一步提示它无法读取我的配置文件...我希望这只是因为上面的版本问题,但我将其包含在此处以防它是一个标志更深层次的问题:

SEVERE: Failed Loading global config java.io.IOException: Unable to read /var/jenkins_home/config.xml

我要么想禁用导致问题的插件,以便我可以看到 Jenkins UI 并从那里管理插件,要么我想以不删除的方式更新 Jenkins我的用户数据和作业配置数据。

到目前为止,我尝试通过将 .disabled 文件添加到 Jenkins 插件文件夹来禁用所有插件。这消除了大部分错误,但它仍然提示上面的插件。所以我为此删除了 .disabled 文件,现在它提示 Jenkins 再次不是一个足够新的版本(上面的错误)。

注意:此 Jenkins 安装使用持久存储卷,通过 EFS 挂载。因此,如果我们需要做的话,这可能有助于减轻升级 Jenkins 的一些限制。

最后,无论我们对插件和 Jenkins 版本做什么,我都需要确保如果 Kubernetes 将来重新启动节点,更改将持续存在。不幸的是,我对 Kubernetes 相当陌生,我还没有发现需要在哪里进行这些更改。我猜是控制 Kubernetes 部署配置的文件?

这个项目正在使用 Helm,以防万一。但同样,我对 Helm 几乎一无所知,所以我不知道您可能需要查看哪些文件才能解决这个问题。请发表评论,以便我知道在此处包含哪些内容以帮助提供所需的信息。

最佳答案

我们的集群遇到了同样的问题,我们对此有一个基本的解释,但不确定(以下修复有效)

该错误是因为您通过 Helm 安装了 Jenkins,并通过 Jenkins UI 安装了它们的插件。如果您决定不再重新启动 Pod,它会起作用,但如果有一天, Jenkins 必须再次进行初始化,您将面临该错误。 Jenkins 尝试从 JENKINS_PLUGINS_DIR 加载插件,该目录是空的,因此 pod 死掉了。

要修复当前错误,您应该在 master.installPLugins 参数中指定您的插件。 如果您遵循正常安装,只需进入集群即可

helm get values jenkins_release_name

所以你可能有类似的东西:

master:
  enableRawHtmlMarkupFormatter: true
  installPlugins:
  - kubernetes:1.16.0
  - workflow-job:2.32

默认情况下,一些值由 helm“嵌入”,以确保 jenkins 正常工作,请参阅此处了解更多详细信息:Github Helm Charts Jenkins

因此,只需将其复制到具有相同语法的文件中,然后添加插件及其版本即可。之后,您只需对版本上的文件使用 helm Upgrade 命令:

helm upgrade [RELEASE] [CHART] -f your_file.yaml

祝你好运!

关于Kubernetes 节点上的 Jenkins 提示其插件需要更新版本的 Jenkins,但又不想丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56562065/

相关文章:

kubernetes - Helm 防止在 helm init 上添加默认图表 repo

jenkins - 无法指向 Jenkins 主机上 ~/.ssh 中的 ssh key

Jenkins:日志解析器插件配置

linux - Jenkins 切换用户并执行命令

kubernetes - 一个 Metricbeat Pod 来监控多个 RabbitMQ 容器

linux - 将 gitlab-ci(或任何 CI)与 kubernetes 或谷歌容器引擎一起使用(gitlab-runner 不会找到 kubectl)

jenkins - 如何让 xunit 在失败时停止 Jenkins 管道?

kubernetes - 如何删除系统命名空间中的 kubernetes pod(和其他资源)

Kubernetes 自动将 storageClassName 添加到 PVC

kubernetes - 无法在 Kubernetes 中删除有状态集