EC2 终止时自动备份 Jenkins 数据

EC2 终止时自动备份 Jenkins 数据

简要背景 - 我将 Jenkins 安装在带有 EFS 后端的 EC2 (Linux2) 中 - 并且所有内容都是使用 terraform 和 shell 脚本推出的。我正在尝试导出一个由两部分组成的解决方案来备份和恢复 Jenkins 数据

  • 在第一部分中,当我终止 EC2 实例时,我需要将 Jenkins 数据备份到 S3 存储桶中
  • 在第二部分中,当我部署基础设施时从 S3 获取数据。

很少的事实,

  • /var/lib/jenkins 已安装到 EFS,即使 infa 的其余部分被破坏,我也不会破坏该 EFS。
  • 我没有 ELB 或自动缩放功能,因为我不需要将其用于家庭实验室
  • 我不想在不使用 Jenkins EC2 时保持其运行并破坏基础设施,而是在需要启动新 Jenkins 时保留数据。

我能够完成第二部分,并能够将数据检索回 Jenkins。然而,我陷入了第一部分。当我从 EC2 中手动运行下面的 shell 脚本“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 时,该服务确实会被触发,但 zip 文件大小比我手动运行“backup_backend.sh”脚本时小很多。我猜这是服务脚本的问题。是超时问题还是其他什么问题?有人能建议解决方案应该是什么吗?

相关内容