You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions中保持服务器运行以确保测试任务正常执行?

解决GitHub Action中测试期间维持服务器运行的问题

你遇到的核心问题是每个GitHub Action的Job都运行在独立的虚拟机实例上:run-server Job执行完毕后,对应的虚拟机会被销毁,服务器自然就停了,所以run-tests Job启动时根本连不上服务器。

下面是两种可行的解决方案:

方案一:将服务器启动与测试放在同一个Job中

把服务器启动、等待就绪、执行测试的步骤都放在同一个Job里,这样所有步骤共享同一个虚拟机,服务器能一直运行到测试结束。

示例配置:

jobs:
  test-with-server:
    name: Run Server & Execute Tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      # 先安装项目依赖(根据你的Phoenix项目调整)
      - name: Install Dependencies
        run: mix deps.get
        
      # 后台启动Phoenix服务器,用nohup和重定向输出到日志文件
      - name: Start Phoenix Server in Background
        run: nohup iex -S mix phx.server > server-output.log 2>&1 &
        
      # 等待服务器完全启动(必须加这一步,否则测试会连不上)
      - name: Wait for Server to Be Ready
        run: |
          # 这里假设你的服务器有健康检查接口,比如/health
          until curl -s http://localhost:4000/health; do
            echo "Waiting for Phoenix server to start..."
            sleep 2
          done
          
      # 执行API测试
      - name: Run API Tests
        id: run-newman
        uses: anthonyvscode/newman-action@v1
        with:
          # 填写你的Newman配置,比如集合文件路径等
          collection: ./path/to/your/collection.json

方案二:使用GitHub Action服务容器(Service Containers)

如果一定要拆分Job,可以把Phoenix服务器做成Docker镜像,作为服务容器在run-tests Job中启动,服务容器会在整个Job周期内保持运行。

前提:

需要先把你的Phoenix项目构建成Docker镜像(比如推送到Docker Hub或GitHub Packages)。

示例配置:

jobs:
  run-tests:
    name: Run Tests Against Server
    runs-on: ubuntu-latest
    # 定义服务容器
    services:
      phoenix-server:
        # 替换成你的服务器镜像地址
        image: your-username/phoenix-server:latest
        ports:
          - 4000:4000
        # 配置健康检查,确保服务器就绪后再执行测试
        options: >-
          --health-cmd "curl http://localhost:4000/health"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - uses: actions/checkout@v2
      
      - name: Run API Tests
        id: run-newman
        uses: anthonyvscode/newman-action@v1
        with:
          # 测试地址要指向服务容器的名称(这里是phoenix-server),而不是localhost
          collection: ./path/to/your/collection.json
          environment: ./path/to/your/env.json

关键注意事项

  • 不管用哪种方案,必须添加服务器就绪等待步骤:Phoenix启动需要时间,直接跑测试会出现连接失败的问题。
  • 后台启动服务器时,建议重定向日志到文件,方便后续调试(比如服务器启动失败时可以查看日志)。
  • 服务容器方案适合需要复用服务器镜像的场景,但需要额外维护Docker构建流程。

内容的提问来源于stack exchange,提问作者bezzoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:05:17