사용자 설치 Jenkins 툴 등록하기

참고
  • Jenkins 설치 및 운영에 Samsung Cloud Platform 마켓플레이스를 사용하는 것을 권장합니다.
  • 마켓플레이스를 사용할 수 없거나 직접 설치한 Jenkins를 DevOps Console에 툴 등록하려는 경우 본 문서를 활용하세요.
  • 본 문서는 DevOps Console에 Jenkins 툴 등록을 가이드 하는 문서이므로 Jenkins 설치 및 운영에 대해서는 간단하게 설명합니다.

사용자 설치 Jenkins 툴 등록 시작하기

Jenkins와 플러그인을 설치하세요.

Jenkins 설치

설치하기 전에

DevOps Console에 Jenkins를 등록하기 위해서는 일반적으로 Jenkins가 다음 조건을 만족해야 합니다. 다른 조건인 경우 설치 전 SR을 등록해서 확인하세요.

  • Jenkins 접속에 도메인 사용
  • DNS에 Jenkins 도메인이 등록 됨
  • Jenkins 통신에 HTTPS(443 포트), 공인인증서 사용

설치

Jenkins를 VM 또는 Kubernetes에 설치하세요

플러그인 설치

Jenkins에 아래 플러그인을 설치하세요.

Plugin IDName
apache-httpcomponents-client-4-apiApache HttpComponents Client 4.x API
credentialsCredentials
credentials-bindingCredentials Binding
githubGitHub
jobConfigHistoryJob Configuration History
kubernetesKubernetes
mask-passwordsMask Passwords
maven-pluginMaven Integration
matrix-authMatrix Authorization Strategy
metricsMetrics
pipeline-stage-viewPipeline: Stage View
pipeline-utility-stepsPipeline Utility Steps
script-securityScript Security
ssh-stepsSSH Pipeline Steps
workflow-aggregatorPipeline
workflow-step-apiPipeline: Step API
표. 설치 플러그인 목록
참고
https://plugins.jenkins.io/{Plugin ID}에서 플러그인 상세 정보를 확인 할 수 있습니다.

Jenkins 설정

공통 설정

Jenkins 관리 > System

항목설명
# of executors0Controller에서 직접 빌드 실행을 제한하고 Agent에서만 빌드 실행을 위해 0으로 설정
Jenkins URL(ex) https://{YOUR_DOMAIN}/jenkins/
System Admin e-mail address(ex) admin@example.com
표. Jenkins 관리 > System 설정

Jenkins 관리 > Security

항목설명
AuthorizationProject-based Matrix Authorization Strategy
Authenticated UsersOverall > Read
<ADMIN_USER>Overall > AdministerAdd user로 관리자 계정 추가
표. Jenkins 관리 > Security 설정

Jenkins Username에 이메일 형식 지원

  • 기본적으로 Jenkins에서는 @ 점(.) 을 로그인 Username에 사용 할 수 없습니다. 하지만 DevOps Console은 이메일을 Username으로 사용하고 있으므로 Jenkins에서도 Username에 이메일을 사용 할 수 있도록 설정합니다.
  • /{JENKINS_HOME}/init.groovy.d/init.groovy 파일 생성 후 아래 내용을 입력하고 Jenkins를 재시작 하세요.
    • (ex) /var/jenkins_home/init.groovy.d/init.groovy
배경색 변경
hudson.security.HudsonPrivateSecurityRealm.ID_REGEX=/^[\w-\.\@\_]+$/
hudson.security.HudsonPrivateSecurityRealm.ID_REGEX=/^[\w-\.\@\_]+$/
코드 블럭. init.groovy

Kubernetes에 설치 한 Jenkins 추가 설정

RBAC

Jenkins에서 Kubernetes에 Pod를 생성 할 수 있도록 Jenkins의 Service Account에 RBAC을 설정하세요.

배경색 변경
# In GKE need to get RBAC permissions first with
# kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin [--user=<user-name>|--group=<group-name>]
 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
 
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["watch"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
 
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
- kind: ServiceAccount
  name: jenkins
# In GKE need to get RBAC permissions first with
# kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin [--user=<user-name>|--group=<group-name>]
 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
 
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["watch"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
 
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
- kind: ServiceAccount
  name: jenkins
코드 블럭. service-account.yml

Jenkins 관리 > Clouds

kubernetes

  • kubernetes 클라우드를 추가하세요.
  • kubernetes 클라우드를 다음과 같이 설정하세요. 나머지 항목은 기본 값 그대로 사용합니다.
항목설명
Cloud namekubernetes
TypeKubernetes 선택
Kubernetes URLhttps://kubernetes.defaultJenkins가 실행중인 클러스터에 Pod(Agent)를 생성
Disable https certificate체크
Kubernetes Namespace(예) jenkinsJenkins Controller가 실행 중인 Namespace 입력, 해당 Namespace에 Pod(Agent)가 생성 됨
WebSocket체크
Jenkins URL(예) http://{JENKINS_SERVICE_NAME}:{PORT}/jenkins
  • Pod(Agent) → Pod(Controller) 호출 할 때 사용하는 Jenkins URL
  • 동일한 Namespace 내부에서 호출되므로 Kubernetes Service Name을 사용
표. Jenkins 관리 > Clouds > kubernetes 설정

kubernetes > Pod Templates

  • Pod Template을 추가하세요.
  • BASE-TEMPLATE은 각 Pod Template에서 공통으로 사용해야 하는 값을 설정하는 상위 Template으로 DevOps Console에서 사용됩니다.
항목설명
NameBASE-TEMPLATE
Image Pull Secret{IMAGE_PULL_SECRET} 이름 입력Pod(Agent) 이미지를 Pull 할 수 있도록 Secret을 Namespace에 생성하고 그 이름을 입력
표. Jenkins 관리 > Clouds > kubernetes > Pod Templates 설정

DevOps Console에서 Jenkins 툴 등록하기

방화벽 등록하기

아래 표를 참고하여 Jenkins에 방화벽을 등록하세요.

출발지목적지목적지 Port
사용자 설치 JenkinsDevOps Console 웹443
DevOps Console 출발지 IP사용자 설치 Jenkins 웹443
표. Jenkins(목적지) 방화벽 목록
참고
DevOps Console의 출발지 IP를 확인하려면 툴 추가 화면에서 URL ⓘ를 클릭하세요. 툴팁에서 DevOps Console의 출발지 IP를 확인 할 수 있습니다.

DevOps Console 작업

  • Jenkins 툴 등록과 관련된 상세한 내용은 툴 추가하기를 참고하세요.
  • 툴 등록 단계에서 Jenkins에 설치 된 플러그인을 확인하고, 설치가 필요한 플러그인이 있는 경우 플러그인 설치 안내 페이지가 표시됩니다. 안내 대로 플러그인을 다운로드 받아 설치하세요.

Jenkins 확인

Jenkins 관리 > System

Global Trusted Pipeline Libraries

  • Library에 cicdpaas가 설정 되어 있는지 확인하세요.
  • 설정이 되어 있지 않다면
    • DevOps Console ↔ Jenkins 통신 여부를 확인하세요.
    • DevOps Console > 관리 > Jenkins 상세화면 > 글로벌 라이브러리 탭에서 설정을 확인하세요.

DevOps Console Credentials

  • Test Connection 버튼을 클릭해서 Success가 출력되는지 확인하세요.

Jenkins에 에이전트(VM) 추가하기

DevOps Console 작업

에이전트(VM) 추가하기를 확인하고 에이전트(VM)을 추가하세요.

Jenkins 작업

Jenkins 관리 > Nodes > 에이전트 상세 화면

DevOps Console에서 추가 한 Agent가 생성 된 것을 확인하세요. Jenkins 화면의 가이드에 따라 Agent를 실행하고 Jenkins에 연결하세요.

Jenkins에 에이전트(Kubernetes) 추가하기

에이전트(Kubernetes)를 추가하기 전에

사용자 Jenkins 에이전트 이미지 생성하기

  • Jenkins에서 CI/CD를 위해서는 에이전트 이미지가 필요합니다.
  • Jenkins에서 기본 제공하는 이미지를 사용해서 사용자에게 맞는 Jenkins 에이전트 이미지를 생성하세요.
  • 이미지 생성 후 사용자 이미지 저장소에 push 하세요.
배경색 변경
FROM jenkins/inbound-agent:latest-jdk17

USER root

# Docker CLI
RUN curl -L0 "https://download.docker.com/linux/static/stable/x86_64/docker-29.1.3.tgz" -o /tmp/docker.tgz && \
    tar --extract \
      --file /tmp/docker.tgz \
      --strip-components 1 \
      --directory /usr/local/bin/ && \
    rm /tmp/docker.tgz

COPY --from=docker/buildx-bin /buildx /usr/libexec/docker/cli-plugins/docker-buildx

# Install your build tools...
# xxx

USER jenkins
FROM jenkins/inbound-agent:latest-jdk17

USER root

# Docker CLI
RUN curl -L0 "https://download.docker.com/linux/static/stable/x86_64/docker-29.1.3.tgz" -o /tmp/docker.tgz && \
    tar --extract \
      --file /tmp/docker.tgz \
      --strip-components 1 \
      --directory /usr/local/bin/ && \
    rm /tmp/docker.tgz

COPY --from=docker/buildx-bin /buildx /usr/libexec/docker/cli-plugins/docker-buildx

# Install your build tools...
# xxx

USER jenkins
코드 블럭. Dockerfile 예시

Docker in Docker 이미지

  • DevOps Console에서는 Kubernetes 환경에서 Docker 이미지를 생성하기 위해 Docker in Docker를 사용합니다.
  • Docker에서 제공하는 docker:dind (Docker in Docker) 이미지를 사용자 저장소에 push 하세요.

DevOps Console 작업

  • Pod Template 추가하기를 확인하고 에이전트(kubernetes)을 추가하세요.
    • 기본적으로 에이전트가 한 개(또는 여러 개) 등록되어 있습니다. 기본으로 등록 된 에이전트를 삭제하세요.
  • Docker 이미지 빌드가 필요한 경우 Docker in Docker를 사용으로 선택하세요.
  • jnlp 이미지 주소에 위에서 생성한 사용자 Jenkins 에이전트 주소를 입력하세요.

Jenkins 작업

Jenkins 관리 > Clouds > kubernetes > Pod Templates

  • DevOps Console에서 추가한 에이전트(Kubernetes)가 Pod Template으로 등록되어 있습니다.
  • DevOps Console에서 Docker in Docker를 사용으로 선택한 경우 dind 컨테이너에 기본 이미지 주소가 입력되어 있습니다. 사용자 저장소에 push한 docker:dind 이미지 주소로 변경하세요.
App.템플릿
K8S 클러스터