Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

4.2.4.2. 使用 Jenkins Kubernetes 插件

创建新 Jenkins 服务

在以下示例中,openshift-jee-sample BuildConfig 会导致 Jenkins maven 代理 Pod 动态置备。Pod 会克隆一些 Java 源,构建一个 WAR 文件,然后导致第二个 BuildConfig(openshift-jee-sample-docker)将新创建的 WAR 文件分层到一个容器镜像中。

这里 提供了实现类似目的的更完整的示例。

例 4.1. 使用 Jenkins Kubernetes 插件的 BuildConfig 示例

kind: List
apiVersion: v1
items:
- kind: ImageStream
  apiVersion: v1
  metadata:
    name: openshift-jee-sample
- kind: BuildConfig
  apiVersion: v1
  metadata:
    name: openshift-jee-sample-docker
  spec:
    strategy:
      type: Docker
    source:
      type: Docker
      dockerfile: |-
        FROM openshift/wildfly-101-centos7:latest
        COPY ROOT.war /wildfly/standalone/deployments/ROOT.war
        CMD $STI_SCRIPTS_PATH/run
      binary:
        asFile: ROOT.war
    output:
      to:
        kind: ImageStreamTag
        name: openshift-jee-sample:latest
- kind: BuildConfig
  apiVersion: v1
  metadata:
    name: openshift-jee-sample
  spec:
    strategy:
      type: JenkinsPipeline
      jenkinsPipelineStrategy:
        jenkinsfile: |-
          node("maven") {
            sh "git clone https://github.com/openshift/openshift-jee-sample.git ."
            sh "mvn -B -Popenshift package"
            sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war"
          }
    triggers:
    - type: ConfigChange

它还可覆盖动态创建的 Jenkins 代理 Pod 的规范。以下是对上例的修改,可覆盖容器内存并指定环境变量:

例 4.2. 使用 Jenkins Kubernetes 插件的 BuildConfig 示例,指定内存限制和环境变量

kind: BuildConfig
apiVersion: v1
metadata:
  name: openshift-jee-sample
spec:
  strategy:
    type: JenkinsPipeline
    jenkinsPipelineStrategy:
      jenkinsfile: |-
        podTemplate(label: "mypod", 1
                    cloud: "openshift", 2
                    inheritFrom: "maven", 3
                    containers: [
            containerTemplate(name: "jnlp", 4
                              image: "openshift/jenkins-agent-maven-35-centos7:v3.10", 5
                              resourceRequestMemory: "512Mi", 6
                              resourceLimitMemory: "512Mi", 7
                              envVars: [
              envVar(key: "CONTAINER_HEAP_PERCENT", value: "0.25") 8
            ])
          ]) {
          node("mypod") { 9
            sh "git clone https://github.com/openshift/openshift-jee-sample.git ."
            sh "mvn -B -Popenshift package"
            sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war"
          }
        }
  triggers:
  - type: ConfigChange
1
一个名为 "mypod" 的新 Pod 模板会自行定义。新 Pod 模板名称在节点片段中引用。
2
“cloud” 值必须设置为 “openshift”。
3
新 Pod 模板可继承现有 Pod 模板的配置。在本例中,我们继承了 OpenShift Container Platform 预定义的"maven" Pod 模板。
4
我们是在预先存在的容器中覆盖的值,因此我们必须根据名称指定它。OpenShift Container Platform 附带的所有 Jenkins 代理镜像均使用容器名称 “jnlp”。
5
容器镜像必须重新指定。这是个已知问题。
6
指定了 512Mi 的内存请求。
7
指定了 512Mi 的内存限值。
8
CONTAINER_HEAP_PERCENT 环境变量,其值指定为 “0.25”。
9
节点片段引用上方定义的 Pod 模板的名称。

构建完成后会默认删除 pod。此行为可通过插件或在 Jenkinsfile 管道中修改 - 请参阅 代理 Pod 保留 以了解更多详细信息。

如需有关 Kubernetes 插件配置的更多信息,请参阅 Kubernetes 插件文档