升级到 Jenkins LTS 2.73.x

每个部分都涵盖了从之前LTS版本的升级,2.73.1的部分涵盖了从2.60.3升级。

升级到 Jenkins LTS 2.73.3

更改用户记录的磁盘存储布局

SECURITY-499的修复程序重命名包含`JENKINS_HOME/users/中的用户记录的目录 : 具有不安全名称的目录(例如`NUL(Windows)等保留名称或使用`\`等不安全字符)将被重命名为这些用户名的文件系统安全表示,其中有问题的字符或序列会被转义。

将Jenkins降级到高于2.73.3的版本会导致广泛用于引用Jenkins中用户的名称(例如分配的权限)与用户的元数据(Jenkins用户数据库的密码记录, SSH公钥和各种首选项) - 因为后者可能会更改为预期用户名的文件系统安全表示 - 因此不鼓励。

升级到 Jenkins LTS 2.73.2

低特权用户可能无法再重新配置某些代理

启动方法_Launch agent via execution of command on master_未正确检查配置用户的命令运行权限。 这个问题已经解决了,现在这个启动方法只能由Jenkins管理员配置(或者更具体地说,具有_Run Scripts_权限的用户)。

此修补程序的一个已知限制是,即使启动方法和脚本保持不变,没有 Run Scripts 权限的用户(通常不是管理员的每个人)都不能再使用此启动方法配置代理程序。

对远程API输出的限制

多个远程API端点具有限制的内容。 更详细的信息可以在上面链接的安全建议中找到。

  • 所有 user properties 已经从 /user/(username)/api/ 其他返回用户的API中删除,除非由管理员或用户自己访问。

  • 现在,返回队列项目和任务(构建)的API只有在具有读取权限的用户请求时才会返回它们。

  • /queue/item/(ID)/api/ 现在只能由具有指定项目的读取权限的用户访问。

修复了2.73.1中的回归

下面列出的2.73.1中的回归在2.73.2中已经确定。

升级到 Jenkins LTS 2.73.1

已知问题:代理连接失败,涉及Jenkins掌握未定义或不可写主目录

涉及代理连接的回归已经被确定。 如果Jenkins主服务器上的用户主目录(HOME,而不是`JENKINS_HOME`)未定义或不可写,则不能建立远程连接。

已知下列功能会受到影响:

  1. 代理连接

  2. 基于远程处理的CLI连接(自2.46.2起弃用)

  3. 构建Maven项目(Maven 集成插件)

显示的错误将包括主目录内的目录`.jenkins/cache/jars`的路径,其堆栈跟踪将引用`hudson.remoting.FileSystemJarCache`。

Jenkins Docker镜像已更改为Jenkins用户定义的,可写的主目录。 典型的Web应用程序容器(例如Tomcat)设置可能没有可运行容器的用户的可写主目录,并且可能需要适应这个问题。

可能的解决方法:

  1. 使指定的主目录可写入Jenkins用户。

  2. 定义Jenkins运行的用户可写的主目录。 .

已知问题:使用密码保护的ed25519 SSH密钥随机出现连接失败

涉及使用密码保护的ed25519 SSH密钥进行认证的回归已在2.73中确定。 它随机导致使用这些键的功能出现故障,例如:

  1. SSH Slaves插件连接

  2. 使用JGit实现访问Git存储库

  3. 访问Subversion版本库(未确认)

解决此问题的方法:

  1. 在Jenkins中不要使用ed25519作为SSH密钥

  2. 不要使用密码来保护Jenkins中的ed25519 SSH密钥

  3. 在Git插件的情况下,切换到Git CLI实现

Groovy Script, 当在"Script Console"(位于`/script`处)执行时,可以用来确定实例是否包含任何密码保护的ed25519 SSH密钥,然后再升级。

Groovy 2.4.11 升级

Groovy从2.4.8更新为2.4.11。 这可能会解决与Groovy相关的现有内存问题,因为2.4.9包含对 GROOVY-8067的修复。 可能不再需要应用 `groovy.use.classvalue`解决方法。

Winstone 4.1 升级

嵌入式Jetty容器已从版本9.2.15更新到版本9.4.5。 有关更改的详细列表,请参阅 Jetty 更新日志

在这次更新中,支持可选的`--spdy`参数已被删除。 如果指定了`--spdy`参数,Jenkins现在将拒绝启动。 它需要从任何Jenkins初始化脚本中删除。

此外,对1.2之前的所有TLS版本的支持已被删除。 如果您使用嵌入式Jetty容器的HTTPS功能,它将不再接受TLS 1.0或1.1连接。

构建授权

此更改仅影响授权项目插件的用户。

当授权项目插件未指定全局默认配置时,以前版本的Jenkins实施了特殊权限回退: 出于*Build other projects* and *Build after other projects are built*的目的,如果授权项目配置没有为有问题的作业指定构建授权,它将回退到使用 anonymous 用户的权限进行操作。 这确保了安全的默认值,但仅限于这些与触发器相关的权限检查。

这种行为已经改变了,Jenkins现在将执行权限检查作为SYSTEM(即具有完全权限)以确定是否应构建项目。

要恢复先前的行为,请配置全局*Project default Build Authorization* ,将默认授权设置为匿名用户的授权。 此功能已在授权项目插件1.2.0版中实施。

远程工作目录

嵌入式 Jenkins Remoting版本已经从3.7更新为3.10。 它引入了对工作目录的支持,Remoting可以使用它来存储缓存,日志和其他元数据。

一旦启用工作目录模式,Jenkins代理开始将日志写入磁盘并更改文件系统JAR缓存的默认目标。 在远程处理中,可以使用命令行选项启用该选择性功能,但Jenkins为某些代理程序启动器定义了自定义行为:

  • Java Web Start启动器 (又名 JNLP agent)

    • 旧代理:工作目录需要手动启用

    • 从Web UI创建的新代理:工作目录默认启用,工作目录指向代理的 Remote root directory

    • 从CLI / API创建的新代理:行为取决于传递的配置文件,默认情况下禁用工作目录

  • 命令启动器

    • 如果需要,应该在启动设置中手动启用工作目录

  • 其他启动器类型(例如SSH启动器)

    • 该行为在插件中定义,它具有独立的发布周期

    • 跟随门票的更新链接到 JENKINS-44108

您可以在 Jenkins Remoting 文档中找到更多信息,示例和升级指南。