Extended Attributesが付加されたファイルをCodeDeployで実行しようとするとスキップされる。
Macで書いたシェルスクリプトがスキップされたらパーミッションに"@"が付いていないかMac上で確認しましょう。
AWSの自動デプロイサービスであるCodeDeployにはLifeCycle Hookという機能がありまして、
用意したシェルスクリプトを特定のタイミングで実行させることができます。
そのシェルスクリプトを作成、動作確認、修正ということを繰り返していますと
あるとき3つ用意したシェルスクリプトの内、1つだけが実行されなくなりました。
関係する箇所を調査しまして、以下のことを確認できました。
スキップされたシェルスクリプトファイルにだけ見慣れないパーミッションが付加されていました。
% ls -la
-rw-r--r--@ ... filename.sh
今回スキップされたシェルスクリプトが上記のパーミッション設定となっていました。
一番右端のアットマークは、MacにおいてExtended Attributesという拡張属性であり
これが付加されているファイルはバイナリとして扱われるそうです。
Macでシェルスクリプトを作成し、何度か実行を確認していたのですが修正を繰り返している間に
どこかのタイミングでExtended Attributesを付加してしまったようです。
対策として、問題のシェルスクリプトファイルを作成し直しExtended Attributesが付加されていない状態にすることで、CodeDeployで意図した通りに動かせるようになりました。
xattrコマンドを使用することで付加されたExtended Attributesを除外することも可能ですが、gitに上げるに当たって綺麗にしておきたいと思いファイルを作成し直しで対応することにしました。
今回の問題はLinuxでパーミッションを確認してもアットマークは表示されない、という点が少し厄介な問題でした。
Macで作成したファイルが意図しない動きをしたときはパーミッションも確認してみましょう。
そこにアットマークが付いているかもしれません。