Я использую Github Actions Service Container для запуска экземпляра postgres следующим образом:
name: Pull Request
on:
pull_request:
branches:
- main
- staging
jobs:
test-and-build:
runs-on: ubuntu-latest
services:
redis:
image: redis
ports:
- 6379:6379
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
...
Это работает, но я хотел бы ускорить экземпляр postgres, отключив fsync, как описано здесь: 364p
При локальном запуске postgres в контейнере докеров это значительно ускоряет мой запуск, я надеюсь сделать то же самое в Github Actions, но изо всех сил пытаюсь понять, как я настраиваю образ. Похоже, что передача -c fsync=off в блок опций выше вызывает ошибку:
Exit code 125 returned from process: file name '/usr/bin/docker', arguments 'create --name 04a7236d2e964fccb8a7d95684b3cf05_postgres_0249b3 --label cc4956 --network github_network_3023184aafab424896b4e553d7ad9c38 --network-alias postgres -p 5432:5432 --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 -c fsync=off -e "POSTGRES_PASSWORD=postgres" -e GITHUB_ACTIONS=true -e CI=true postgres'.
Есть идеи?





Похоже, в настоящее время нет способа вводить команды в службы, чтобы вы могли отключить функцию rsync. Действия Github используют команду create, которая не поддерживает атрибут -c.
Но вы можете использовать изображение, отличное от https://github.com/bitnami/bitnami-docker-postgresql, которое позволяет отключить его с помощью переменной env. Вот пример:
name: Postgress test
on:
push:
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: 'bitnami/postgresql:latest'
env:
POSTGRESQL_DATABASE: test_postgress
POSTGRESQL_USERNAME: test_user
POSTGRESQL_PASSWORD: test_password
POSTGRESQL_FSYNC: "off"
options: >-
--health-cmd "pg_isready -d test_postgress -U test_user -p 5432"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- run: echo test
Примечание: этот env не задокументирован в их файле readme, но вы можете найти его в исходном коде. https://github.com/bitnami/bitnami-docker-postgresql/blob/b2b1c1410293fc9a8b58a52b56f2ceabdac59bb1/9.6/debian-10/rootfs/opt/bitnami/scripts/libpostgresql.sh#L433-L445
Рад это слышать 😄
Если вы хотите создать свой собственный файл докеров, вы можете запустить сценарий bash, чтобы внести любые изменения в конфигурацию, которые вам нравятся. Вы также можете выполнять команды sql таким же образом.
Докерфайл:
FROM postgres
COPY docker-entrypoint-initdb.d/ /docker-entrypoint-initdb.d/
RUN ["chmod", "-R", "+x", "/docker-entrypoint-initdb.d/"]
Пример файла в docker-entrypoint-initdb.d/
#!/bin/bash
echo -e '\nfsync = off' >> /var/lib/postgresql/data/postgresql.conf
В вашей докере просто замените image: postgres на build:, указав на этот файл докеры.
Я не уверен, когда это было добавлено, но вы можете использовать POSTGRES_INITDB_ARGS для предоставления любых аргументов, разрешенных для initdb:
services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
POSTGRES_INITDB_ARGS: --no-sync
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
Потрясающий! Это почти половина времени для запуска моих тестов, огромный реквизит, спасибо :)