バイト先でGitLabをGCP上にホスティングしているのだが、GitLabのアップデートが暫くされていなかったので、やった。
ついでにZero downtime updates(GitLabインスタンスをオフラインにすることなくGitLabを新しいバージョンにアップグレード出来る方法)に対応したシェルスクリプトを書いた。
とりあえずLinuxインスタンスにSSH接続して以下を実行。
$ sudo apt-get update && sudo apt-get install gitlab-ee
したがうまくいかなかった。
2020/04/06にGitLab OmnibusのGPG Keyが更新されていたようなので新しい鍵を取得。
$ curl https://packages.gitlab.com/gpg.key -o /tmp/omnibus_gitlab_gpg.key
$ sudo apt-key add /tmp/omnibus_gitlab_gpg.key
再び $ sudo apt-get install gitlab-ee
を実行したが No space left on device
と言われたので以下を実行。
$ sudo apt-get autoremove
以下のシェルスクリプトを gitlab-update.sh
に書いた。
と言っても殆どこれを参考にしている↓ 【2019年版】GitLab CE/EEのゼロダウンタイムアップグレード
#!/bin/bash
export LANG=en_US.UTF-8
SLACK_WEBHOOK_API_URL=xxxxx
# check update
sudo apt update
# get versions
GITLAB_VERSIONS=$(apt-cache policy gitlab-ee | grep -1 Installed | sed -r 's/(^ )//' | grep -v "gitlab-ee:")
INSTALLED_VERSION=$(echo $GITLAB_VERSIONS | sed -r 's/Installed: (.*?) Candidate: .*/\1/g')
CANDIDATE_VERSION=$(echo $GITLAB_VERSIONS | sed -r 's/Installed: .* Candidate: (.*?)/\1/g')
# check if you can upgrade
if [ "$INSTALLED_VERSION" = "$CANDIDATE_VERSION" ];
then
echo "Installed: $INSTALLED_VERSION is equal Candidate: $CANDIDATE_VERSION"
echo "Exit"
exit 0;
fi
echo "Installed: $INSTALLED_VERSION"
echo "Candidate: $CANDIDATE_VERSION"
echo "Update version"
sudo apt-get install gitlab-ee
sudo apt-mark unhold gitlab-ee
sudo SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure
sudo gitlab-rake db:migrate
sudo gitlab-ctl hup puma
sudo gitlab-ctl restart sidekiq
MSG="{
\"blocks\": [
{
\"type\": \"section\",
\"text\": {
\"type\": \"mrkdwn\",
\"text\": \"*Update GitLab version* :tada: \"
}
},
{
\"type\": \"section\",
\"text\": {
\"type\": \"plain_text\",
\"text\": \"${INSTALLED_VERSION} → ${CANDIDATE_VERSION}\"
}
}
]
}"
curl -X POST -H 'Content-type: application/json' --data "$MSG" $SLACK_WEBHOOK_API_URL
sudo apt-mark hold gitlab-ee
更新通知はSlackで受け取るようにした。
以下のコマンドを実行して完了。
$ chmod +x gitlab-update.sh
次回以降のアップデートは以下を実行することで完了する。
$ ./gitlab-update.sh