본문 바로가기

Devops/Jenkins

Jenkins CLI - Kubernetes Cloud 등록

반응형

 

Jenkins CLI 사용 시 Groovy를 사용해서 쿠버네티스 클라우드 설정을 해보는 것을 설명하려고 한다.

 

신규 cloud를 생성하고 기존 cloud 설정과 동일하게 Configure 및 Pod Template를 구성해보려고 한다.

1. Jenkins 및 Kubernetes 플러그인의 클래스들을 임포트한다.

import jenkins.model.Jenkins
import org.csanchez.jenkins.plugins.kubernetes.*
import org.csanchez.jenkins.plugins.kubernetes.volumes.*

 

2.Cloud 설정

콘솔에서 확인할 수 있는 Cloud 설정

 

이 설정과 동일하게 변수 형태로 값을 받고 KubernetesCloud 객체를 생성 후 위에서 정의한 변수들로 설정한다.

변수로 받는 값은 클라우드 이름, 서버 URL, 네임스페이스, Jenkins URL, 터널, 자격증명 ID, 컨테이너 한도, 유지 시간 및 라벨 등을 작성할 수 있다.

def name = 'k8s-cloud-2'
def serverUrl = 'https://kubernetes.default'
def namespace = 'default'
def jenkinsTunnel = 'jenkins-agent.default.svc.cluster.local:50000'
def credentialsId =  ''
def containerCap = 10
def retentionTimeout = 5
List<PodLabel> labels  = PodLabel.listOf("jenkins/jenkins-jenkins-agent", "true", "foo", "var");

def cloud = new KubernetesCloud(name)
cloud.setServerUrl(serverUrl)
cloud.setNamespace(namespace)
cloud.setJenkinsUrl(jenkinsUrl)
cloud.setJenkinsTunnel(jenkinsTunnel)
cloud.setCredentialsId(credentialsId)
cloud.setContainerCap(containerCap)
cloud.setRetentionTimeout(retentionTimeout)
cloud.setPodLabels(labels);

 

 

3.Pod Template 설정

 Pod 템플릿과 컨테이너 템플릿을 생성하고 Set 함수들을 이용하여 해당 값에 맞는 내용을 기입해준다.

// Pod 템플릿을 생성합니다
def podTemplate = new PodTemplate()
podTemplate.setName('jenkins-slave')
podTemplate.setNamespace('default')
podTemplate.setSlaveConnectTimeout(100)
podTemplate.setLabel('jenkins-slave')
podTemplate.setServiceAccount('default')
podTemplate.setNodeUsageMode(hudson.model.Node.Mode.NORMAL)
podTemplate.setPodRetention(new org.csanchez.jenkins.plugins.kubernetes.pod.retention.Never())
def volumes = [
    new HostPathVolume('/var/run/docker.sock', '/var/run/docker.sock', false),
    //new EmptyDirVolume('empty-dir-volume')
]
podTemplate.setVolumes(volumes)

// 컨테이너 템플릿을 생성합니다
def containerTemplate = new ContainerTemplate('test', 'gkfka133/mvntest:1.3')
containerTemplate.setWorkingDir('/home/jenkins/agent')
containerTemplate.setCommand('/bin/sh -c')
containerTemplate.setArgs('cat')
containerTemplate.setResourceRequestCpu('100m')
containerTemplate.setResourceRequestMemory('256Mi')
containerTemplate.setResourceLimitCpu('100m')
containerTemplate.setResourceLimitMemory('256Mi')
containerTemplate.setTtyEnabled(true)

def containerTemplate2 = new ContainerTemplate('docker-jenkins', 'gkfka133/docker-jenkins-test:1.0')
containerTemplate2.setWorkingDir('/home/jenkins/agent')
containerTemplate2.setCommand('/bin/sh -c')
containerTemplate2.setArgs('cat')
containerTemplate2.setResourceRequestCpu('100m')
containerTemplate2.setResourceRequestMemory('256Mi')
containerTemplate2.setResourceLimitCpu('100m')
containerTemplate2.setResourceLimitMemory('256Mi')
containerTemplate2.setTtyEnabled(true)


def envVar = new PodEnvVar('JENKINS_URL', 'http://jenkins-url:8080/')
containerTemplate.setEnvVars([envVar])
 

 

 

4. 설정 값 Cloud 저장 및 Jenkins 반영

// Pod 템플릿에 컨테이너 템플릿 추가
podTemplate.setContainers([containerTemplate, containerTemplate2])

// Kubernetes 클라우드에 Pod 템플릿 추가
cloud.getTemplates().add(podTemplate)


// Jenkins에 클라우드 추가 및 저장
Jenkins.instance.clouds.add(cloud)
Jenkins.instance.save()

// 성공 메시지 출력
println "Kubernetes cloud configuration '${name}' added successfully."

 

 

해당 파일을 create_k8s_cloud.groovy로 저장 후 아래 명령어를 통해 반영

java -jar jenkins-cli.jar -s https://jenkins.hrc0303.store/ -auth user:passwd groovy = < create_k8s_cloud.groovy

 

Cloud 생성 콘솔에서 확인

반응형

'Devops > Jenkins' 카테고리의 다른 글

Jenkins CLI - Jenkins 유저 설정  (0) 2024.07.12
Jenkins CLI - 플러그인 설정  (0) 2024.07.12
Jenkins CLI - CLI 사용을 위한 설정  (0) 2024.07.11
Jenkins Pipeline 구축 (Springboot 기반)  (0) 2024.07.06
Jenkins - Kubernetes 연동  (0) 2022.09.17