如何连接到 GitHub Action 的作业服务?

Kyl*_*roy 6 postgresql github github-actions

GitHub Actions 允许您在每个作业的基础上运行后台服务。按照示例进行操作后,我无法弄清楚如何连接到正在运行的 PostgreSQL 容器。

我在这个pull request 中尝试了几种不同的方法,但都没有奏效。

name: dinosql test suite
on: [push]
jobs:

  build:
    name: Build
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres
        env:
          POSTGRES_PASSWORD: postgres
        ports:
          - 5432/tcp

    steps:
    - uses: actions/checkout@master

    - name: Test dinosql/ondeck
      run: go test -v ./...
      working-directory: internal/dinosql/testdata/ondeck
      env:
        PG_USER: postgres
        PG_DATABASE: postgres
        PG_PASSWORD: postgres
        PG_PORT: ${{ job.services.postgres.ports['5432'] }}
Run Code Online (Sandbox Code Playgroud)

此设置导致以下错误

Run go test -v ./...
=== RUN   TestQueries
=== PAUSE TestQueries
=== RUN   TestPrepared
=== PAUSE TestPrepared
=== CONT  TestQueries
=== CONT  TestPrepared
--- FAIL: TestPrepared (0.00s)
##[error]    db_test.go:212: db: postgres://postgres:postgres@127.0.0.1:32768/postgres?sslmode=disable
##[error]    db_test.go:212: dial tcp 127.0.0.1:32768: connect: connection refused
--- FAIL: TestQueries (0.00s)
##[error]    db_test.go:83: db: postgres://postgres:postgres@127.0.0.1:32768/postgres?sslmode=disable
##[error]    db_test.go:83: dial tcp 127.0.0.1:32768: connect: connection refused
FAIL
FAIL    example.com/ondeck  0.005s
?       example.com/ondeck/prepared [no test files]
##[error]Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)

如果可以建立有效的数据库连接,则测试应该通过。

luk*_*kad 7

我遇到了同样的问题,经过大量的反复试验,通过 GitHub 的代码搜索找到了这个例子

name: dinosql test suite
on: [push]
jobs:

  build:
    name: Build
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres
        env:
          POSTGRES_PASSWORD: postgres
        ports:
          - 5432/tcp
        # needed because the postgres container does not provide a healthcheck
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
    - uses: actions/checkout@master

    - name: Test dinosql/ondeck
      run: go test -v ./...
      working-directory: internal/dinosql/testdata/ondeck
      env:
        # use postgres for the host here because we have specified a contaienr for the job.
        # If we were running the job on the VM this would be localhost
        PG_HOST: postgres
        PG_USER: postgres
        PG_DATABASE: postgres
        PG_PASSWORD: postgres
        PG_PORT: ${{ job.services.postgres.ports['5432'] }}
Run Code Online (Sandbox Code Playgroud)

添加健康检查选项并将数据库主机名从 更改127.0.0.1postgres应该可以解决问题。

似乎没有健康检查选项,postgres 容器将被关闭并且无法用于测试。