In the following example, the openshift-jee-sample
BuildConfig causes a
Jenkins Maven agent Pod to be dynamically provisioned. The Pod clones some Java
source code, builds a WAR file, and causes a second BuildConfig,
openshift-jee-sample-docker
to run. The second BuildConfig layers the new WAR
file into a container image.
The following example is a BuildConfig that uses the Jenkins Kubernetes plug-in.
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
It is also possible to override the specification of the dynamically created Jenkins agent Pod. The following is a modification to the previous example, which overrides the container memory and specifies an environment variable:
The following example is a BuildConfig that the Jenkins Kubernetes Plug-in, specifying memory limit and environment variable.
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
-
A new Pod template called
mypod
is defined dynamically. The new Pod template name is referenced in the node stanza. -
The
cloud
value must be set toopenshift
. -
The new Pod template can inherit its configuration from an existing Pod template. In this case, inherited from the Maven Pod template that is pre-defined by {product-title}.
-
This example overrides values in the pre-existing Container, and must be specified by name. All Jenkins agent images shipped with {product-title} use the Container name
jnlp
. -
Specify the Container image name again. This is a known issue.
-
A memory request of
512 Mi
is specified. -
A memory limit of
512 Mi
is specified. -
An environment variable
CONTAINER_HEAP_PERCENT
, with value0.25
, is specified. -
The node stanza references the name of the defined Pod template.
By default, the pod is deleted when the build completes. This behavior can be modified with the plug-in or within a pipeline Jenkinsfile.