シェルスクリプトとは何か? ファイル内でコマンドを自動化する
シェルスクリプトは、順に実行される一連のシェルコマンドを含むテキストファイルで、各コマンドを手で入力する代わりにタスクを自動化するために使われます。
シェルスクリプトは、一連のコマンドを繰り返し可能なプログラムに変えます。build と test に 10 個のコマンドを入力する代わりに、それらをファイルに保存して一度実行します。CI パイプラインは、本質的にはシェルスクリプトです。各ステップは runner が実行する小さなスクリプトです。
シェルスクリプトが含むもの
それはプレーンテキストです。コマンド、変数、条件分岐、ループがシェルによって上から下へ実行されます。最初の行は通常、インタープリタを指定する shebang であり、ファイルは直接実行できるよう実行可能にされます。
スクリプトを実行する
シェルに渡して実行する (bash deploy.sh) か、実行可能で shebang があれば直接呼び出す (./deploy.sh) ことができます。シェルは各行を read し、展開し、順に実行します。
スクリプトが重要な理由
- 繰り返し可能性: 同じステップが毎回同じように実行される。
- バージョン管理: スクリプトはコードと並んで repo に存在する。
- 組み合わせ可能性: 小さなスクリプトが結合してより大きな workflow になる。
スクリプトを安全にする
素朴なスクリプトはコマンドが失敗しても続行するので、エラーを隠す可能性があります。先頭近くに set -euo pipefail を追加すると、スクリプトは最初のエラー、未定義変数、pipeline 内の失敗で停止します。
CI におけるシェルスクリプト
CI ステップは短いシェルスクリプトです。それらを小さく、厳格に、repo にチェックインしておくと、誰でもパイプラインが何をするかを read でき、失敗を再現するためにローカルで実行できます。
managed runner 上のスクリプト
Latchkey はステップスクリプトをクリーンで一貫したシェル環境で実行するので、一度 pass したスクリプトは pass し続ける傾向があります。一時的なインフラの不具合は retry されるので、本物のスクリプトのバグが flakiness の陰に隠れるのではなく際立ちます。
重要なポイント
- シェルスクリプトは、タスクを自動化するために順に実行されるコマンドのファイルです。
- shebang 行と実行ビットにより、スクリプトを直接実行できます。
- CI ステップはシェルスクリプトです。
set -euo pipefailで厳格にすると誠実に保てます。