Jenkins 인스턴스 백업 및 복원 방법

Jenkins 백업 및 복원 방법을 마스터하여 CI/CD 파이프라인을 보호하세요. 이 가이드는 가장 신뢰할 수 있는 백업 전략인 파일 시스템 방식에 대한 전문가 수준의 단계별 튜토리얼을 제공합니다. `$JENKINS_HOME` 디렉터리 내에서 구성, 작업(jobs), 보안 키 등 중요한 데이터를 식별하고 보관하는 방법과 대규모 빌드 아티팩트를 제외하는 방법을 배웁니다. 또한, 중요한 파일 권한 수정 사항을 포함한 인스턴스 복원 필수 단계를 다루며, 이를 통해 Jenkins 환경을 위한 빠르고 원활한 재해 복구를 보장합니다.

38 조회수

Jenkins 인스턴스 백업 및 복원 방법

Jenkins는 CI/CD(지속적 통합 및 지속적 배포)를 위한 중앙 자동화 허브 역할을 합니다. 작업 정의, 사용자 자격 증명, 플러그인 설정 및 빌드 기록을 포함한 구성 데이터는 상당한 조직적 투자를 나타냅니다. 하드웨어 장애, 구성 오류 또는 마이그레이션으로 인해 이 데이터를 분실하면 개발 파이프라인이 완전히 중단될 수 있습니다.

이 종합 가이드는 강력한 Jenkins 백업 전략의 필수 구성 요소를 자세히 설명하며, 높은 신뢰성을 갖춘 파일 시스템 스냅샷 방법을 중점적으로 다룹니다. 비즈니스 연속성과 마음의 평화를 보장하기 위해 인스턴스를 안전하게 백업하는 단계별 지침과 원활하게 복원하는 해당 절차를 제공합니다.

핵심 이해하기: $JENKINS_HOME 디렉터리

모든 Jenkins 인스턴스는 $JENKINS_HOME이라고 하는 단일 루트 디렉터리에 의존합니다. 이 디렉터리에는 모든 구성 파일, 플러그인, 로그 및 작업 데이터가 포함됩니다. Jenkins를 백업한다는 것은 근본적으로 이 디렉터리 내용을 백업하는 것을 의미합니다.

설치 방법(예: Linux 패키지, Docker 컨테이너)에 따라 $JENKINS_HOME의 위치는 일반적으로 다릅니다.

  • Linux (패키지 설치): /var/lib/jenkins
  • Docker: 종종 볼륨에 마운트됨, 예: /var/jenkins_home
  • 독립 실행형 JAR: 환경 변수를 통해 지정되지 않은 경우 Jenkins 프로세스가 시작된 디렉터리.

중요한 데이터 구성 요소 식별

전체 $JENKINS_HOME 디렉터리를 백업하는 것이 가장 간단한 접근 방식이지만, 빌드 기록 및 작업 공간 데이터가 포함된 경우 매우 큰 아카이브가 될 수 있습니다. 빠르고 효율적인 재해 복구 백업을 위해서는 다음 디렉터리와 파일이 캡처되었는지 확인해야 합니다.

구성 요소 $JENKINS_HOME 내 경로 목적
전역 구성 config.xml Jenkins 루트 인스턴스의 기본 구성 파일.
작업 정의 jobs/ 구성된 모든 작업에 대한 하위 디렉터리를 포함하며, 각 작업에는 자체 config.xml이 있음.
사용자 및 자격 증명 users/credentials.xml 사용자 계정, 보안 영역 설정 및 저장된 보안 암호.
보안 키 secrets/ 저장된 자격 증명과 같은 민감한 데이터를 해독하는 데 필수적인 암호화 키.
플러그인 목록 plugins/ 설치된 모든 플러그인의 .hpi 파일 포함.
노드 정의 nodes/ 연결된 모든 빌드 에이전트의 구성 (정의된 경우).

방법 1: 파일 시스템 백업 (권장)

Jenkins를 백업하는 가장 안정적인 방법은 서비스를 잠시 중지하는 동안 필요한 파일의 일관되고 압축된 아카이브를 만드는 것입니다.

1단계: Jenkins 서비스 중지

백업 프로세스 중 데이터 일관성을 보장하고 부분 파일 쓰기를 방지하려면 Jenkins 프로세스를 중지해야 합니다. 서비스를 중지하지 않으면 불완전하거나 손상된 백업이 발생할 위험이 있습니다.

# systemd를 사용하는 시스템의 경우 (대부분의 최신 Linux 배포판)
sudo systemctl stop jenkins

# 또는 service 명령을 사용하는 시스템의 경우
sudo service jenkins stop

2단계: 백업 아카이브 생성

$JENKINS_HOME의 상위 디렉터리로 이동하여 tar를 사용하여 압축 아카이브를 만듭니다. 공간과 시간을 절약하기 위해 대용량 빌드 아티팩트는 제외하는 것이 좋습니다.

$JENKINS_HOME/var/lib/jenkins라고 가정:

JENKINS_HOME="/var/lib/jenkins"
BACKUP_TARGET="/mnt/backups/jenkins"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
ARCHIVE_NAME="jenkins_backup_${TIMESTAMP}.tar.gz"

# 대상 디렉터리가 없는 경우 생성
mkdir -p $BACKUP_TARGET

# 빌드 기록 및 작업 공간 제외
sudo tar -czvf $BACKUP_TARGET/$ARCHIVE_NAME \n    --exclude="${JENKINS_HOME}/workspace" \n    --exclude="${JENKINS_HOME}/caches" \n    --exclude="${JENKINS_HOME}/jobs/*/builds" \n    $JENKINS_HOME

팁: 빌드 기록 포함

빌드 기록(jobs/*/builds) 보존이 중요한 경우 해당 --exclude 플래그를 제거할 수 있습니다. 그러나 아카이브 크기가 수백 기가바이트에 달할 수 있음에 대비해야 합니다.

3단계: 확인 및 외부 저장

아카이브가 생성되면 무결성을 테스트하고 사이트 전체 장애로부터 보호하기 위해 즉시 외부의 지리적으로 분리된 저장 위치(예: S3 버킷, 네트워크 드라이브)로 전송합니다.

4단계: Jenkins 다시 시작

sudo systemctl start jenkins

방법 2: Jenkins 백업 플러그인 활용 (부분 솔루션)

ThinBackup 또는 Backup Plugin과 같은 플러그인이 있지만, 이들은 종종 구성 파일(config.xml)만 캡처하며 대용량 파일을 처리하거나 모든 필수 보안 요소를 강력하게 처리하지 못할 수 있습니다. 이들은 일반적으로 작업 구성만 백업하는 데 적합하며 전체적이고 안전한 재해 복구 전략으로 의존해서는 안 됩니다.

Jenkins 인스턴스 복원

복원은 백업된 데이터를 대상 머신의 $JENKINS_HOME 디렉터리로 복사하고 서비스를 시작하기 전에 파일 권한이 올바른지 확인하는 작업을 포함합니다.

1단계: 대상 환경 준비

대상 시스템(또는 복구된 시스템)에 Jenkins가 설치되어 있는지 확인하되, 서비스는 중지된 상태를 유지합니다.

sudo systemctl stop jenkins

2단계: 기존 Jenkins 데이터 지우기 (선택 사항이지만 권장)

Jenkins가 이전에 호스팅된 머신에 복원하는 경우, 환경을 깨끗하게 하기 위해 기존 $JENKINS_HOME 내용을 지웁니다.

# 'rm -rf' 명령어 사용 시 주의하십시오!
sudo rm -rf /var/lib/jenkins/*

3단계: 백업 아카이브 추출

압축된 아카이브(jenkins_backup_latest.tar.gz)를 대상 머신으로 복사하고 $JENKINS_HOME 디렉터리로 추출합니다. -C 플래그는 추출 대상 디렉터리를 지정합니다.

# 아카이브가 /tmp에 있고 JENKINS_HOME이 /var/lib/jenkins라고 가정
sudo tar -xzvf /tmp/jenkins_backup_latest.tar.gz -C /var/lib/

# 참고: tar 명령이 아카이브에 상위 디렉터리를 포함한 경우 경로를 조정하십시오.
# 결과는 /var/lib/jenkins의 내용을 아카이브 내용으로 대체해야 합니다.

4단계: 권한 확인 및 수정

이것은 복원 후 가장 중요한 단계입니다. 파일 소유권이 잘못되면 Jenkins가 시작되지 않거나 안전하게 작동하지 않습니다. Jenkins 서비스가 실행되는 사용자 및 그룹(종종 jenkins:jenkins)에 대해 재귀적으로 소유권을 설정해야 합니다.

JENKINS_HOME="/var/lib/jenkins"
JENKINS_USER="jenkins"
JENKINS_GROUP="jenkins"

sudo chown -R $JENKINS_USER:$JENKINS_GROUP $JENKINS_HOME
sudo chmod -R 755 $JENKINS_HOME

5단계: Jenkins 시작 및 확인

서비스를 시작하고 로그를 모니터링하여 성공적인 시작을 확인합니다.

sudo systemctl start jenkins

# 시작 로그 모니터링
sudo tail -f /var/log/jenkins/jenkins.log

성공적으로 시작되면 모든 작업, 사용자 및 설치된 플러그인이 존재하고 올바르게 작동하는지 확인하십시오.

자동화된 백업을 위한 모범 사례

수동 백업을 넘어 시스템 도구와 외부 구성 관리를 사용하여 자동화를 구현하십시오.

1. Cron 작업 활용

Method 1의 1단계 및 2단계인 백업 스크립트를 cron 또는 유사한 스케줄러를 사용하여 매일 또는 매일 밤 실행되도록 예약합니다. cron 작업이 Jenkins 서비스를 중지 및 시작하고 $JENKINS_HOME 디렉터리를 읽고 쓸 수 있는 적절한 권한을 가진 사용자로 실행되는지 확인하십시오.

2. 코드로 구성 (CasC)

Jenkins Configuration as Code (CasC) 도입을 고려하십시오. CasC는 선언적 YAML 파일을 사용하여 Jenkins 설정, 작업 및 플러그인을 정의합니다. 이 YAML 파일을 별도의 소스 제어 저장소(Git 등)에 저장하면 구성이 이식 가능해지고 버전 관리가 되어 핵심 백업 요구 사항이 대폭 단순화됩니다.

경고: 자격 증명 보안

인스턴스를 복원할 때 secrets/ 디렉터리가 존재하고 올바른지 확인하십시오. Jenkins가 자격 증명 암호화에 사용된 키(API 키 또는 암호 등)를 찾을 수 없으면 해당 자격 증명은 사용할 수 없게 되며 수동으로 다시 입력해야 합니다.