참고
- 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 ID | Name |
|---|---|
| apache-httpcomponents-client-4-api | Apache HttpComponents Client 4.x API |
| credentials | Credentials |
| credentials-binding | Credentials Binding |
| github | GitHub |
| jobConfigHistory | Job Configuration History |
| kubernetes | Kubernetes |
| mask-passwords | Mask Passwords |
| maven-plugin | Maven Integration |
| matrix-auth | Matrix Authorization Strategy |
| metrics | Metrics |
| pipeline-stage-view | Pipeline: Stage View |
| pipeline-utility-steps | Pipeline Utility Steps |
| script-security | Script Security |
| ssh-steps | SSH Pipeline Steps |
| workflow-aggregator | Pipeline |
| workflow-step-api | Pipeline: Step API |
표. 설치 플러그인 목록
참고
https://plugins.jenkins.io/{Plugin ID}에서 플러그인 상세 정보를 확인 할 수 있습니다.
Jenkins 설정
공통 설정
Jenkins 관리 > System
| 항목 | 값 | 설명 |
|---|---|---|
| # of executors | 0 | Controller에서 직접 빌드 실행을 제한하고 Agent에서만 빌드 실행을 위해 0으로 설정 |
| Jenkins URL | (ex) https://{YOUR_DOMAIN}/jenkins/ | |
| System Admin e-mail address | (ex) admin@example.com |
표. Jenkins 관리 > System 설정
Jenkins 관리 > Security
| 항목 | 값 | 설명 |
|---|---|---|
| Authorization | Project-based Matrix Authorization Strategy | |
| Authenticated Users | Overall > Read | |
| <ADMIN_USER> | Overall > Administer | Add 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
- (ex)
배경색 변경
hudson.security.HudsonPrivateSecurityRealm.ID_REGEX=/^[\w-\.\@\_]+$/hudson.security.HudsonPrivateSecurityRealm.ID_REGEX=/^[\w-\.\@\_]+$/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참고
Jenkins 관리 > Clouds
kubernetes
- kubernetes 클라우드를 추가하세요.
- kubernetes 클라우드를 다음과 같이 설정하세요. 나머지 항목은 기본 값 그대로 사용합니다.
| 항목 | 값 | 설명 |
|---|---|---|
| Cloud name | kubernetes | |
| Type | Kubernetes 선택 | |
| Kubernetes URL | https://kubernetes.default | Jenkins가 실행중인 클러스터에 Pod(Agent)를 생성 |
| Disable https certificate | 체크 | |
| Kubernetes Namespace | (예) jenkins | Jenkins Controller가 실행 중인 Namespace 입력, 해당 Namespace에 Pod(Agent)가 생성 됨 |
| WebSocket | 체크 | |
| Jenkins URL | (예) http://{JENKINS_SERVICE_NAME}:{PORT}/jenkins |
|
표. Jenkins 관리 > Clouds > kubernetes 설정
kubernetes > Pod Templates
- Pod Template을 추가하세요.
- BASE-TEMPLATE은 각 Pod Template에서 공통으로 사용해야 하는 값을 설정하는 상위 Template으로 DevOps Console에서 사용됩니다.
| 항목 | 값 | 설명 |
|---|---|---|
| Name | BASE-TEMPLATE | |
| Image Pull Secret | {IMAGE_PULL_SECRET} 이름 입력 | Pod(Agent) 이미지를 Pull 할 수 있도록 Secret을 Namespace에 생성하고 그 이름을 입력 |
표. Jenkins 관리 > Clouds > kubernetes > Pod Templates 설정
DevOps Console에서 Jenkins 툴 등록하기
방화벽 등록하기
아래 표를 참고하여 Jenkins에 방화벽을 등록하세요.
| 출발지 | 목적지 | 목적지 Port |
|---|---|---|
| 사용자 설치 Jenkins | DevOps 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 jenkinsFROM 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 jenkinsDocker 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 이미지 주소로 변경하세요.