This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.12.3. Jenkins 代理
				OpenShift Container Platform 提供了适合用作 Jenkins 代理的三种镜像: Base、Maven 和 Node.js 镜像。
			
第一个是适用于 Jenkins 代理的基础镜像:
- 
						它会拉取(pull)所需工具、无头 Java、Jenkins JNLP 客户端以及一些实用工具,其中包括 git、tar、zip和nss等。
- 它将 JNLP 代理设立为入口点。
- 
						它包含 oc客户端工具,用于从 Jenkins 任务调用命令行操作。
- 
						它为 Red Hat Enterprise Linux (RHEL) 和 localdev镜像提供 Dockerfile。
另外还提供了扩展基础镜像的两个镜像:
- Maven v3.5 镜像
- Node.js v10 镜像和 Node.js v12 镜像
				Maven 和 Node.js Jenkins 代理镜像为通用基础镜像 (UBI) 提供 Dockerfile,您可在构建新代理镜像时引用。另请注意 contrib 和 contrib/bin 子目录。这些子目录可用于为您的镜像插入配置文件和可执行脚本。
			
					为 OpenShift Container Platform 使用并扩展适当的代理镜像版本。如果嵌入至该代理镜像的 oc 客户端版本与 OpenShift Container Platform 版本不兼容,则可能引发意外行为。
				
12.3.1. Jenkins 代理镜像
OpenShift Container Platform Jenkins 代理镜像在 Quay.io 或 registry.redhat.io 上提供。
Jenkins 镜像通过 Red Hat Registry 提供:
docker pull registry.redhat.io/openshift4/ose-jenkins:<v4.5.0>
$ docker pull registry.redhat.io/openshift4/ose-jenkins:<v4.5.0>docker pull registry.redhat.io/openshift4/jenkins-agent-nodejs-10-rhel7:<v4.5.0>
$ docker pull registry.redhat.io/openshift4/jenkins-agent-nodejs-10-rhel7:<v4.5.0>docker pull registry.redhat.io/openshift4/jenkins-agent-nodejs-12-rhel7:<v4.5.0>
$ docker pull registry.redhat.io/openshift4/jenkins-agent-nodejs-12-rhel7:<v4.5.0>docker pull registry.redhat.io/openshift4/ose-jenkins-agent-maven:<v4.5.0>
$ docker pull registry.redhat.io/openshift4/ose-jenkins-agent-maven:<v4.5.0>docker pull registry.redhat.io/openshift4/ose-jenkins-agent-base:<v4.5.0>
$ docker pull registry.redhat.io/openshift4/ose-jenkins-agent-base:<v4.5.0>要使用这些镜像,您可直接从 Quay.io 或 registry.redhat.io 访问或将其推送(push)到 OpenShift Container Platform 容器镜像 registry 中。
12.3.2. Jenkins 代理环境变量
每个 Jenkins 代理容器均可通过以下环境变量进行配置。
| 变量 | 定义 | 值和设置示例 | 
|---|---|---|
| 
									 | 
									这些值控制 Jenkins JVM 的最大堆大小。如果设置了  默认情况下,Jenkins JVM 的最大堆大小设置为容器内存限值的 50%,且无上限。 | 
									 
									 
									 | 
| 
									 | 
									这些值控制 Jenkins JVM 的初始堆大小。如果设置了  默认情况下,JVM 设置初始堆大小。 | 
									 
									 | 
| 
									 | 如果设置,请将用于调整内部 JVM 线程数的内核数指定为整数。 | 
									示例设置: | 
| 
									 | 指定应用于该容器中运行的所有 JVM 的选项。不建议覆盖该值。 | 
									默认: | 
| 
									 | 指定 Jenkins JVM 垃圾回收参数。不建议覆盖该值。 | 
									默认: | 
| 
									 | 指定适用于 Jenkins JVM 的附加选项。这些选项附加至所有其他选项中,包括上面的 Java 选项,必要时可用于覆盖其中任何一个选项。用空格分开各个附加选项;如有任意选项包含空格字符,请使用反斜杠转义。 | 
									示例设置: | 
| 
									 | 
									指定用来在容器中运行代理的 Java 版本版本。容器基础镜像安装了两个 java 版本:  | 
									默认值为  
									示例设置:  | 
12.3.3. Jenkins 代理内存要求
					所有 Jenkins 代理均使用 JVM 来托管 Jenkins JNLP 代理和运行任何 Java 应用程序,如 javac、Maven 或 Gradle。
				
					默认情况下,Jenkins JNLP 代理 JVM 会将容器内存限值的 50% 用于其堆。该值可通过 CONTAINER_HEAP_PERCENT 环境变量修改,还可设置上限或整个覆盖。
				
					默认情况下,Jenkins 代理容器中运行的其它进程(如 shell 脚本或从管道运行的 oc 命令)在不引发 OOM 终止的情况下,所用内存均不得超过剩余的 50% 内存限值。
				
默认情况下,Jenkins 代理容器中运行的每个其他 JVM 进程最多可将 25% 的容器内存限值用于其堆。对于很多构建工作负载,可能还需调整此限值。
12.3.4. Jenkins 代理 Gradle 构建
在 OpenShift Container Platform 上的 Jenkins 代理中托管 Gradle 构建会出现其他复杂情况,因为除了 Jenkins JNLP 代理和 Gradle JVM 外,Gradle 还会生成第三个 JVM 来运行测试(若已指定)。
建议将以下设置作为起始点,在 OpenShift Container Platform 上内存受限的 Jenkins 代理中运行 Gradle 构建。您还可按需修改这些设置。
- 
							通过将 org.gradle.daemon=false添加到gradle.properties文件中来确保禁用长期 Gradle 守护进程。
- 
							通过确保 gradle.properties文件中未设置org.gradle.parallel=true且--parallel未设置为命令行参数来禁用并行构建执行。
- 
							要防止 Java 编译超出进程范围,请在 build.gradle文件中设置java { options.fork = false }。
- 
							通过确保在 build.gradle文件中设置test { maxParallelForks = 1 }来禁用多个附加测试进程。
- 
							使用 GRADLE_OPTS、JAVA_OPTS或JAVA_TOOL_OPTIONS环境变量覆盖 Gradle JVM 内存参数。
- 
							通过在 build.gradle中定义maxHeapSize和jvmArgs设置,或通过-Dorg.gradle.jvmargs命令行参数来为任何 Gradle 测试 JVM 设置最大堆大小和 JVM 参数。
12.3.5. Jenkins 代理 pod 保留
构建完成后或停止后会默认删除 Jenkins 代理 pod。此行为可通过 Kubernetes 插件 pod 保留设置来更改。Pod 保留可针对所有 Jenkins 构建设置,并覆盖每个 pod 模板。支持以下行为:
- 
							Always保留构建 pod,不受构建结果的限制。
- 
							Default使用插件值,即仅限 pod 模板。
- 
							Never始终删除 pod。
- 
							On Failure如果构建过程中失败,则保留 pod。
您可覆盖管道 Jenkinsfile 中的 pod 保留:
- 1
- podRetention允许的值为- never()、- onFailure()、- always()和- default()。
保留的 Pod 可能会根据资源配额继续运行和计数。