Wait for IdleTime before destroying an autoscaled runner with IdleCount = 0
Context / use case
I am configuring a gitlab runner with autoscaling enabled for a project with only a few commits a day, for an organization tight on money. I would like to stop all runners when there is no job to be built, but I would also like to keep a runner some time after it has been used in case of a new job comming to avoid waiting the creation of a new one.
Today, my configuration looks like this:
concurrent = 2 [[runners]] name = "My autoscale runner" url = "https://gitlab.com/ci" token = "XXXXXXXXXXXXXXXXXXXXXXXXXX" executor = "docker+machine" limit = 2 [runners.machine] IdleCount = 0 IdleTime = 1800 MaxBuilds = 100 MachineName = "gitlab-runner-autoscale-%s" MachineDriver = "amazonec2" MachineOptions = [ "amazonec2-access-key=XXXXXXXXXXXXXXXXXXXXXXXXX", "amazonec2-secret-key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "amazonec2-region=eu-west-1", "amazonec2-instance-type=c4.large", "amazonec2-request-spot-instance=true", "amazonec2-spot-price=0.03" ]
The problem is that, as I have
IdleCount set to 0, the autoscaled runners are terminated just after finishing the job, even if there are other jobs in the queue.
In case of
IdleCount=0, wait for
IdleTime before actually terminating the runner, or provide an option that allows this behavior.
Also, #1374 (closed) seems a very good idea for optimizing the use of runners and lower their cost.