일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 오블완
- Spring
- CKA 기출문제
- 공부
- mysql 튜닝
- CloudWatch
- Java
- Elasticsearch
- Pinpoint
- AI
- kotlin coroutine
- Linux
- PETERICA
- Kubernetes
- MySQL
- APM
- kotlin
- kotlin spring
- IntelliJ
- 코틀린 코루틴의 정석
- aws
- kotlin querydsl
- minikube
- 정보처리기사실기 기출문제
- AWS EKS
- 정보처리기사 실기 기출문제
- CKA
- 티스토리챌린지
- 기록으로 실력을 쌓자
- 정보처리기사 실기
- Today
- Total
피터의 개발이야기
[Jenkins] Jenkins 백업 복원 방법 본문
ㅁ 개요
ㅇ Jenkins에서 작업 Item, 작업 이력등을 백업하고 복원하는 방법을 설명한다.
ㅇ Jenkins 버젼은 2.361.1이다.
ㅁ Jenkins 백업의 방법들
Jenkins 백업의 방법은 간단하게 jenkins 설치 경로 내 특정 디렉토리를 백업하여 복원하는 방법과 별도의 플로그인을 설치하여 백업 및 복원하는 방법이 있다.
ㅁ Jobs 디렉토리 백업
젠킨스에서 생성한 item들의 구성정보들은 {젠킨스홈경로}/jobs 디렉토리에 저장되어 있다.
ㅇ 이전 (Helm으로 jenkins 설치하기) 글에 생성한 petericaProject의 구성정보가 위의 그림처럼 /var/jenkins_home/jobs/petericaProject 위치에 저장되어있다.
ㅇ jobs 디렉토리를 주기적으로 백업작업을 수행한다.
ㅇ 백업작업 수행 방법은 수기로 압축하거나, jenkins job, cron job등으로 정기적으로 수행할 수 있다.
ㅇ helm으로 설치된 jenkins의 value 내용을 보면 backup에 대한 흥미로운 부분이 있어서 아래에서 정리를 해 보았다.
ㅇ 복원은 기존 디렉토리를 백업본으로 대체한 후에 Jenkins 관리에서 Reload Configuration from Disk를 수행하면 된다.
ㅁ 디렉토리 백업의 한계성
디렉토리 백업은 item의 구성정보만들 백업 복원하는 과정이다. jenkins 전체의 플러그인, credential 등과 같은 젠킨스 환경 설정 구성까지 백업되지는 않는다.
ㅁ helm jenkins 설치 시 backup 옵션, job을 통한 AWS S3 저장방법
backup:
# Backup must use RBAC
# So by enabling backup you are enabling RBAC specific for backup
enabled: false
# Used for label app.kubernetes.io/component
componentName: "backup"
# Schedule to run jobs. Must be in cron time format
# Ref: https://crontab.guru/
schedule: "0 2 * * *"
labels: {}
serviceAccount:
create: true
name:
annotations: {}
# Example for authorization to AWS S3 using kube2iam or IRSA
# Can also be done using environment variables
# iam.amazonaws.com/role: "jenkins"
# "eks.amazonaws.com/role-arn": "arn:aws:iam::123456789012:role/jenkins-backup"
# Set this to terminate the job that is running/failing continously and set the job status to "Failed"
activeDeadlineSeconds: ""
image:
repository: "maorfr/kube-tasks"
tag: "0.2.0"
imagePullSecretName:
# Additional arguments for kube-tasks
# Ref: https://github.com/maorfr/kube-tasks#simple-backup
extraArgs: []
# Add existingSecret for AWS credentials
existingSecret: {}
## Example for using an existing secret
# jenkinsaws:
## Use this key for AWS access key ID
# awsaccesskey: jenkins_aws_access_key
## Use this key for AWS secret access key
# awssecretkey: jenkins_aws_secret_key
# Add additional environment variables
# jenkinsgcp:
## Use this key for GCP credentials
# gcpcredentials: credentials.json
env: []
# Example environment variable required for AWS credentials chain
# - name: "AWS_REGION"
# value: "us-east-1"
resources:
requests:
memory: 1Gi
cpu: 1
limits:
memory: 1Gi
cpu: 1
# Destination to store the backup artifacts
# Supported cloud storage services: AWS S3, Minio S3, Azure Blob Storage, Google Cloud Storage
# Additional support can added. Visit this repository for details
# Ref: https://github.com/maorfr/skbn
destination: "s3://jenkins-data/backup"
# By enabling only the jenkins_home/jobs folder gets backed up, not the whole jenkins instance
onlyJobs: false
# Enable backup pod security context (must be `true` if runAsUser or fsGroup are set)
usePodSecurityContext: true
# When setting runAsUser to a different value than 0 also set fsGroup to the same value:
runAsUser: 1000
fsGroup: 1000
securityContextCapabilities: {}
# drop:
# - NET_RAW
ㅇ 위는 value.yaml 의 backup에 해당한 부분을 발췌하였다.
ㅇ kubernetes job을 수행하여 jobs 폴더를 주기적으로 AWS s3://jenkins-data/backup로 저장하도록 되어 있다.
ㅇ 필요한 정보만 채워 넣으면 바로 실행이 가능한 부분이라 다음에 필요하면 시도해 보려고 한다.
ㅇ 우선 개발이나 운영은 EFS를 사용하고 있어 그곳에 백업본을 저장하면 되기에 S3가 필요한 상태는 아니다.
ㅁ thinBackup 플러그인을 통한 백업복구 방법
ㅇ jenkins 관리 > 플러그인 메니저에서 ThinBackup을 설치한다.
ㅇ Jenkins 관리 > Thin Backup 이동하였다.
ㅇ Jenkins 관리 > Thin Backup > Settings으로 이동하여 구체적인 백업 옵션을 구성해야한다.
ㅁ 주요 옵션내용
옵션 | 설명 |
Backup Directory | 백업내용이 기록될 directory (해당 위치에 jenkins 계정 write permission 필수) |
Backup schedule for full backups | 전체 백업을 수행할 스케줄 설정 (cron문법에 알맞게 입력) 예) H 0 * * * (매일 00시에 풀 백업 수행) |
Backup schedule for differential backups | 증분 백업을 수행할 스케줄 설정 (cron문법에 알맞게 입력) 예) H 6,12 * * * (매일 6시, 12시에 증분 백업 수행) |
Max number of backup sets | 유지해야될 백업본 최대 갯수 |
Wait until Jenkins/Hudson is idle to perform a backup | 백업을 수행하기 위해 수행중이던 job이 끝날때까지 대기 |
Force Jenkins to quiet mode after specified minutes | 수행중인 job을 지정된 시간동안 기다려도 안 끝나면 해당 작업 강제종료 |
ㅇ 자세한 설명은 Thin Backup Plugin GIT에서 확인할 수 있다.
ㅁ Thin Backup > Backup Now 실행
# 백업 생성 폴더
jenkins@jenkins-0:/tmp/jobBackup/FULL-2022-10-01_13-33$ pwd
/tmp/jobBackup/FULL-2022-10-01_13-33
# 백업 내용 확인
jenkins@jenkins-0:/tmp/jobBackup/FULL-2022-10-01_13-33$ ls
config.xml installedPlugins.xml jenkins.telemetry.Correlator.xml org.jenkinsci.plugins.workflow.flow.FlowExecutionList.xml
hudson.model.UpdateCenter.xml jenkins.model.JenkinsLocationConfiguration.xml jobs thinBackup.xml
hudson.plugins.git.GitTool.xml jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml nodeMonitors.xml users
ㅇ 백업을 실행한 결과 FULL-2022-10-01_13_33 폴더가 생성되었고, item 구성 정보인 jobs 뿐만 아니라 다른 젠킨스 환경 구성 정보도 함께 백업이 되었다.
ㅁ 복원하기
ㅇ 복원 페이지에서는 생성된 백업 목록을 확인할 수 있었다.
ㅇ 플러그인 재설치 여부와 신규 백업본을 만들지 여부를 선택할 수 있다.
ㅁ 함께 보면 좋은 사이트
ㅇ Jenkins Thin Backup Plugin
'DevOps > Jenkins' 카테고리의 다른 글
[jenkins] jenkins 빌드 후 JAR 파일 복사 (1) | 2023.10.17 |
---|---|
[Jenkins] jenkins 로컬시간 변경하기 (0) | 2022.10.24 |
[Jenkins] Pipeline Stage View 세팅 (0) | 2022.10.01 |
[Jenkins] Update required: Pipeline: Stage Tags Metadata (0) | 2022.07.19 |
[Jenkins] Failed to load: Amazon ECR plugin 해결 (0) | 2022.06.22 |