如何在Github Actions CI / CD中访问服务?

时间:2019-08-24 16:02:24

标签: github elixir github-actions

我试图在GitHub Actions中为我的Elixir项目建立CI / CD管道。

我可以获取依赖项,对其进行编译,检查格式,信条...但是当测试开始时,我无法访问YAML上声明的PostgreSQL服务。

如何链接两个容器? (Elixir和PostgreSQL)

根据GitHub Actions上显示的日志,两个容器都在同一个Docker网络上,因此应该可以使用它们的网络别名相互访问它们。但是,当我尝试连接到postgres时,它显示 NXDOMAIN 。 ping也无法正常工作。

我的工作流程的内容:

name: Elixir CI

on: push

jobs:
  build:
    runs-on: ubuntu-18.04

    container:
      image: elixir:1.9.1

    services:
      postgres:
        image: postgres
        ports:
        - 5432:5432
        env:
          POSTGRES_USER: my_app
          POSTGRES_PASSWORD: my_app
          POSTGRES_DB: my_app_test

    steps:
    - uses: actions/checkout@v1
    - name: Install Dependencies
      env:
        MIX_ENV: test
      run: |
        cp config/test.secret.ci.exs config/test.secret.exs
        mix local.rebar --force
        mix local.hex --force
        apt-get update -qqq && apt-get install make gcc -y -qqq
        mix deps.get
    - name: Compile
      env:
        MIX_ENV: test
      run: mix compile --warnings-as-errors
    - name: Run formatter
      env:
        MIX_ENV: test
      run: mix format --check-formatted
    - name: Run Credo
      env:
        MIX_ENV: test
      run: mix credo
    - name: Run Tests
      env:
        MIX_ENV: test
      run: mix test

此外,在Elixir上,我设置了测试任务以连接到postgres:5432,但是它说主机不存在。

根据我在Internet上找到的一些教程和示例,此配置看起来很有效,但我无能为力。

1 个答案:

答案 0 :(得分:3)

您需要将服务("postgres")的名称POSTGRES_HOST传递给应用程序,并且设置端口POSGRES_PORT: ${{ job.services.postgres.ports[5432] }}(空格)。< / p>

Github CI动态地将端口和主机路由到该端口。

几天前,我为此主题写了blog post