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