如何让GitHub Actions Runner在启动Go REST API服务器后执行测试?
解决GitHub Actions中Go服务器启动后卡住无法执行测试的问题
核心原因
启动服务器的./main命令会持续监听请求,占用当前步骤的运行进程,导致GitHub Actions无法推进到后续的测试步骤。
解决方案
需要将服务器放到后台运行,并添加检查确保服务器完全启动后再执行测试,测试完成后终止服务器进程。修改后的GitHub Actions配置如下:
name: Continuous Integration on: push: branches: - "main" jobs: test: runs-on: ubuntu-latest steps: - name: checkout repository uses: actions/checkout@v2 - name: Setup Go uses: actions/setup-go@v4 with: go-version: 1.20.7 - name: build run: go build -o main - name: change permissions run: chmod +x main - name: start server in background run: ./main & - name: wait for server to be ready run: | # 用nc检查端口是否开放(替换成你的服务器实际端口) until nc -z localhost 8080; do echo "Waiting for server to start..." sleep 2 done - name: test run: go test -v ./tests - name: stop server run: pkill main
关键说明
- 后台运行服务器:在启动命令末尾加
&,让服务器进程转到后台执行,释放当前步骤的进程,允许后续步骤继续。 - 等待服务器就绪:通过
nc循环检查服务器端口是否开放,确保服务器完全启动后再执行测试,避免测试因服务器未就绪而失败。如果你的服务器有健康检查接口,也可以替换成curl调用该接口的方式。 - 终止服务器:测试完成后用
pkill main杀掉服务器进程,清理Runner资源。
内容的提问来源于stack exchange,提问作者Jayanth Krishna
相关产品推荐
相关产品推荐

