Миграция Django из действий Github
Здравствуйте, у меня есть база данных в Google Cloud Platform, и я пытаюсь понять, как запустить миграцию django из действий github после развертывания моего приложения на App engine GCP.
Я пробовал использовать cloud_sql_proxy, но не могу заставить его подключиться к моей базе данных. Я бы внес в белый список ip-адреса действий github, но я не совсем уверен, что это за ip-адреса.
Вот конфигурация, которую я сейчас имею:
name: deploy-app-to-gcp
on:
push:
branches: [ main]
paths:
- '**'
jobs:
migrate:
name: Migrate Database
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: get env file
run: echo "${{secrets.ENV_FILE}}" | base64 --decode > ./env_variables.yaml
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Get Cloud SQL Proxy
run: |
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
- name: migrate Database
env:
DATABASE_CONNECTION_ADDRESS: 127.0.0.1
run: |
pip install ruamel.yaml
set -a; eval $(python -c 'from pathlib import Path;from ruamel.yaml import YAML; print( "".join( [f"{k}={v!r}\n" for k, v in YAML().load(Path("env_variables.yaml"))["env_variables"].items() if not k.__eq__("DATABASE_CONNECTION_ADDRESS")] ) )'); set +a
./cloud_sql_proxy -instances=com-cjoshmartin:us-central1:cms-db=tcp:5432 &
python manage.py migrate
exit 0;
Чтобы заставить Cloud SQL Proxy работать с действиями GitHub, вам понадобится некоторая форма учетных данных, присутствующих в среде. Подробности смотрите в README.
Другим вариантом может быть включение Workload Identity Federation и использование действия auth, хотя этот подход требует гораздо больше настроек.
На основе ответа @enocom я смог выполнить нужные мне миграции, используя Cloud SQL Proxy и задав путь к файлу учетных данных.
Вот что я изменил:
Сохранение учетных данных GCloud в json-файл
#...
- name: get env file
run: |
echo "${{secrets.ENV_FILE}}" | base64 --decode > ./env_variables.yaml
echo "${{secrets.GCLOUD_GITHUB_CREDENTIALS}}" | base64 --decode > ./secrets.json
#...
использование облачного sql-прокси с секретным файлом
./cloud_sql_proxy -instances=com-cjoshmartin:us-central1:cms-db=tcp:5432 -credential_file secrets.json &