GitHub Actionsでdocker-composeを使う
GitHub Actionsとdocker-compose
GitHub Actionsではdockerhubのイメージを使ったワークフローが組めるが、docker-composeも使える。ローカル開発時はdocker-composeで制御することが多いので、そのまま活用できるのはシンプルで強力。
ワークフローの書き方
1 | # This is a basic workflow to help you get started with Actions |
環境変数とシークレット
docker-composeのパラメーター定義
Dockerに渡すパラメーターは環境変数としてdocker-compose.yml
で次の定義をする。
1 | environment: |
ローカル開発中のパラメーター
docker-compose.yml
はGitリポジトリに含めるため、公開すべきでないパラメーターは.env
ファイルに記述する。.env
ファイルは.gitignore
で管理対象外として定義しておく。
1 | ENVENV1=xxxxxxxxxxxxxx |
GitHub Actionsでのパラメーター
GitHub Actionsでは.env
のかわりに、リポジトリの設定でSecretsを使用して定義する。
たとえばSecretsに定義したパラメーターをGitHub Actionsで参照するのは以下の定義になる。
1 | env: |
ワークフローでdocker-composeを使う
docker-composeの起動方法
そのままdocker-composeコマンドが使用できる。
docker-compose内で定義されたDBなどの依存するサービスはdocker-compose up -d
で起動し、docker-compose exec -T app bash xxxxxx.sh
でメインのコードを実行する。
docker-compose up -d
はサービスを起動して、コマンド自体は終了docker-compose exec
でバックグラウンド起動したサービスにAttachし目的のコマンドを実行
the input device is not a TTY
docker-compose exec -T app bash xxxxxxxx.sh
の実行でエラーになった。
1 | the input device is not a TTY |
解決方法は2つある
- 環境変数
COMPOSE_INTERACTIVE_NO_CLI=1
を使用する docker-compose exec -T
で起動する