概要
テスト時や、開発中のプログラムの実行が手動で8ステップとかあるときに、どうやって自動化するかの方法について
結論
うまくいくケースのみ考えて、スクリプトにしてしまう。
3ステップにするとこんなかんじ
ステップ1、全体を実行するスクリプトをつくってしまう。
以下のようなbashスクリプトを用意する
今回は ./testscript.sh
とする
set -eux
をつけておく。
-
e
エラーがおきたら止まるようにする -
u
未定義変数があったら止まるようにする -
x
実行したコマンドを出力する
# !/bin/bash
set -eu
echo "Step 1 start"
date
# 実行したいコマンド、今は手で入力しているもの
# cwltool step1.cwl
# nextflow step1.nf
echo "Step 1 end"
date
# n step分
echo "ALL STEP IS OK!!"
ステップ2、定期的に実行するようにする
次に自分のcronの設定をし、
定期的に正しく実行できることを確認する。
実行されるディレクトリへ、明示的に cd
しておく。
ログの回収するファイル名を、日付と時間にしておくと、
テストが失敗したときに、以前の結果と比べられるので、よかった。
ステップ3、通知をするようにする。
うまくいったか、いかなかったかを、Slack へ通知する
通知は、毎日おこなったほうがよいと考えている
成功だけとか、失敗だけとかにしておくと、通知システムの故障時など、通知がこないこと自体にきづかない。
-
./testscript.sh
が、自動実行スクリプト本体 -
./notify.sh
は、Slackへ通知をするスクリプトとする。- この部分は、
curl
などで直接実行しても良い。
- この部分は、
# !/bin/bash
RET=./testscript.sh
if [ ${RET} -ne 0 ]; then
# エラー時の処理
# slackとか使ってなかったら、echo "ERROR" でもよい
./notify.sh ERROR
else
# 成功時の処理
# slackとか使ってなかったら、echo "SUCCESS" でもよい
./notify.sh SUCCESS
fi
コツ
必要なものはそろっているとして、スクリプトを書き始めてしまって良い。
準備する部分を書き始めると大変なので、それはあとで書けば良いと思う。
とにかく、全部実行できるものがひとつできあがると、いろいろ追加しやすかったという経験があります。