12.2.6. Jenkins Kubernetes 플러그인 구성

OpenShift Container Platform Jenkins 이미지에는 Kubernetes 및 OpenShift Container Platform을 사용하여 여러 컨테이너 호스트에서 Jenkins 에이전트를 동적으로 프로비저닝할 수 있는 사전 설치된 Kubernetes 플러그인이 포함되어 있습니다.

Kubernetes 플러그인을 사용하도록 OpenShift Container Platform은 Jenkins 에이전트로 사용하기에 적합한 이미지인 Base, Maven 및 Node.js 이미지를 제공합니다.

Maven 및 Node.js 에이전트 이미지 둘 다 OpenShift Container Platform Jenkins 이미지의 Kubernetes 플러그인 구성에서 Kubernetes pod 템플릿 이미지로 자동 구성됩니다. 해당 구성에는 이 프로젝트를 실행할 수 있는 제한 설정에 따라 모든 Jenkins 작업에 적용할 수 있는 각 이미지의 레이블이 포함되어 있습니다. 레이블이 적용되면 해당 에이전트 이미지를 실행하는 OpenShift Container Platform pod에서 작업이 실행됩니다.

Jenkins 이미지는 Kubernetes 플러그인의 추가 에이전트 이미지 자동 검색 및 자동 구성 기능도 제공합니다.

OpenShift Container Platform 동기화 플러그인을 사용하면 Jenkins 시작 시 Jenkins 이미지가 실행 중인 프로젝트 또는 플러그인 구성에 구체적으로 나열된 프로젝트에서 다음을 검색합니다.

  • role 레이블이 jenkins-agent로 설정된 이미지 스트림
  • role 주석이 jenkins-agent로 설정된 이미지 스트림 태그
  • role 레이블이 jenkins-agent로 설정된 구성 맵

적절한 레이블이 있는 이미지 스트림 또는 적절한 주석이 있는 이미지 스트림 태그를 찾으면 해당 Kubernetes 플러그인 구성이 생성되므로 이미지 스트림이 제공한 컨테이너 이미지를 실행하는 pod에서 Jenkins 작업을 실행하도록 할당할 수 있습니다.

이미지 스트림 또는 이미지 스트림 태그의 이름 및 이미지 참조는 Kubernetes 플러그인 pod 템플릿의 이름 및 이미지 필드에 매핑됩니다. agent-label 키로 이미지 스트림 또는 이미지 스트림 태그 오브젝트에 주석을 설정하여 Kubernetes 플러그인 pod 템플릿의 레이블 필드를 제어할 수 있습니다. 그러지 않으면 이름이 레이블로 사용됩니다.

참고

Jenkins 콘솔에 로그인하지 말고 pod 템플릿 구성을 수정하십시오. pod 템플릿이 생성된 후 구성을 수정했는데 OpenShift Container Platform 동기화 플러그인에서 이미지 스트림 또는 이미지 스트림 태그와 연결된 이미지가 변경된 것을 탐지하는 경우, pod 템플릿을 교체하고 구성 변경 사항을 덮어씁니다. 새 구성은 기존 구성과 병합할 수 없습니다.

보다 복잡한 구성이 필요한 경우 구성 맵 접근 방법을 고려하십시오.

적절한 레이블이 있는 구성 맵을 찾으면 구성 맵의 키-값 데이터 페이로드에 있는 값에 Jenkins 및 Kubernetes 플러그인 pod 템플릿의 구성 형식과 일치하는 XML(Extensible Markup Language)이 포함되어 있다고 가정합니다. 이미지 스트림 또는 이미지 스트림 태그 대신 구성 맵을 사용할 때 유의해야 할 중요한 차이점은 Kubernetes 플러그인 pod 템플릿의 모든 매개변수를 제어할 수 있다는 것입니다.

jenkins-agent의 예제 구성 맵은 다음과 같습니다.

kind: ConfigMap
apiVersion: v1
metadata:
  name: jenkins-agent
  labels:
    role: jenkins-agent
data:
  template1: |-
    <org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
      <inheritFrom></inheritFrom>
      <name>template1</name>
      <instanceCap>2147483647</instanceCap>
      <idleMinutes>0</idleMinutes>
      <label>template1</label>
      <serviceAccount>jenkins</serviceAccount>
      <nodeSelector></nodeSelector>
      <volumes/>
      <containers>
        <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
          <name>jnlp</name>
          <image>openshift/jenkins-agent-maven-35-centos7:v3.10</image>
          <privileged>false</privileged>
          <alwaysPullImage>true</alwaysPullImage>
          <workingDir>/tmp</workingDir>
          <command></command>
          <args>${computer.jnlpmac} ${computer.name}</args>
          <ttyEnabled>false</ttyEnabled>
          <resourceRequestCpu></resourceRequestCpu>
          <resourceRequestMemory></resourceRequestMemory>
          <resourceLimitCpu></resourceLimitCpu>
          <resourceLimitMemory></resourceLimitMemory>
          <envVars/>
        </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
      </containers>
      <envVars/>
      <annotations/>
      <imagePullSecrets/>
      <nodeProperties/>
    </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>

참고

Jenkins 콘솔에 로그인하고, pod 템플릿이 생성된 후 pod 템플릿 구성을 추가로 변경하고, OpenShift Container Platform동기화 플러그인에서 구성 맵이 변경되었음을 탐지하면 pod 템플릿을 교체하고 해당 구성 변경 사항을 덮어씁니다. 새 구성은 기존 구성과 병합할 수 없습니다.

Jenkins 콘솔에 로그인하지 말고 pod 템플릿 구성을 수정하십시오. pod 템플릿이 생성된 후 구성을 수정했는데 OpenShift Container Platform 동기화 플러그인에서 이미지 스트림 또는 이미지 스트림 태그와 연결된 이미지가 변경된 것을 탐지하는 경우, pod 템플릿을 교체하고 구성 변경 사항을 덮어씁니다. 새 구성은 기존 구성과 병합할 수 없습니다.

보다 복잡한 구성이 필요한 경우 구성 맵 접근 방법을 고려하십시오.

OpenShift Container Platform 동기화 플러그인이 설치되면 OpenShift Container Platform의 API 서버를 모니터링하여 이미지 스트림, 이미지 스트림 태그, 구성 맵에 대한 업데이트를 확인하고 Kubernetes 플러그인의 구성을 조정합니다.

적용되는 규칙은 다음과 같습니다.

  • 구성 맵, 이미지 스트림 또는 이미지 스트림 태그에서 레이블 또는 주석을 제거하면 Kubernetes 플러그인 구성에서 기존 PodTemplate이 삭제됩니다.
  • 이러한 오브젝트가 제거되면 Kubernetes 플러그인에서 해당 구성이 제거됩니다.
  • 레이블 또는 주석이 적절히 지정된 ConfigMap, ImageStream 또는 ImageStreamTag 오브젝트를 생성하거나 초기 생성 후 레이블을 추가하면 Kubernetes 플러그인 구성에서 PodTemplate이 생성됩니다.
  • 구성 맵 형식별 PodTemplate의 경우 PodTemplate의 구성 맵 데이터에 대한 변경 사항이 Kubernetes 플러그인 구성의 PodTemplate 설정에 적용되며 구성 맵 변경 간에 Jenkins UI를 통해 변경한 PodTemplate변경 사항은 재정의됩니다.

컨테이너 이미지를 Jenkins 에이전트로 사용하려면 이미지가 에이전트를 진입점으로 실행해야 합니다. 이 작업에 대한 자세한 내용은 공식 Jenkins 문서를 참조하십시오.