github - 如何访问 Github Actions CI/CD 中的服务?
问题描述
我正在尝试在 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 上找到的一些教程和示例,这种配置看起来是有效的,但我无能为力。
解决方案
您需要将服务的名称 ( "postgres"
)POSTGRES_HOST
传递给应用程序并设置端口POSGRES_PORT: ${{ job.services.postgres.ports[5432] }}
(空格很重要。)
Github CI 动态地将端口和主机路由到它。
几天前我写了一篇关于这个主题的博客文章。
推荐阅读
- csv - BigQuery 非常慢的 CSV 上传
- python - 根据顶级域(edu、com、org、in)对列表进行排序
- android - 动态单选按钮在其中存储 json 响应 ID 和名称
- geometry - 如何在 Coq 中将直线公理定义为两点
- angular - 材料侧导航未打开
- c++ - 未定义对完整模板特化类成员函数的引用,但不是部分特化
- hibernate - 实体未更改时如何在休眠状态下强制保存
- c++ - 指针复制到另一个指针时如何工作
- admob - 当我添加 admob 广告时,应用程序被强制停止
- ab-testing - 我可以在 Google Optimize 中为我的创建和编辑页面创建一个重定向测试吗?