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。