(젠킨스) jnlp 에이전트

개요

쿠버네티스에서 hem을 통해 jenkins를 배포할 때 마스터를 statefulset으로 구성할 수 있으며 작업이 실행될 때마다 에이전트를 포드로 구성할 수 있습니다.

이때 JNLP(Java Network Launch Protocol)를 이용하여 마스터와 에이전트를 연결하고 기본 에이전트 이미지는 Jenkins/인바운드 프록시에 포함된


K8S에서 jnlp 프록시 사용

Jenkins를 k8s에 배포할 때 투구 차트주로 사용 값.yaml 이 파일에는 아래와 같이 프록시 구성이 포함되어 있습니다.

다양한 버전을 jenkins/inbound-agent 이미지의 태그로 지정할 수 있으며 컨트롤러와 일치하는 jdk 버전이 포함된 이미지를 사용할 수 있습니다(예: 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 클러스터에서 액세스할 수 있는 리포지토리로 푸시해야 합니다.

# 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")