728x90
반응형
개요
kubernetes에 hem을 통해 jenkins를 배포할 때 Master는 statefulset으로, Agent는 Job 실행 시마다 Pod로 뜨게 설정할 수 있다.
이때 Master와 Agent를 연결하기 위해 JNLP(Java Network Launch Protocol)를 사용하고, 기본 agent 이미지인 jenkins/inbound-agent에 포함되어 있다.
K8S에서 jnlp agent 사용하기
Jenkins를 k8s에 배포할 때 helm 차트를 주로 활용한다. values.yaml 파일에 아래 처럼 agent 설정이 포함되어있다. jenkins/inbound-agent 이미지에 tag로 다양한 버전을 지정할 수 있는데, controller와 일치하는 jdk 버전이 포함된 이미지(ex. jenkins/inbound-agent:4.13-1-jdk11)를 사용했다.
agent:
enabled: true
defaultsProviderTemplate: ""
# URL for connecting to the Jenkins contoller
jenkinsUrl:
# connect to the specified host and port, instead of connecting directly to the Jenkins controller
jenkinsTunnel:
kubernetesConnectTimeout: 5
kubernetesReadTimeout: 15
maxRequestsPerHostStr: "32"
namespace:
image: "jenkins/inbound-agent"
tag: "4.11.2-4"
workingDir: "/home/jenkins/agent"
nodeUsageMode: "NORMAL"
customJenkinsLabels: []
# name of the secret to be used for image pulling
imagePullSecretName:
componentName: "jenkins-agent"
websocket: false
privileged: false
runAsUser:
runAsGroup:
hostNetworking: false
resources:
requests:
cpu: "512m"
memory: "512Mi"
limits:
cpu: "512m"
memory: "512Mi"
또한, jenkins/inbound-agent 이미지를 기본 이미지로 두고 awscli 등 필요한 패키지를 포함해서 다시 빌드하여 사용할 수 있다. 해당 이미지는 ECR 등 k8s 클러스터에서 접근 가능한 레파지토리에 push가 필요하다.
# Jenkins Agent
FROM jenkins/inbound-agent:4.13-1-jdk11
ENV TZ=Asia/Seoul
USER root
# install packages
RUN apt-get -y update \
&& apt-get -y upgrade \
&& apt-get -y install sudo curl bash jq npm vim tini \
&& apt-get -y install procps apt-utils wget\
&& usermod --shell /bin/bash jenkins
# python2,3 install
RUN apt-get -y install python \
&& curl -k https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py \
&& python get-pip.py && rm get-pip.py\
&& pip install virtualenv \
&& apt-get -y install \
python${PYTHON_VERSION} \
python3-pip \
python3-venv
# install AWS CLI
RUN set +x \
&& pip3 install awscli --upgrade
USER jenkins
ENTRYPOINT ["/usr/local/bin/jenkins-agent"]
728x90
'Cloud & DevOps > CICD' 카테고리의 다른 글
[Jenkins] Jenkins agent 파드에 toleration 추가하는 방법 (0) | 2024.08.31 |
---|---|
[Jenkins] JCasC로 프로젝트(job) 이름 규칙 정하기 (0) | 2023.02.18 |
[Gitlab] Private registry에 등록된 Docker image 사용 방법 (0) | 2023.01.03 |
Docker Machine deprecated에 따른 gitlab 오류 현상 (0) | 2022.07.11 |
Jenkins로 Terraform 자원 배포하기 (0) | 2022.05.08 |