経緯
今まで通ってたGHAのテストが突然落ちるようになりました。
ローカルでは問題なく通るのに、GHAのワークフローだと落ちる。
Actionsタブからログを確認すると、どうやら最大接続数が足りなくなり、論理データベースを立ち上げるインテグレーションテストが失敗しているようでした。
この記事では、GHAのワークフローでPostgreSQLの最大接続数(max_connection
)を設定する方法を記します。
解決方法
前提
もともとのPostgresの設定は以下です。
# ...
jobs:
test:
name: Test
runs-on: ubuntu-latest
services:
postgres:
image:
postgres: 12
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres
ports:
- 5432:5432
steps:
# ...
steps
を追記
DockerコンテナにSSH接続して、PostgresSQLの設定ファイルを編集します。
# ...
jobs:
test:
name: Test
runs-on: ubuntu-latest
services:
postgres:
image: postgres: 12
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres
# [追加]
options: >-
--name my_postgres
ports:
- 5432:5432
# [追加]
steps:
- name: Increase max connections
- run: |
docker exec -i my_postgres_container bash << EOF
sed -i -e 's/max_connections = 100/max_connections = 1000/' /var/lib/postgresql/data/postgresql.conf
EOF
# ...
最大接続数はデフォルトでは100に設定されていますが設定ファイルを直接書き換えて1000に増やしています。
更に変更を反映させるために、コンテナを再起動させます。
steps:
- name: Increase max connections
- run: |
docker exec -i my_postgres_container bash << EOF
sed -i -e 's/max_connections = 100/max_connections = 1000/' /var/lib/postgresql/data/postgresql.conf
EOF
# [追加]
docker restart --time 0 my_postgres
sleep 5
docker restart
でコンテナを一度をkillする際、デフォルトでは10秒待つ設定になっているので --time 0
を指定しています。
sleep 5
はコンテナが起動するのを待つためです。
おわりに
これで最大接続数を増加させる設定は完了です。
しかし、これが最適なやり方なのかはわかりません。もっとスマートなやり方があったら教えてほしいです🙁