Search code examples
continuous-integrationgithub-actionspipeline

Connection refused for local server in github actions workflow


I'm trying to run a local server for my project CI/CD Pipeline. When I start the server I got a "Connection refused" on it.

My project is a fastAPI application and I'm trying to run a integration tests on PR to validate the app before merge the code. I tried to start my app directly (gunicorn), building a docker image and starting it... I tried a lot of things. Then, I tried to run a simple server instead of my app and... got the same error!

This is my simple server workflow:


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

Output:

Workflow output

If I run my app with console (no daemon mode in gunicorn), the server start and log to console in workflow with success:

Gunicorn runnig in workflow

But this way I cannot run nothing after this (and I have to cancel workflow). Some idea? Thank you!


Solution

  • Maybe not the best answer, but for now runnig the job into a container works (only add a container label in question example). Example for my fastAPI app:

    
    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
    

    This works, but I have to install all in container (git, pip). I will try a solution without using the container label and if I found anything I can post here.