젠킨스(Jenkins) 관리 및 활용 가이드

젠킨스 설치 및 기본 설정

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 - 워크플로우 라이브러리

작업 큐 관리

젠킨스에서는 작업을 먼저 리소스에 할당하지 않고 큐에 보관한 후, 리소스 조건이 충족되면 자동으로 작업 큐에서 작업을 가져와 실행합니다. 이 방식은 시스템 리소스를 효율적으로 사용할 수 있게 해줍니다.

인터페이스 언어 설정

한국어 인터페이스 설정 방법:

  1. 시스템 관리 → 플러그인 관리 → 선택 가능 플러그인 → locale 및 "Localization: Chinese (Simplified)" 플러그인 설치
  2. 시스템 관리 → 시스템 설정 → Locale → 기본 언어에 "zh_CN" 입력 및 적용

영어 인터페이스로 되돌리려면:

  1. 시스템 관리 → 시스템 설정 → Locale → 기본 언어에 "zh_US" 입력 및 적용

한국화 후 인터페이스 문제 해결

젠킨스가 한국화된 후 영어와 한국어가 혼재되는 문제가 발생할 수 있습니다. 이는 다음과 같은 원인으로 발생할 수 있습니다:

원인 및 해결 방법

  1. 특정 버전의 브라우저 기본 언어 인식 문제: 안정적인 LTS 버전으로 업그레이드 또는 다운그레이드
  2. 오래된 버전 플러그간 간섭: 한국어 표시 플러그인을 제거하고 재설치, 시스템 설정에서 한국어 Locale 설정 후 재시작
  3. 최신 LTS 버전의 plugins 디렉토리를 이전 버전 젠킨스 디렉토리에 덮어쓰기
  4. "간체중국어"로 설정 후 재시작 시 일부 간체가 표시되지 않음: 언어를 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

작업 분류 및 검색

젠킨스에서는 뷰(태그 페이지)를 통해 작업 유형을 직관적으로 분류하고 검색할 수 있습니다.

  1. 뷰 이름과 뷰 유형 선택 (특별한 요구가 없으면 "목록 뷰" 선택 및 기본 구성 사용)
  2. 필요한 열 정보 추가

URL을 통해 뷰 페이지에 직접 접근할 수 있습니다. 뷰 생성 후 기존 작업을 뷰에 추가하거나 뷰에서 새 작업을 생성할 수 있습니다. 뷰 페이지에서 뷰를 편집하고 삭제할 수 있습니다.

주의: 젠킨스에는 반드시 하나의 작업(job)이 존재해야 하며, 그렇지 않으면 View 페이지 정보를 젠킨스에서 볼 수 없습니다.

작업 이메일 알림

작업界面 → 설정 → 빌드 후 작업 →

  • E-mail Notification: 기본 설정
  • Editable E-mail Notification: 고급 사용자 정의 설정

설정 항목:

  • 수신자 주소 (쉼표로 구분)
  • 이메일 내용 형식
  • 이메일 제목
  • 이메일 기본 내용
  • 빌드 로그 첨부 여부
  • 이메일 발송 트리거 조건

젠킨스 보안 및 권한 관리

프로젝트 권한 제어

Authorize Project 플러그인 사용: https://plugins.jenkins.io/authorize-project/

  1. 시스템 관리 → 전역 보안 설정: 권한 정책 ("프로젝트 매트릭스 권한 정책" 선택), 사용자/그룹 추가 (반드시 관리자 계정을 추가하고 모든 권한 선택)
  2. 작업 설정 인터페이스에서 프로젝트 보안 활성화

SCM 변경으로 인한 자동 빌드 비활성화

Multibranch Pipeline을 사용하는 경우 작업의 설정 페이지에서 다음과 같이 할 수 있습니다:

  1. "Branch Sources"까지 스크롤
  2. "Property strategy"에서 "Named branches get different properties" 선택
  3. "Add exception" 클릭, 브랜치 이름에 "master" 입력
  4. "Add property" 클릭, "Suppress automatic SCM triggering" 선택
  5. 저장

이렇게 하면 master 브랜치의 변경으로 해당 작업의 빌드가 트리거되지 않습니다.

젠킨스 확장 기능

내장 변수

내장 변수 확인: `https:///env-vars.html/`

일부 내장 변수 예시:

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

태그: 젠킨스 CI/CD 자동화 배포 파이프라인

6월 10일 21:21에 게시됨