Golangアプリケーションのリリース
Jenkinsでビルド・デプロイしている人も少なくないかと思います。例えば私の場合はrevel(go言語)のアプリケーションを運用していますが、これまでアプリケーションのバージョンアップ時は次のような手順を行っていました。
- ソースをローカルでビルドしてリポジトリにプッシュ(手動)
- Jenkinsでデプロイ(半自動)
- サーバ上でアプリケーションを再起動(手動)
アプリケーション再起動の自動化
このうち、No.3の手順をJekinsのシェルから実行できるようにしたのでメモ。
PID=/sbin/pidof [対象のアプリケーション実行コマンド *1]
kill -9 $PID
sh run.sh
*1 ps aux
の出力で確認できる
pidof
pidof
はプログラムのプロセスIDを調べるコマンドです。/sbin/pidof
といったようにフルパスで指定しているのは、Jenkinsが乗っているCIサーバからSSH経由で対象サーバ上でコマンドを実行する際に環境変数(PATH)が通常のSSHログイン後のものと異なるからです。このあたりは実際に試して見ると良いかと思います。CIサーバ上からSSH経由でコマンドを実行してみてコマンドがありませんといった旨のエラーが出たときはPATHを疑ってみてください。