4.2.4.2. Jenkins Kubernetes プラグインの使用
新規 Jenkins サービスの作成
以下の例では、openshift-jee-sample BuildConfig により、Jenkins Maven エージェント Pod が動的にプロビジョニングされます。Pod は Java ソースのクローンを作成し、WAR ファイルをビルドしてから、次に 2 番目の 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",
cloud: "openshift",
inheritFrom: "maven",
containers: [
containerTemplate(name: "jnlp",
image: "openshift/jenkins-agent-maven-35-centos7:v3.10",
resourceRequestMemory: "512Mi",
resourceLimitMemory: "512Mi",
envVars: [
envVar(key: "CONTAINER_HEAP_PERCENT", value: "0.25")
])
]) {
node("mypod") {
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 内で変更できます。詳細は、Agent Pod Retention を参照してください。
Kubernetes プラグインの設定に関する詳細は、Kubernetes プラグインドキュメント を参照してください。