【问题标题】:Github Actions to Connect Postgres service with custom container image将 Postgres 服务与自定义容器映像连接的 Github 操作
【发布时间】:2021-09-22 12:18:27
【问题描述】:

在我的 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

【问题讨论】:

    标签: postgresql continuous-integration github-actions


    【解决方案1】:

    事实证明,工作流现在在它自己的容器中运行,在 postgres 容器旁边。所以到 runner VM 的端口映射不再做任何事情(因为它会影响主机,而不是主机上的 Docker 容器)。

    作业和服务容器连接到同一个 Docker 网络,所以我只需将 POSTGRES_HOST 更改为 postgres(服务容器的名称),剩下的事情应该由 Docker 的 DNS 完成。

    致谢:https://github.community/t/connect-postgres-service-with-custom-container-image/189994/2?u=everspader

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2020-09-04
      • 1970-01-01
      • 2021-05-24
      • 2022-06-27
      • 2020-12-10
      • 2017-03-11
      相关资源
      最近更新 更多