EC2가 종료되면 Jenkins 데이터를 자동으로 백업합니다.

EC2가 종료되면 Jenkins 데이터를 자동으로 백업합니다.

간략한 배경 - EFS 백엔드가 있는 EC2(Linux2)에 Jenkins를 설치했으며 모든 것이 terraform 및 셸 스크립트를 사용하여 롤아웃되었습니다. Jenkins 데이터를 백업 및 복원하기 위해 두 부분으로 구성된 솔루션을 내보내려고 합니다.

  • 첫 번째 부분에서는 EC2 인스턴스를 종료할 때 Jenkins 데이터를 S3 버킷에 백업해야 합니다.
  • 두 번째 부분에서는 인프라를 배포할 때 S3에서 데이터를 가져옵니다.

몇 가지 사실,

  • /var/lib/jenkins는 EFS에 설치되어 있으며 나머지 infa가 손상되더라도 해당 EFS는 손상되지 않습니다.
  • 홈 랩에는 필요하지 않기 때문에 ELB 또는 자동 크기 조정 기능이 없습니다.
  • Jenkins EC2를 계속 실행하고 인프라를 사용하지 않을 때 인프라를 중단시키는 것이 아니라 새 Jenkins를 가동해야 할 때 데이터를 보존하고 싶습니다.

나는 두 번째 부분을 완료할 수 있었고 데이터를 Jenkins로 다시 검색할 수 있었습니다. 그러나 첫 번째 부분에서 막혔습니다. EC2에서 아래 쉘 스크립트 "backup_backend.sh"를 수동으로 실행하면 완벽하게 작동합니다.

#!/bin/bash
sudo systemctl stop jenkins
sudo tar -czvf jenkins-backup.tar.gz /var/lib/jenkins
aws s3 cp jenkins-backup.tar.gz s3://XXX-jenkins-backup/jenkins-backup.tar.gz

이제 EC2가 종료될 때 트리거되는 서비스 스크립트를 만들었습니다. 이를 위해 EC2의 /etc 폴더에 다음과 같은 서비스 스크립트가 있습니다.

[Unit]
Description=My Shutdown Service
Before=shutdown.target reboot.target halt.target
Requires=network-online.target network.target
StartLimitIntervalSec=0

[Service]
KillMode=none
ExecStart=/bin/true
ExecStop=/etc/backup_backend.sh
RemainAfterExit=yes
Type=oneshot
TimeoutSec=900

[Install]
WantedBy=multi-user.target

이제 EC2에 Jenkins 및 기타 관련 패키지를 설치하는 또 다른 스크립트가 있습니다. 이를 Terraform 코드의 null_resouce 블록에 보관합니다. 이 스크립트의 일부로 다음 명령을 실행하여 위 서비스를 추가합니다.

sudo cp /tmp/shutdown.service /usr/lib/systemd/system/shutdown.service
sudo systemctl enable shutdown.service
sudo systemctl start shutdown.service

내 문제는 EC2를 다시 시작하거나 종료할 때 서비스가 트리거되지만 "backup_backend.sh" 스크립트를 수동으로 실행할 때보다 zip 파일 크기가 훨씬 작다는 것입니다. 서비스 스크립트 문제인 것 같습니다. 시간 초과 문제인가요 아니면 다른 문제인가요? 누구든지 해결책이 무엇인지 제안할 수 있습니까?

관련 정보