$ 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可能会继续运行,并占用资源配额。 |