젠킨스 설치 및 기본 설정
RPM 패키지 설치 방식
젠킨스를 RPM 패키지로 설치 시 다음과 같은 기본 경로와 변수가 사용됩니다:
기본 경로
- 설정 파일: /etc/sysconfig/jenkins
- 로그 파일: /var/log/jenkins/jenkins.log
- 실행 파일: /usr/lib/jenkins/jenkins.war
기본 변수
- JENKINS_HOME: /var/lib/jenkins
- JENKINS_USER: jenkins
- JENKINS_PORT: 8080
JENKINS_HOME 디렉토리 구조
젠킨스 홈 디렉토리에는 다음과 같은 파일과 폴더가 포함됩니다:
bash-4.4# ls -l var/jenkins_home/ total 68 -rw-r--r-- 1 root root 1647 Dec 3 08:18 config.xml -rw-r--r-- 1 root root 3972 Dec 3 08:00 copy_reference_file.log -rw-r--r-- 1 root root 156 Dec 3 08:00 hudson.model.UpdateCenter.xml -rw-r--r-- 1 root root 370 Dec 3 08:00 hudson.plugins.git.GitTool.xml -rw------- 1 root root 1712 Dec 3 08:00 identity.key.enc -rw-r--r-- 1 root root 7 Dec 3 08:18 jenkins.install.InstallUtil.lastExecVersion -rw-r--r-- 1 root root 7 Dec 3 08:18 jenkins.install.UpgradeWizard.state -rw-r--r-- 1 root root 184 Dec 3 08:18 jenkins.model.JenkinsLocationConfiguration.xml -rw-r--r-- 1 root root 171 Dec 3 08:00 jenkins.telemetry.Correlator.xml drwxr-xr-x 2 root root 6 Dec 3 08:00 jobs drwxr-xr-x 4 root root 37 Dec 3 08:00 logs -rw-r--r-- 1 root root 907 Dec 3 08:00 nodeMonitors.xml drwxr-xr-x 2 root root 6 Dec 3 08:00 nodes drwxr-xr-x 109 root root 16384 Dec 3 08:17 plugins -rw-r--r-- 1 root root 64 Dec 3 08:00 secret.key -rw-r--r-- 1 root root 0 Dec 3 08:00 secret.key.not-so-secret drwx------ 4 root root 237 Dec 3 08:18 secrets drwxr-xr-x 2 root root 182 Dec 3 08:17 updates drwxr-xr-x 2 root root 24 Dec 3 08:00 userContent drwxr-xr-x 3 root root 58 Dec 3 08:18 users drwxr-xr-x 11 root root 4096 Dec 3 08:00 war drwxr-xr-x 2 root root 6 Dec 3 08:00 workflow-libs
디렉토리 구조 설명
- config.xml - 젠킨스 주 설정 파일
- jobs - 작업의 설정 정보, 빌드 정보, 생성된 아티팩트 데이터
- logs - 작업 로그 정보 (상세 실행 로그는 /var/log/jenkins에 저장)
- nodes - 연결된 에이전트 노드 정보
- plugins - 플러그인 파일 저장소 (jpi는 설치 파일, bak는 이전 버전 백업)
- secrets - 시스템 및 사용자 인증 및 키 정보
- updates - 시스템 및 플러그업 업데이트 정보
- userContent - 사용자 정의 파일 저장소 (웹 페이지에서 직접 접근 가능)
- users - 젠킨스 로컬 사용자 데이터베이스 사용자 정보
- war - 웹 애플리케이션 확장 파일
- workflow-libs - 워크플로우 라이브러리
작업 큐 관리
젠킨스에서는 작업을 먼저 리소스에 할당하지 않고 큐에 보관한 후, 리소스 조건이 충족되면 자동으로 작업 큐에서 작업을 가져와 실행합니다. 이 방식은 시스템 리소스를 효율적으로 사용할 수 있게 해줍니다.
인터페이스 언어 설정
한국어 인터페이스 설정 방법:
- 시스템 관리 → 플러그인 관리 → 선택 가능 플러그인 → locale 및 "Localization: Chinese (Simplified)" 플러그인 설치
- 시스템 관리 → 시스템 설정 → Locale → 기본 언어에 "zh_CN" 입력 및 적용
영어 인터페이스로 되돌리려면:
- 시스템 관리 → 시스템 설정 → Locale → 기본 언어에 "zh_US" 입력 및 적용
한국화 후 인터페이스 문제 해결
젠킨스가 한국화된 후 영어와 한국어가 혼재되는 문제가 발생할 수 있습니다. 이는 다음과 같은 원인으로 발생할 수 있습니다:
원인 및 해결 방법
- 특정 버전의 브라우저 기본 언어 인식 문제: 안정적인 LTS 버전으로 업그레이드 또는 다운그레이드
- 오래된 버전 플러그간 간섭: 한국어 표시 플러그인을 제거하고 재설치, 시스템 설정에서 한국어 Locale 설정 후 재시작
- 최신 LTS 버전의 plugins 디렉토리를 이전 버전 젠킨스 디렉토리에 덮어쓰기
- "간체중국어"로 설정 후 재시작 시 일부 간체가 표시되지 않음: 언어를 zh_US로 설정하여 영어로 전환 후 재시작, 다시 zh_CN로 설정
주의사항: 작업 전 디렉토리와 파일 백업을 반드시 수행하여 문제 발생 시 롤백할 수 있도록 준비해야 합니다. plugins 디렉토리, users 디렉토리 및 config.xml 파일을 백업하세요. 로그인 시 사용자 이름 또는 비밀번호가 틀리다는 메시지가 나타나는 경우 백업한 users 디렉토리를 다시 복원할 수 있습니다.
젠킨스 자원 및 관리
공식 자원 다운로드
- 공식 사이트: http://mirrors.jenkins.io/
- 업데이트: http://mirrors.jenkins.io/updates/
- WAR 파일 다운로드: http://mirrors.jenkins.io/war-stable/
- 플러그인 다운로드: http://mirrors.jenkins.io/plugins/
- 미러 주소 확인: http://mirrors.jenkins-ci.org/status.html/
젠킨스 실행 스크립트 권한 설정
방법 1: sudo 권한 사용
"visudo" 명령어로 권한을 편집하거나 직접 "/etc/sudoers" 파일을 편집하여 젠킨스 사용자에게 관리자 권한을 부여합니다.
[root@localhost ~]# vim /etc/sudoers [root@localhost ~]# cat /etc/sudoers |grep -v ^# |grep -Ev "^$" Defaults !visiblepw Defaults always_set_home Defaults match_group_by_gid Defaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin root ALL=(ALL) ALL jenkins ALL=(ALL) ALL %wheel ALL=(ALL) ALL
방법 2: root 또는 해당 사용자로 실행
젠킨스를 root 또는 해당 사용자 권한으로 실행하는 방법은 다음 링크를 참조하세요: https://www.jianshu.com/p/fa546f723724
문제 해결 모음
- 젠킨스 플러그인 설치 실패 처리: https://www.cnblogs.com/sxdcgaq8080/p/10489326.html
- 젠킨스 설치 및 사용 시 문제: https://www.jianshu.com/p/62cc8605b4e3
젠킨스 업그레이드
공식 젠킨스 LTS 업그레이드 가이드: https://jenkins.io/zh/doc/upgrade-guide/
외부 네트워크에 연결된 경우, 새 버전이 있으면 페이지에서 알려주므로 온라인 업그레이드를 직접 수행할 수 있습니다.
외부 네트워크에 연결할 수 없는 경우 파일 교체 방식을 사용합니다. 현재 젠킨스 서비스를 중지하고 기존 jenkins.war 또는 jenkins.jar 파일, 설정 및 데이터 폴더를 백업한 후 jenkins.war 또는 jenkins.jar 파일을 교체하고 젠킨스 서비스를 다시 시작합니다.
백업 및 복원
수동 백업 (버전 간 차이가 크지 않은 경우)
- 백업: 젠킨스 서비스 중지 → 전체 JENKINS_HOME 디렉토리 압축 및 백업 → 젠킨스 서비스 재시작
- 복원: 젠킨스 서비스 중지 → 현재 JENKINS_HOME 디렉토리 백업 → 해당 위치에 JENKINS_HOME 디렉토리 압축 해제 → 젠킨스 서비스 재시작
자동 백업 (ThinBackup 플러그인 사용)
설치 후 시스템 관리 → ThinBackup → Settings에서 전역 설정을 수행하고 저장 → 백업 또는 복원 시작
젠킨스 백업 스크립트
https://github.com/sue445/jenkins-backup-script
젠킨스 고급 기능
사용자 비밀번호 복구
사용자의 config.xml 파일을 편집하여 passwordHash 행의 내용을 변경한 후 젠킨스를 재시작하면 변경된 비밀번호로 로그인할 수 있습니다. 비밀번호 "123456"에 해당하는 암호화 내용은 다음과 같습니다: #jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq
[root@test102 users]# pwd
/tmp/jenkins-data/users
[root@test102 users]# tree
.
├── Anliven_1239557570388740263
│ └── config.xml
└── users.xml
1 directory, 2 files
[root@test102 users]# vim Anliven_1239557570388740263/config.xml
[root@test102 users]# cat Anliven_1239557570388740263/config.xml |grep password
<passwordHash>#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq</passwordHash>
중국 미러 소스 설정
젠킨스는 update-center.json 파일을 파싱하여 플러그인 버전을 가져오고 플러그인을 다운로드합니다. 공개 키 검증을 통과한 update-center.json 파일만 사용됩니다.
관리 Jenkins → 관리 플러그인 → 업데이트 사이트 → 제출
기존 주소: https://updates.jenkins.io/update-center.json
새 주소: https://gitee.com/jenkins-zh/update-center-mirror/blob/master/tsinghua/update-center.json
한국어 로컬라이제이션 플러그인
젠킨스 한국어 플러그인: https://plugins.jenkins.io/localization-zh-cn
작업 분류 및 검색
젠킨스에서는 뷰(태그 페이지)를 통해 작업 유형을 직관적으로 분류하고 검색할 수 있습니다.
- 뷰 이름과 뷰 유형 선택 (특별한 요구가 없으면 "목록 뷰" 선택 및 기본 구성 사용)
- 필요한 열 정보 추가
URL을 통해 뷰 페이지에 직접 접근할 수 있습니다. 뷰 생성 후 기존 작업을 뷰에 추가하거나 뷰에서 새 작업을 생성할 수 있습니다. 뷰 페이지에서 뷰를 편집하고 삭제할 수 있습니다.
주의: 젠킨스에는 반드시 하나의 작업(job)이 존재해야 하며, 그렇지 않으면 View 페이지 정보를 젠킨스에서 볼 수 없습니다.
작업 이메일 알림
작업界面 → 설정 → 빌드 후 작업 →
- E-mail Notification: 기본 설정
- Editable E-mail Notification: 고급 사용자 정의 설정
설정 항목:
- 수신자 주소 (쉼표로 구분)
- 이메일 내용 형식
- 이메일 제목
- 이메일 기본 내용
- 빌드 로그 첨부 여부
- 이메일 발송 트리거 조건
젠킨스 보안 및 권한 관리
프로젝트 권한 제어
Authorize Project 플러그인 사용: https://plugins.jenkins.io/authorize-project/
- 시스템 관리 → 전역 보안 설정: 권한 정책 ("프로젝트 매트릭스 권한 정책" 선택), 사용자/그룹 추가 (반드시 관리자 계정을 추가하고 모든 권한 선택)
- 작업 설정 인터페이스에서 프로젝트 보안 활성화
SCM 변경으로 인한 자동 빌드 비활성화
Multibranch Pipeline을 사용하는 경우 작업의 설정 페이지에서 다음과 같이 할 수 있습니다:
- "Branch Sources"까지 스크롤
- "Property strategy"에서 "Named branches get different properties" 선택
- "Add exception" 클릭, 브랜치 이름에 "master" 입력
- "Add property" 클릭, "Suppress automatic SCM triggering" 선택
- 저장
이렇게 하면 master 브랜치의 변경으로 해당 작업의 빌드가 트리거되지 않습니다.
젠킨스 확장 기능
내장 변수
내장 변수 확인: `https://
일부 내장 변수 예시:
echo "#########"
sh "echo 1 ${JENKINS_HOME} 2 ${JENKINS_URL}"
sh "echo 3 ${JOB_NAME} 4 ${JOB_URL} 5 ${BUILD_URL}"
echo "6 ${JOB_NAME}"
echo "7 ${JOB_NAME} \n 8 ${BUILD_URL}"
젠킨스 에이전트 설정
현재 젠킨스 에이전트는 "플러그인 관리"에서 설정되며, 플러그의 다운로드 및 설치에 사용됩니다.
파이프라인에서 빌드 ID 및 설명 사용자 정의
젠킨스에서 기본 빌드 ID는 1부터 시작하는 반복 숫자입니다.
- currentBuild.displayName에 값을 할당하여 빌드 ID를 문자열로 수정할 수 있습니다.
- currentBuild.description에 값을 할당하여 현재 작업의 간단한 설명을 정의할 수 있습니다.
유용한 플러그
- JUnit: 단위 테스트 보고서 https://plugins.jenkins.io/junit
- JaCoCo: 코드 커버리지 https://plugins.jenkins.io/jacoco pom 파일에 추가
- Sonarqube Scanner: 지속적 코드 품질 검사 https://plugins.jenkins.io/sonar pom 파일에 추가
- Credentials Binding Plugin: 인증 바인딩 https://plugins.jenkins.io/credentials-binding
- Workspace Cleanup: 작업 공간 정리 https://plugins.jenkins.io/ws-cleanup/
- Copy Artifact: 다른 파이프라인에서 아티팩트 복사 https://plugins.jenkins.io/copyartifact
- Email Extension : 이메일 알림 https://plugins.jenkins.io/email-ext/
- Build Monitor View: 작업 상태 모니터링 https://plugins.jenkins.io/build-monitor-plugin/
- Monitoring: 젠킨스 상태 모니터링 https://plugins.jenkins.io/monitoring/
- Periodic Backup: 젠킨스 백업 https://plugins.jenkins.io/periodicbackup/
- Ansible: ansible 명령 실행 https://plugins.jenkins.io/ansible
DevOps 플랫폼 구성 요소
참고: 해당 플러그인이 필요합니다!
- Gitlab 통합
- Sonar 통합
- Artifactory 통합
- LDAP 서버 통합
- Ansible 통합
- 모니터링: Jenkins + Prometheus + Grafana
젠킨스 플러그 개발
- https://www.jenkins.io/doc/developer/tutorial/extend/
- https://javadoc.jenkins.io/
- https://javadoc.jenkins.io/index-core.html
- https://javadoc.jenkins.io/plugin/
yum으로 설치된 젠킨스 디렉토리
- jar 파일 디렉토리: `/usr/share/java/jenkins.war`
- webroot 디렉토리: `/var/cache/jenkins/war`
- 젠킨스 데이터 디렉토리: `/var/lib/jenkins` (설정 정보, 시스템 로그 등 데이터가 XML 파일 형식으로 저장)
[root@localhost jenkins]# java -jar /usr/share/java/jenkins.war --version 2.462.1 [root@localhost jenkins]# pwd /var/lib/jenkins [root@localhost jenkins]# ls -l total 60 -rw-r--r-- 1 jenkins jenkins 1729 Sep 2 12:57 config.xml -rw-r--r-- 1 jenkins jenkins 156 Sep 2 11:06 hudson.model.UpdateCenter.xml -rw------- 1 jenkins jenkins 1680 Sep 2 10:55 identity.key.enc -rw-r--r-- 1 jenkins jenkins 7 Sep 2 11:06 jenkins.install.InstallUtil.lastExecVersion -rw-r--r-- 1 jenkins jenkins 7 Sep 2 10:56 jenkins.install.UpgradeWizard.state -rw-r--r-- 1 jenkins jenkins 184 Sep 2 10:56 jenkins.model.JenkinsLocationConfiguration.xml -rw-r--r-- 1 jenkins jenkins 357 Sep 2 12:57 jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml -rw-r--r-- 1 jenkins jenkins 162 Sep 2 12:57 jenkins.security.QueueItemAuthenticatorConfiguration.xml -rw-r--r-- 1 jenkins jenkins 162 Sep 2 12:57 jenkins.security.UpdateSiteWarningsConfiguration.xml -rw-r--r--. 1 jenkins jenkins 171 Sep 2 10:35 jenkins.telemetry.Correlator.xml drwxr-xr-x. 2 jenkins jenkins 6 Sep 2 10:35 jobs drwxr-xr-x 3 jenkins jenkins 20 Sep 2 11:15 logs -rw-r--r-- 1 jenkins jenkins 1037 Sep 2 11:06 nodeMonitors.xml drwxr-xr-x 3 jenkins jenkins 34 Sep 2 11:15 nodes drwxr-xr-x. 9 jenkins jenkins 4096 Sep 2 11:05 plugins -rw-r--r-- 1 jenkins jenkins 258 Sep 2 11:06 queue.xml.bak -rw-r--r--. 1 jenkins jenkins 64 Sep 2 10:35 secret.key -rw-r--r--. 1 jenkins jenkins 0 Sep 2 10:35 secret.key.not-so-secret drwx------. 2 jenkins jenkins 4096 Sep 2 11:15 secrets drwxr-xr-x. 2 jenkins jenkins 67 Sep 2 10:48 updates drwxr-xr-x. 2 jenkins jenkins 24 Sep 2 10:35 userContent drwxr-xr-x. 3 jenkins jenkins 56 Sep 2 10:56 users
참고 자료
- 젠킨스X: https://jenkins-x.io/
- 젠킨스X 실습 시리즈: https://www.cnblogs.com/xiaoqi/category/1398096.html
- 젠킨스에서 젠킨스X로 마이그레이션: https://www.infoq.cn/article/YWkOx7t4gQyO-64KZ186
- Office 365 Connector 플러그인: https://plugins.jenkins.io/Office-365-Connector/
- 공식 파이프라인 문서: https://www.jenkins.io/doc/book/pipeline/syntax/
- 젠킨스 이미지 및 WAR 파일: https://hub.docker.com/r/jenkins/jenkins/, http://mirrors.jenkins.io/war-stable/
- Groovy 스크립트 예제: https://github.com/Statemood/jenkins, https://github.com/Statemood/jenkins-library