簡體   English   中英

Github Actions 將 Postgres 服務與自定義容器映像連接起來

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM