OpsCanary
cicdgitlab ciPractitioner

Mastering GitLab CI Runners: Timeout Configurations You Need

5 min read GitLab DocsAug 2, 2026Reviewed for accuracy
Share
PractitionerHands-on experience recommended

GitLab CI runners are essential for executing your CI/CD jobs, but without proper configuration, they can lead to inefficiencies and wasted resources. Setting timeouts for jobs and scripts is crucial to ensure that your pipeline runs smoothly and that long-running jobs don’t hog resources. This configuration helps you manage runner usage across multiple projects, preventing any single project from monopolizing the runner's capabilities.

You can specify a maximum job timeout for each runner using the maximum_timeout parameter. This ensures that if a project's job timeout exceeds this limit, the job will still respect the runner's maximum timeout. For example, if you set maximum_timeout to 24 hours but a project has a job timeout of 2 hours, the job will timeout after 2 hours. Additionally, you can control script execution time with the RUNNER_SCRIPT_TIMEOUT variable, allowing you to set specific limits for how long a script can run. Similarly, the RUNNER_AFTER_SCRIPT_TIMEOUT variable lets you define a timeout for the after_script section, which defaults to 5 minutes unless overridden. These configurations help you maintain order and efficiency in your CI/CD processes.

In production, be aware of the security implications of using instance runners, as they are accessible to all projects within a GitLab instance. Always reset your registration tokens if they are compromised. Proper role assignments are crucial; you need to be an administrator for instance runners or have the Owner role for group and project runners to make these configurations. Misconfigurations can lead to unexpected job failures or resource wastage, so always test your timeout settings in a controlled environment before rolling them out to production.

Key takeaways

  • Set `maximum_timeout` to prevent long-running jobs from monopolizing runners.
  • Use `RUNNER_SCRIPT_TIMEOUT` to enforce strict limits on script execution time.
  • Override the default `RUNNER_AFTER_SCRIPT_TIMEOUT` to manage clean-up tasks effectively.
  • Be cautious with instance runners due to their accessibility across projects.
  • Reset registration tokens immediately if they are exposed to prevent unauthorized runner registrations.

Why it matters

Properly configuring timeouts for GitLab CI runners can significantly reduce resource consumption and improve pipeline efficiency. This leads to faster feedback loops and a more reliable CI/CD process.

Code examples

chroma
job-with-script-timeouts:variables:RUNNER_SCRIPT_TIMEOUT:15mRUNNER_AFTER_SCRIPT_TIMEOUT:10mscript:-"I am allowed to run for min(15m, remaining job timeout)."after_script:-"I am allowed to run for min(10m, remaining job timeout)."
chroma
job-with-script-timeouts:timeout:5mvariables:RUNNER_SCRIPT_TIMEOUT:1mRUNNER_AFTER_SCRIPT_TIMEOUT:1mscript:-echo "Starting build..."-sleep 120# Wait 2 minutes to trigger timeout. Script aborts after 1 minute due to RUNNER_SCRIPT_TIMEOUT.-echo "Build finished."after_script:-echo "Starting Clean-up..."-sleep 15# Wait just a few seconds. Runs successfully because it's within RUNNER_AFTER_SCRIPT_TIMEOUT.-echo "Clean-up finished."

When NOT to use this

The official docs don't call out specific anti-patterns here. Use your judgment based on your scale and requirements.

Want the complete reference?

Read official docs

Test what you just learned

Quiz questions written from this article

Take the quiz →
RailwaySponsor

Deploy any app in seconds — no infrastructure config, no DevOps overhead. Instant deployments from GitHub, built-in databases, and automatic scaling.

Start deploying free →

Get the daily digest

One email. 5 articles. Every morning.

No spam. Unsubscribe anytime.