$ docker pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
Red Hat OpenShift Service on AWS提供一个用作Jenkins代理的基础镜像。
Jenkins代理的基础镜像执行以下操作:
引入必需的工具,无头Java,Jenkins JNLP客户端以及有用的工具,包括git、tar、zip和nss等。
将JNLP代理设置为入口点。
包含oc客户端工具,用于从Jenkins作业中调用命令行操作。
提供Red Hat Enterprise Linux (RHEL)和localdev镜像的Dockerfile。
|
使用适合您的Red Hat OpenShift Service on AWS发行版本的代理镜像版本。嵌入与Red Hat OpenShift Service on AWS版本不兼容的 |
Red Hat OpenShift Service on AWS Jenkins镜像还定义了以下示例java-builder Pod模板,以说明如何将代理镜像与Jenkins Kubernetes插件一起使用。
java-builder Pod模板使用了两个容器:
一个jnlp容器,它使用Red Hat OpenShift Service on AWS基础代理镜像并处理JNLP契约以启动和停止Jenkins代理。
一个java容器,它使用java Red Hat OpenShift Service on AWS示例ImageStream,其中包含各种Java二进制文件,包括用于构建代码的Maven二进制文件mvn。
Red Hat OpenShift Service on AWS Jenkins代理镜像可在Quay.io或registry.redhat.io上获取。
Jenkins镜像可通过Red Hat Registry获取。
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-agent-base-rhel8:<image_tag>
要使用这些镜像,您可以直接从Quay.io或registry.redhat.io访问它们,或者将它们推送到您的Red Hat OpenShift Service on AWS容器镜像注册表中。
每个Jenkins代理容器都可以配置以下环境变量。
| 变量 | 定义 | 示例值和设置 |
|---|---|---|
|
这些值控制Jenkins JVM的最大堆大小。如果设置了 默认情况下,Jenkins JVM的最大堆大小设置为容器内存限制的50%,无上限。 |
|
|
这些值控制Jenkins JVM的初始堆大小。如果设置了 默认情况下,JVM设置初始堆大小。 |
|
|
如果设置,则指定用于确定内部JVM线程数量的整数核心数。 |
示例设置: |
|
指定应用于此容器中运行的所有JVM的选项。不建议覆盖此值。 |
默认值: |
|
指定Jenkins JVM垃圾收集参数。不建议覆盖此值。 |
默认值: |
|
指定Jenkins JVM的其他选项。这些选项将附加到所有其他选项(包括上述Java选项),如果需要,可用于覆盖任何选项。使用空格分隔每个附加选项,如果任何选项包含空格字符,则使用反斜杠对其进行转义。 |
示例设置: |
|
指定在容器中运行代理时要使用的Java版本。容器基础镜像安装了两个版本的java: |
默认值为 示例设置: |
所有Jenkins代理都使用JVM来托管Jenkins JNLP代理以及运行任何Java应用程序,例如javac、Maven或Gradle。
默认情况下,Jenkins JNLP代理JVM使用容器内存限制的50%作为其堆。此值可以通过CONTAINER_HEAP_PERCENT环境变量修改。它也可以限制在上限或完全被覆盖。
默认情况下,在Jenkins代理容器中运行的任何其他进程(例如从管道运行的shell脚本或oc命令)在没有引发OOM终止的情况下,不能使用超过剩余50%的内存限制。
默认情况下,在Jenkins代理容器中运行的每个其他JVM进程最多使用容器内存限制的25%作为其堆。对于许多构建工作负载,可能需要调整此限制。
在Red Hat OpenShift Service on AWS上的Jenkins代理中托管Gradle构建会带来额外的复杂性,因为除了Jenkins JNLP代理和Gradle JVM之外,Gradle还会生成第三个JVM来运行测试(如果指定了测试)。
以下设置建议作为在Red Hat OpenShift Service on AWS上内存受限的Jenkins代理中运行Gradle构建的起点。您可以根据需要修改这些设置。
通过将org.gradle.daemon=false添加到gradle.properties文件来确保禁用长期运行的Gradle守护进程。
通过确保org.gradle.parallel=true未在gradle.properties文件中设置且--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参数。
默认情况下,Jenkins agent pod会在构建完成或停止后被删除。可以通过Kubernetes插件的pod保留设置更改此行为。可以为所有Jenkins构建设置pod保留策略,并为每个pod模板进行覆盖。支持以下行为:
Always 保留构建pod,无论构建结果如何。
Default 使用插件值,即仅使用pod模板。
Never 始终删除pod。
On Failure 如果构建失败,则保留pod。
您可以在pipeline Jenkinsfile中覆盖pod保留策略。
podTemplate(label: "mypod",
cloud: "openshift",
inheritFrom: "maven",
podRetention: onFailure(), (1)
containers: [
...
]) {
node("mypod") {
...
}
}
| 1 | podRetention 的允许值是 never()、onFailure()、always() 和 default()。 |
|
保留的pod可能会继续运行,并占用资源配额。 |