[英]GitHub Actions: How to connect to Postgres in GithHub Actions
[英]Github Actions to Connect Postgres service with custom container image
在我的 Django 項目中,我有一個用於運行測試的 CI 工作流,它需要 Postgres 服務。 最近一個新的應用程序引入了更重的包,如 pandas、matplotlib、pytorch 等,這將run-tests
工作時間從 2 分鍾增加到 12 分鍾,這是荒謬的。 同樣在我的項目中,我有一個帶有 Python 的基礎 Docker 映像,這些包更重以加快映像的構建。 所以我想在運行這些步驟時在工作流中使用相同的圖像,因為包已經被加載了。
不幸的是,一切順利,直到到達實際運行測試的步驟,因為似乎 postgres 服務未與容器連接,我收到以下錯誤:
psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
這是我現在的工作流程。 關於我做錯了什么的任何想法?
name: server-ci
on:
pull_request:
types: [opened]
env:
DJANGO_SETTINGS_MODULE: settings_test
jobs:
run-tests:
name: Run tests
runs-on: ubuntu-latest
container:
image: myimage/django-server:base
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 8000:8000
services:
postgres:
image: postgres
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: admin
POSTGRES_DB: mydb
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
env:
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_PASSWORD: admin
POSTGRES_USER: postgres
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Cache dependencies
uses: actions/cache@v2
with:
path: /opt/venv
key: /opt/venv-${{ hashFiles('**/requirements.txt') }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
if: steps.cache.outputs.cache-hit != 'true'
- name: Run tests
run: |
./manage.py test --parallel --verbosity=2
事實證明,工作流現在在自己的容器中運行,緊挨着 postgres 容器。 因此,映射到運行器 VM 的端口不再執行任何操作(因為它會影響主機,而不是其上的 Docker 容器)。
作業和服務容器連接到同一個 Docker 網絡,所以我需要做的就是將POSTGRES_HOST
更改為postgres
(服務容器的名稱),剩下的應該由 Docker 的 DNS 完成。
學分: https : //github.community/t/connect-postgres-service-with-custom-container-image/189994/2? u =everspader
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.