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", 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 内で変更できます。詳細は、Agent Pod Retention を参照してください。
Kubernetes プラグインの設定に関する詳細は、Kubernetes プラグインドキュメント を参照してください。