簡単な背景 - EFSバックエンドを備えたEC2(Linux2)にJenkinsをインストールし、すべてがterraformとシェルスクリプトを使用してロールアウトされました。 Jenkinsデータをバックアップおよび復元するために2つの部分で構成されたソリューションをエクスポートしようとしています。
- 最初の部分では、EC2インスタンスを終了するときにJenkinsデータをS3バケットにバックアップする必要があります。
- 2番目の部分では、インフラストラクチャを展開するときにS3からデータを取得します。
いくつかの事実、
- /var/lib/jenkins は EFS にインストールされており、残りの infa が破損してもその EFS は破損しません。
- ホームラップには不要なため、ELBや自動サイジング機能はありません。
- Jenkins EC2を実行し続け、インフラストラクチャを使用していない場合はインフラストラクチャを停止するのではなく、新しいJenkinsを稼働させる必要があるときにデータを保存したいと思います。
私は2番目の部分を完了でき、データを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ファイルサイズがはるかに小さいことです。サービススクリプトの問題のようです。タイムアウトの問題ですか、それとも別の問題ですか?誰でも解決策が何であるかを提案できますか?