André Ginklings
André Ginklings

Reputation: 381

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!

Upvotes: 6

Views: 3938

Answers (1)

André Ginklings
André Ginklings

Reputation: 381

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.

Upvotes: 4

Related Questions