Skip to content

Scale your woodpecker agents automatically to the moon and back based on the current load.

License

Notifications You must be signed in to change notification settings

woodpecker-ci/autoscaler

Repository files navigation

Autoscaler

Scale your woodpecker agents automatically to the moon and back based on the current load.

Usage

If you are using docker-compose you can add the following to your docker-compose.yml file:

# docker-compose.yml
version: '3'

services:
  woodpecker-server:
    image: woodpeckerci/woodpecker-server:next
    [...]

  woodpecker-autoscaler:
    image: woodpeckerci/autoscaler:next
    restart: always
    depends_on:
      - woodpecker-server
    environment:
      - WOODPECKER_SERVER=https://your-woodpecker-server.tld # the url of your woodpecker server / could also be a public url
      - WOODPECKER_TOKEN=${WOODPECKER_TOKEN} # the api token you can get from the UI https://your-woodpecker-server.tld/user
      - WOODPECKER_MIN_AGENTS=0
      - WOODPECKER_MAX_AGENTS=3
      - WOODPECKER_WORKFLOWS_PER_AGENT=2 # the number of workflows each agent can run at the same time
      - WOODEPCKER_GRPC_ADDR=https://grpc.your-woodpecker-server.tld # the grpc address of your woodpecker server, publicly accessible from the agents
      - WOODEPCKER_GRPC_SECURE=true
      - WOODPECKER_AGENT_ENV= # optional environment variables to pass to the agents
      - WOODPECKER_PROVIDER=hetznercloud # set the provider, you can find all the available ones down below
      - WOODPECKER_HETZNERCLOUD_API_TOKEN=${WOODPECKER_HETZNERCLOUD_API_TOKEN} # your api token for the Hetzner cloud

The agents will use WOODEPCKER_GRPC_ADDR and a token automatically generated by the autoscaler to connect to the server.Therefore the WOODEPCKER_GRPC_ADDR has to be publicly accessible from the newly created agents. Check for example how you could use caddy to expose the grpc connection.

Roadmap

  • Add support for multiple providers
    • Hetzner Cloud
    • Amazon AWS
    • Google Cloud
    • Azure
    • Digital Ocean
    • Linode (temp disabled until security issue was addressed)
    • Oracle Cloud
    • Equinix Metal
  • Cleanup agents
    • Remove agents which exist on the provider but are not in the server list (they wont be able to connect to the server anyway as their is no agent token for them)
    • Remove agents from server list which do not exist on the provider
    • Remove agents which have not connected for a long time
  • Release as container image
  • Add docs
  • Support agent deployment with specific attributes (e.g. platforms, architectures, etc.)