4.2.4.2. Jenkins 쿠버네티스 플러그인 사용
새 Jenkins 서비스 생성
아래 샘플에서 openshift-jee-sample BuildConfig로 인해 Jenkins maven 에이전트 포드가 동적으로 프로비저닝됩니다. 포드는 일부 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 에이전트 포드의 사양을 재정의할 수도 있습니다. 다음은 컨테이너 메모리를 재정의하고 환경 변수를 지정하는 위 예제를 수정하는 것입니다.
예 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 템플릿이fly에서 정의됩니다. 새 Pod 템플릿 이름이 아래의 노드 스탠자에서 참조됩니다.
- 2
- "cloud" 값을 "openshift"로 설정해야 합니다.
- 3
- 새 포드 템플릿은 기존 포드 템플릿의 구성을 상속할 수 있습니다. 이 경우 OpenShift Container Platform에 의해 미리 정의된 "maven" 포드 템플릿을 상속합니다.
- 4
- 기존 컨테이너에서 값을 재정의하므로 이름으로 지정해야 합니다. OpenShift Container Platform과 함께 제공되는 모든 Jenkins 에이전트 이미지는 컨테이너 이름 "jnlp"를 사용합니다.
- 5
- 컨테이너 이미지를 다시 지정해야 합니다. 이것은 확인된 문제입니다.
- 6
- 512Mi의 메모리 요청이 지정됩니다.
- 7
- 512Mi의 메모리 제한이 지정됩니다.
- 8
- 값이 "0.25"인 환경 변수 CONTAINER_HEAP_PERCENT가 지정되었습니다.
- 9
- 노드 스탠자는 위에 새로 정의된 Pod 템플릿의 이름을 참조합니다.
기본적으로 Pod는 빌드가 완료되면 삭제됩니다. 이 동작은 플러그인을 통해 또는 pipeline Jenkinsfile 내에서 수정할 수 있습니다. 자세한 내용은 에이전트 Pod 보존을 참조하십시오.
Kubernetes 플러그인 구성에 대한 자세한 내용은 Kubernetes 플러그인 설명서를 참조하십시오.