GitHub ActionsでSQL Serverサービスコンテナの起動を待つ

GitHub ActionsでSQL Serverサービスコンテナ1の起動を待つには、次のようにワークフローの設定を書く。

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      mssql:
        image: mcr.microsoft.com/mssql/server:2022-latest
        env:
          # 以下はmcr.microsoft.com/mssql/server自体の設定
          ACCEPT_EULA: Y
          MSSQL_SA_PASSWORD: ${{ secrets.MSSQL_SA_PASSWORD }}
          # 以下はsqlcmdの設定
          SQLCMDUSER: sa
          SQLCMDPASSWORD: ${{ secrets.MSSQL_SA_PASSWORD }}
          SQLCMDDBNAME: mydatabase
        ports:
          - 1433:1433
        options: >-
          --health-cmd="/opt/mssql-tools/bin/sqlcmd -Q 'SELECT 1'"
          --health-interval=10s

結論としては、イメージに入っているsqlcmdを使い、DBに向けてSELECTできるかどうかでhealthyかどうかを判断する。

envの意味は次のとおり。

名前 意味
ACCEPT_EULA この値があるとライセンス条項に同意したことになる
MSSQL_SA_PASSWORD 管理者(sa)のパスワード。強めのパスワードポリシーがある。必要に応じてsecretsに格納したものを使う
SQLCMDUSER sqlcmdが使うユーザー名。管理者で接続する
SQLCMDPASSWORD sqlcmdが使うパスワード
SQLCMDDBNAME sqlcmdが接続するデータベース

options"Creating PostgreSQL service containers - GitHub Docs"に書いてあるような方法そのまま。

  • sqlcmdは /opt/mssql-tools/bin/sqlcmd に置いてあるものを使い、DBMSが実行してくれる最小限のクエリとしてSELECT 1を発行
  • リトライやインターバルは適宜設定

とする2