GitHub CI/CD実践ガイド――持続可能なソフトウェア開発を支えるGitHub Actionsの設計と運用 に記載されていた内容から、「すべてのyamlファイルを書くときに書いておいたほうが良い3項目」をピックアップしてお知らせします。
また念のため、GitHubActionsのワークフローファイルは、.github/workflows/file_name.yml (または.yaml)に設置します。
各ステップのname
GitHubActionsはさまざまなレベルで名前をつけることができます。たとえばファイル冒頭のname: ではワークフロー全体の名称を、jobs: の直下は名前ではないもののジョブIDを定義できます。
ここでいうnameとは、各ステップにおけるnameです。ステップ名を付けておくことで不具合が発生したときにステップ名で参照でき、検証がしやすくなります。
name: Workflow Name # ワークフロー全体の名前
on: push
jobs:
jobs-id-something # ここで定義したIDがジョブIdとなる。
runs-on: ubuntu-latest
steps:
- name: Echo # Echoというステップ名を定義
run: echo "Hello, world!"
デフォルトシェルの設定: defaults
Bashの場合、shellキーの有無で起動オプションが 変わります。起動オプションの違いは次の通りです。 ・省略時: bash -e {0} ・記述時: bash —noprofile —norc -eo pipefail {0} とくに重要なのはpipefailオプションです。 細かい話になりますが、Bashはデフォルトでパイプ処理中のエラーを無視します。しかしこの挙動には少し問題があります。エラーの発生場所から遠く離れた場所で、予期せぬ不具合を起こしやすいのです。そのため、Bashでスクリプトを実装する場合は、 pipefailオプションの有効化が定石です。このオプションを有効化すれば、パイプエラーが拾えるようになります。
GitHub CI/CD実践ガイド――持続可能なソフトウェア開発を支えるGitHub Actionsの設計と運用 (P.80)
上記のように、デフォルトシェルを設定してあげるとエラーのデバッグがやりやすくなるとのこと。
しかし全てのステップでbash指定をするのは面倒です。そこで、 ワークフローのトップレベルへデフォルトシェルとしてbash指定を記述します
name: Workflow Name
on: push
defaults: # 全ステップ共通となるデフォルト設定
run:
shell: bash # デフォルトシェルとしてbashを指定
jobs:
jobs-id-something
runs-on: ubuntu-latest
steps:
- name: Echo
run: echo "Hello, world!"
タイムアウト時間の設定: timeout-minutes
もし意図しないエラーが発生し動作を続けてしまった場合、GitHub Actionsが初期値として規定しているタイムアウト値である6時間まで動作を続けてしまいます。そのため、すべてのyamlファイルにおいてタイムアウト時間を設定しておくことが望ましいです。
リポジトリがprivateの場合、GithubActionsの無料枠における稼働時間は毎月2,000時間となっています。この稼働時間制限に引っかからないようにするためにもタイムアウトは設定しておきましょう。
タイムアウト時間: timeout-minutes はジョブレベル、ステップレベルそれぞれにおいて設定が可能です。また指定する数値は分単位となります。
name: Workflow Name
on: push
defaults:
run:
shell: bash
jobs:
jobs-id-something
runs-on: ubuntu-latest
timeout-minutes: 10 # ジョブレベルでタイムアウトを10分で指定
steps:
- name: Echo
timeout-minutes: 10 # ステップレベルでタイムアウトを10分で指定
run: echo "Hello, world!"
以上です。
GitHub Actionsに関するtipsの記事
他にも、GitHub Actionsに関するtipsとして以下の記事も書いています。
ご活用ください。
この記事の気になる箇所を読み返す:
Category: インフラ・サーバー
Tags: