관리 메뉴

피터의 개발이야기

[Jenkins] Jenkins 백업 복원 방법 본문

DevOps/Jenkins

[Jenkins] Jenkins 백업 복원 방법

기록하는 백앤드개발자 2022. 10. 1. 22:43
반응형

 

ㅁ 개요

 ㅇ 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 뿐만 아니라 다른 젠킨스 환경 구성 정보도 함께 백업이 되었다.

 

 

ㅁ 복원하기

 ㅇ 복원 페이지에서는 생성된 백업 목록을 확인할 수 있었다.

 ㅇ 플러그인 재설치 여부와 신규 백업본을 만들지 여부를 선택할 수 있다.

 

 

ㅁ 함께 보면 좋은 사이트

 

ThinBackup

Backups the most important global and job specific configuration files.

plugins.jenkins.io

 ㅇ Jenkins Thin Backup Plugin

반응형
Comments