运行 Spring 使用数据库启动测试时,Jenkins 代理作业终止
Jenkins agent jobs killed when running Spring Boot Tests with DB
我正在 运行 建立一个具有最低生产要求(3 个控制平面和两个计算节点)的自托管 OKD 4 集群。此设置包括 Jenkins 安装 - 通过 Helm 安装(https://www.jenkins.io/doc/book/installing/kubernetes/)到目前为止一切正常:当更改被推送到 Github 时自动启动构建,当它们成功部署到 Jenkins 运行s in.
但目前我面临的问题是,当构建作业执行 Spring 启动测试时,它会启动持久性上下文。一旦 Spring 启动持久性上下文,构建代理(jdk-11 图像,请参阅下面的 additionalAgent 配置)就会被杀死。下载依赖项和编译工作正常,顺便说一句。
additionalAgents:
jdk-11:
podName: jdk-11
customJenkinsLabels: jdk-11
image: jenkins/jnlp-agent-jdk11
tag: latest
...
禁用测试后,作业 运行 没问题。但是一旦持久性被初始化,代理就会被杀死。
这些是我测试过的配置:
- 从内存中的 h2 数据库和 flyway 配置开始。
- 没有 flyway 配置。
- 即使没有设置数据库连接字符串。
作业被杀死的时间几乎相同:
对于 1. 是
2021-10-20 22:44:06.637 INFO 299 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-20 22:44:07.032 INFO 299 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 310 ms. Found 2 JPA repository interfaces.
2021-10-20 22:44:08.240 INFO 299 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=1c9e8306-7514-338e-8a9f-3cfba5c1169b
2021-10-20 22:44:10.527 INFO 299 --- [ main] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 7.7.3 by Redgate
2021-10-20 22:44:10.532 INFO 299 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-10-20 22:44:11.744 INFO 299 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-10-20 22:44:12.041 INFO 299 --- [ main] o.f.c.i.database.base.DatabaseType : Database: jdbc:h2:mem:testdb (H2 1.4)
Killed
对于 2.
2021-10-21 19:50:51.604 INFO 306 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-21 19:50:52.005 INFO 306 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 391 ms. Found 2 JPA repository interfaces.
2021-10-21 19:50:53.510 INFO 306 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=0fd77ef3-b5a2-35cb-b157-6d27c0cfe9a5
2021-10-21 19:50:56.405 INFO 306 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-10-21 19:50:56.708 INFO 306 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final
2021-10-21 19:50:57.503 INFO 306 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
Killed
还有 3 个
2021-10-21 22:02:48.810 INFO 309 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-21 22:02:49.198 INFO 309 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 380 ms. Found 2 JPA repository interfaces.
2021-10-21 22:02:50.509 INFO 309 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=0fd77ef3-b5a2-35cb-b157-6d27c0cfe9a5
2021-10-21 22:02:53.523 INFO 309 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-10-21 22:02:53.898 INFO 309 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final
Killed
Jenkins pod 的日志只是指出
Terminated Kubernetes instance for agent jenkins/jdk-11-bjtz5
Disconnected computer jdk-11-bjtz5
2021-10-21 22:02:57.342+0000 [id=465] INFO o.c.j.p.k.KubernetesSlave#deleteSlavePod: Terminated Kubernetes instance for agent jenkins/jdk-11-bjtz5
2021-10-21 22:02:57.342+0000 [id=465] INFO o.c.j.p.k.KubernetesSlave#_terminate: Disconnected computer jdk-11-bjtz5
2021-10-21 22:02:57.356+0000 [id=436] INFO j.s.DefaultJnlpSlaveReceiver#channelClosed: Computer.threadPoolForRemoting [#56] for jdk-11-bjtz5 terminated: java.nio.channels.ClosedChannelException
在所有情况下都没有异常、堆栈跟踪或可疑事件。这些步骤是可重现的 - 当我再次 运行 使用相同配置构建时,代理在测试中的完全相同的步骤中被杀死。
设置:
- 詹金斯版本 2.303.2
- Jenkins 在同一集群中使用 MySQL 数据库 运行ning
- 所有 Jenkins 插件都是最新的
- OKD 目前 运行 版本 4.8.0-0.okd-2021-10-10-030117
- 目前没有设置资源配额,系统还有大量空闲资源
我假设缺少一些配置来完成这项工作。但我就是找不到它可能是什么。所以我问:这里有人遇到过同样的问题吗?或者猜猜缺少的部分可能是什么?
如有遗漏请指出,我会补上
退后一步后,我查看了运行构建的实际 pod。并发现代理的内存限制是问题所在。
So increasing the limit solved the problem!
我通过修改本地 jenkins-values.yaml
并更新了其中 agent:
块的 limits
部分来做到这一点。
让我有点困惑的是,没有日志条目表明内存使用量超出范围。
接下来的想法是,我将通过 Java 选项为测试步骤设置内存限制,以在 pod 超出限制之前终止 maven 进程。猜猜它在构建中会更透明。
附带说明:之前已将限制设置为 512Mi,超过了 ~10 MiB -.-
对我来说幸运的是,我在这一点上找到了它,而其他构建作业 运行 很好只是由于缺乏资源使用(没有想到仅仅启动 Hibernate 会超过 512 MiB 标记)
我正在 运行 建立一个具有最低生产要求(3 个控制平面和两个计算节点)的自托管 OKD 4 集群。此设置包括 Jenkins 安装 - 通过 Helm 安装(https://www.jenkins.io/doc/book/installing/kubernetes/)到目前为止一切正常:当更改被推送到 Github 时自动启动构建,当它们成功部署到 Jenkins 运行s in.
但目前我面临的问题是,当构建作业执行 Spring 启动测试时,它会启动持久性上下文。一旦 Spring 启动持久性上下文,构建代理(jdk-11 图像,请参阅下面的 additionalAgent 配置)就会被杀死。下载依赖项和编译工作正常,顺便说一句。
additionalAgents:
jdk-11:
podName: jdk-11
customJenkinsLabels: jdk-11
image: jenkins/jnlp-agent-jdk11
tag: latest
...
禁用测试后,作业 运行 没问题。但是一旦持久性被初始化,代理就会被杀死。
这些是我测试过的配置:
- 从内存中的 h2 数据库和 flyway 配置开始。
- 没有 flyway 配置。
- 即使没有设置数据库连接字符串。
作业被杀死的时间几乎相同: 对于 1. 是
2021-10-20 22:44:06.637 INFO 299 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-20 22:44:07.032 INFO 299 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 310 ms. Found 2 JPA repository interfaces.
2021-10-20 22:44:08.240 INFO 299 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=1c9e8306-7514-338e-8a9f-3cfba5c1169b
2021-10-20 22:44:10.527 INFO 299 --- [ main] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 7.7.3 by Redgate
2021-10-20 22:44:10.532 INFO 299 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-10-20 22:44:11.744 INFO 299 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-10-20 22:44:12.041 INFO 299 --- [ main] o.f.c.i.database.base.DatabaseType : Database: jdbc:h2:mem:testdb (H2 1.4)
Killed
对于 2.
2021-10-21 19:50:51.604 INFO 306 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-21 19:50:52.005 INFO 306 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 391 ms. Found 2 JPA repository interfaces.
2021-10-21 19:50:53.510 INFO 306 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=0fd77ef3-b5a2-35cb-b157-6d27c0cfe9a5
2021-10-21 19:50:56.405 INFO 306 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-10-21 19:50:56.708 INFO 306 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final
2021-10-21 19:50:57.503 INFO 306 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
Killed
还有 3 个
2021-10-21 22:02:48.810 INFO 309 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-10-21 22:02:49.198 INFO 309 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 380 ms. Found 2 JPA repository interfaces.
2021-10-21 22:02:50.509 INFO 309 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=0fd77ef3-b5a2-35cb-b157-6d27c0cfe9a5
2021-10-21 22:02:53.523 INFO 309 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-10-21 22:02:53.898 INFO 309 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final
Killed
Jenkins pod 的日志只是指出
Terminated Kubernetes instance for agent jenkins/jdk-11-bjtz5
Disconnected computer jdk-11-bjtz5
2021-10-21 22:02:57.342+0000 [id=465] INFO o.c.j.p.k.KubernetesSlave#deleteSlavePod: Terminated Kubernetes instance for agent jenkins/jdk-11-bjtz5
2021-10-21 22:02:57.342+0000 [id=465] INFO o.c.j.p.k.KubernetesSlave#_terminate: Disconnected computer jdk-11-bjtz5
2021-10-21 22:02:57.356+0000 [id=436] INFO j.s.DefaultJnlpSlaveReceiver#channelClosed: Computer.threadPoolForRemoting [#56] for jdk-11-bjtz5 terminated: java.nio.channels.ClosedChannelException
在所有情况下都没有异常、堆栈跟踪或可疑事件。这些步骤是可重现的 - 当我再次 运行 使用相同配置构建时,代理在测试中的完全相同的步骤中被杀死。
设置:
- 詹金斯版本 2.303.2
- Jenkins 在同一集群中使用 MySQL 数据库 运行ning
- 所有 Jenkins 插件都是最新的
- OKD 目前 运行 版本 4.8.0-0.okd-2021-10-10-030117
- 目前没有设置资源配额,系统还有大量空闲资源
我假设缺少一些配置来完成这项工作。但我就是找不到它可能是什么。所以我问:这里有人遇到过同样的问题吗?或者猜猜缺少的部分可能是什么?
如有遗漏请指出,我会补上
退后一步后,我查看了运行构建的实际 pod。并发现代理的内存限制是问题所在。
So increasing the limit solved the problem!
我通过修改本地 jenkins-values.yaml
并更新了其中 agent:
块的 limits
部分来做到这一点。
让我有点困惑的是,没有日志条目表明内存使用量超出范围。
接下来的想法是,我将通过 Java 选项为测试步骤设置内存限制,以在 pod 超出限制之前终止 maven 进程。猜猜它在构建中会更透明。
附带说明:之前已将限制设置为 512Mi,超过了 ~10 MiB -.-
对我来说幸运的是,我在这一点上找到了它,而其他构建作业 运行 很好只是由于缺乏资源使用(没有想到仅仅启动 Hibernate 会超过 512 MiB 标记)