Cloud & DevOps/CICD

[Jenkins] jnlp agent

백곰곰 2023. 2. 18. 14:30
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