GitHub Actions 工作流程中本地服务器连接被拒绝。

4

我正在尝试为我的项目CI/CD Pipeline运行本地服务器。当我启动服务器时,它显示“连接被拒绝”。

我的项目是一个fastAPI应用程序,我正在尝试在PR上运行集成测试以验证应用程序在合并代码之前的正确性。我尝试直接启动我的应用程序(gunicorn),构建docker镜像并启动它...我尝试了很多方法。然后,我尝试运行一个简单的服务器而不是我的应用程序,结果...出现了相同的错误!

这是我的简单服务器工作流程:


on:
  push:
    branches:
      - "develop"

jobs:
  mylocalserver:
    name: Run server
    runs-on: ubuntu-latest
    steps:
      - name: Setup python
        uses: actions/setup-python@v3
        with:
          python-version: 3.9
      - name: Run server in background
        run: |
          python -V
          python -m http.server 3000 &> /dev/null &
          sudo lsof -i -P -n | grep LISTEN
          curl http://localhost:3000
      - name: Run server with console
        run: |
          python -m http.server 3000

输出:

Workflow output

如果我使用控制台运行我的应用程序(在gunicorn中没有守护进程模式),服务器将成功启动并在工作流程中记录到控制台:

Gunicorn runnig in workflow

但是这样做之后我就不能运行任何东西了(而且我必须取消工作流程)。有什么想法吗?谢谢!


是的,仍然有效。 - Demetry Pascal
1个回答

3
也许不是最好的答案,但目前将作业运行到容器中可以解决问题(只需在问题示例中添加一个container标签)。以下是我的fastAPI应用程序示例:

on:
  pull_request:
    branches:
      - 'main'
      - 'develop'

jobs:
  run-on-pr:
    runs-on: ubuntu-latest
    container: ubuntu
    services:
      mongodb:
        image: mongo
        ports:
        - 27017:27017
    steps:
      - name: Setup git
        run: |
          apt-get update; apt-get install -y git
      - name: Git checkout
        uses: actions/checkout@v3
        with:
          path: api
      - name: Setup python
        uses: actions/setup-python@v4
        with:
          python-version: 3.9
      - name: Install pip
        run: |
          apt-get update; apt-get install -y python3-pip
      - name: Build and ENV
        run: |
          cd api
          cp .env_example_docker .env
          pip3 install -r requirements.txt
      - name: Run fastAPI
        run: |
          cd api
          gunicorn -D -k uvicorn.workers.UvicornWorker -c ./gunicorn_conf.py app.main:app
        env:
          MONGO_URL: "mongodb://mongodb:27017"
      - name: Install curl
        run: |
          apt-get update; apt-get install -y curl
      - name: Run curl
        run: |
          curl http://localhost:3000

这个方法能够实现,但是我需要在容器中安装所有的工具(如git, pip)。我会尝试不使用container标签的解决方案,如果我找到了什么,我会在这里发布。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接