CINXE.COM
GitLab Runner | GitLab Docs
<!doctype html><html lang=en-US dir=ltr><head><script src=https://cdn.cookielaw.org/consent/7f944245-c5cd-4eed-a90e-dd955adfdd08/OtAutoBlock.js></script><script src=https://cdn.cookielaw.org/scripttemplates/otSDKStub.js data-domain-script=7f944245-c5cd-4eed-a90e-dd955adfdd08></script><script type=text/javascript>function OptanonWrapper(){}</script><script>const callback=(e)=>{for(const t of e)t.type==="childList"&&t.addedNodes.forEach(e=>{e.nodeName==="IMG"&&document.querySelectorAll('img:not([src^="http"]):not([data-ot-ignore])').forEach(e=>{e.setAttribute("data-ot-ignore","")})})},config={attributes:!0,childList:!0,subtree:!0,attributeFilter:["src"]},observer=new MutationObserver(callback);observer.observe(document.documentElement,config)</script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","GTM-NJXWQL"),gtag("consent","default",{analytics_storage:"granted",ad_storage:"granted",functionality_storage:"granted",wait_for_update:500}),gtag("consent","default",{analytics_storage:"denied",ad_storage:"denied",functionality_storage:"denied",region:["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","GB","PE","RU"],wait_for_update:500}),window.geofeed=e=>{dataLayer.push({event:"OneTrustCountryLoad",oneTrustCountryId:e.country.toString()})};const json=document.createElement("script");json.setAttribute("src","https://geolocation.onetrust.com/cookieconsentpub/v1/geo/location/geofeed"),document.head.appendChild(json)</script><meta charset=utf-8><meta name=viewport content="width=device-width"><title>GitLab Runner | GitLab Docs</title> <link rel=icon href=/favicon.ico sizes=any><link rel=icon href=/favicon.svg type=image/svg+xml><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/manifests/manifest.webmanifest><meta name=theme-color content="#FC6D26"><link rel=canonical href=https://docs.gitlab.com/runner/><meta name=description content="GitLab product documentation."><link rel=preload href=/gitlab_ui/fonts/GitLabSans.woff2 type=font/woff2 as=font crossorigin><link rel=prefetch href=/gitlab_ui/fonts/GitLabSans-Italic.woff2 crossorigin><link rel=prefetch href=/gitlab_ui/fonts/GitLabMono.woff2 crossorigin><link rel=stylesheet href=/gitlab_ui/ui/index.css><link rel=stylesheet href=/vite/main.css><meta name=gitlab_docs_base_url content="/"><meta class=elastic name=gitlab_docs_version content="17.11"><meta class=elastic name=gitlab_docs_section content="administer"><meta class=elastic name=gitlab_docs_breadcrumbs content="Administer"><meta name=gitlab_docs_legacy_path content="/runner/index.html"><meta name=gitlab_docs_hugo_launch_version content="17.9"><script>const ELASTIC_KEY="cDFpLWJaSUJXVHBqWWI4VGZKN3M6eENBSjl4WDRSRnlCUW94ajRQazhLQQ==",ELASTIC_INDEX="search-gitlab-docs-hugo"</script><script type=module src=/vite/elastic_search.js></script><script type=module src=/vite/history.js></script><meta name=google-site-verification content="AcGSBNaKDWnLgcYotlVibGy6STm2Y6_KJSaRxrA90xY"><meta name=google-site-verification content="6eFQOFLxYAer08ROqc3I-SAi44F9NmvH7PrUUBR3oCI"><meta name=google-site-verification content="xAUTWp3CDg-tU1LVVwsM9OrVhLR7L3SmiyKzkOuPNos"><meta name=google-site-verification content="F0zzwaMpiyWFcPQ1Lqu18qN3EnuQsqFXbySl_29yvHs"><meta name=google-site-verification content="nwo1bVaU0t9TZxZyM-aOI6-CofaH9GRL-uBPbdREWgc"><meta name=google-site-verification content="rWoHrtHEmIX0t28oOb1ZEDMYZb_EZA6rr6ZOl5otEPI"><meta name=google-site-verification content="fSxr8-uslxcuFL0N-oECp3Tm0RPNEGX97wbdayKOEL8"><meta name=google-site-verification content="ISxyLVnZqU8oY3jwrK7EO9o-2DOTvLJwPse7bZz6yhs"><meta name=google-site-verification content="x1WspIvz3ZHqS0gezfX_P-qiRDOeP2Oyrd68zrU2ErI"><meta name=google-site-verification content="94tkqWSqC1gAkWpsWgOA0l908EXJz_ncu794v5XjpWs"><meta name=google-site-verification content="DfXB2Za52GT3zs_vuLIAL4Mi3M3K4qxXcg7MAs0CUqo"><meta name=google-site-verification content="BCEBC2LC7A1NzO9Com1oBrWK88tV_QXfUL0i9mwXPL0"><meta name=google-site-verification content="a2lNcHMorfS43aoISjZt5_BBPo-H1UaTKMQdBgZO9iY"><meta name=google-site-verification content="0s16pP9MelY6wDHRf-izXb5pwLU01IogP-Uc_e8f3GU"><meta name=google-site-verification content="H474RNof35Xp8fLg02fZbg9Dzxdtfch6vtcjzpmUraU"><meta name=google-site-verification content="E0FlhpgBGeE7d1pQ6amdcIWPMDLDeu15-HLQVoDTguE"><meta name=google-site-verification content="opQd7_rXtPy-pX5CO_XZiztzeQEsXnB3j6Y1_dZAizA"><meta name=google-site-verification content="06Kq4AoXdmBOjOAkbPvnYGtSxnn4Q9QBqEO55PLlw5c"><meta name=google-site-verification content="djBBokRFSWV_VRlSE51V5TZSPzMC6hml5l-Sb22WglE"><meta name=google-site-verification content="UOW6nOsvbyMeIySuamzbws4kNC_WqehamWfoxxtKjZ8"><meta name=google-site-verification content="hXU1Gsdba74DUbvbdUHRl9o0cQeiwXIhAdIllOG6p8E"><meta name=google-site-verification content="YFeHIAPk9lE76ubVMeq4P0sQVnzo2-a4k1oU_bPY8yE"><meta name=google-site-verification content="h8ICI4eDkvXmYaGDuLTLoWuXnLn-KUkChqYB-roMRsw"><meta name=zd-site-verification content="ony3w7hk1vs6tfyrc51mld"><meta name=zd-site-verification content="gtuq65qdzt6n31viazi6hj"></head><body data-elastic-exclude><nav data-elastic-exclude class="header gl-w-full gl-fixed gl-py-0 gl-px-5 gl-z-4 gl-bg-theme-indigo-900 gl-flex gl-justify-between gl-items-center"><a href=#skipTarget class="gl-sr-only skip-link">Skip to main content</a> <a class="header-logo gl-flex lg:gl-mr-5" href=/><img src=/gitlab-logo-header.svg alt="GitLab documentation home" class=logo> <span class="border-light gl-ml-3 gl-pl-3 gl-py-1 gl-border-0 gl-border-l gl-border-solid gl-border-gray-100 gl-align-middle gl-text-white">Docs</span> </a><button class="lg:gl-hidden gl-mt-5 gl-border-0 navbar-toggle" aria-label="Toggle navbar" data-toggle=collapse data-target=.header-right></button><div class="mobile-header gl-w-full gl-text-base"><div class="header-right collapse md:gl-mt-3 lg:gl-mt-0"><div class="js-elastic-search-form gl-spinner-container"><span role=status aria-label=Loading class="gl-ml-3 gl-align-text-bottom! gl-spinner gl-spinner-light gl-spinner-sm"></span></div><div class="gl-flex gl-flex-col lg:gl-flex-row lg:gl-items-center gl-mb-0"><a class="!gl-text-white gl-mr-5 gl-w-fit md:gl-mt-4 lg:gl-mt-0" href=https://about.gitlab.com/releases/categories/releases/ target=_blank rel="noopener noreferrer">What's new?</a><div data-vue-app=versions-menu></div><a class="cta-button gl-my-3 lg:gl-my-0" href="https://gitlab.com/-/trial_registrations/new?glm_source=docs.gitlab.com&amp;glm_content=navigation-cta-docs" target=_blank rel="noopener noreferrer" role=button>Get free trial</a></div></div></div></nav><main><div id=js-version-banner></div><div class=template-single><div data-vue-app=sidebar-menu></div><div data-pagefind-body class=main-content><div class="docs-content gl-overflow-y-auto gl-pb-7"><h1 id=skipTarget class="gl-mt-5 lg:gl-mt-8 gl-mb-6">GitLab Runner</h1><div data-elastic-include><div class="availability gl-text-base gl-pl-4 gl-mb-5"><ul class="gl-list-none gl-p-0 gl-m-0"><li><span class=gl-font-bold>Tier</span>: Free, Premium, Ultimate</li><li><span class=gl-font-bold>Offering</span>: GitLab.com, GitLab Self-Managed, GitLab Dedicated</li></ul></div><p>GitLab Runner is an application that works with GitLab CI/CD to run jobs in a pipeline.</p><h2 id=use-self-managed-runners>Use self-managed runners</h2><div class="availability gl-text-base gl-pl-4 gl-mb-5"><ul class="gl-list-none gl-p-0 gl-m-0"><li><span class=gl-font-bold>Tier</span>: Free, Premium, Ultimate</li><li><span class=gl-font-bold>Offering</span>: GitLab.com, GitLab Self-Managed, GitLab Dedicated</li></ul></div><p>Self-managed runners are GitLab Runner instances that you install, configure, and manage in your own infrastructure. You can <a href=/runner/install/>install</a> and register self-managed runners on all GitLab installations.</p><p>Unlike <a href=https://docs.gitlab.com/ci/runners/>GitLab-hosted runners</a>, which are hosted and managed by GitLab, you have complete control over self-managed runners.</p><h3 id=use-terraform-to-create-and-manage-a-fleet-of-runners>Use Terraform to create and manage a fleet of runners</h3><p>Many common runner configurations can be created and managed by using the <a href=https://gitlab.com/gitlab-org/ci-cd/runner-tools/grit>GitLab Runner Infrastructure Toolkit (GRIT)</a>. GRIT is a library of Terraform modules used to create and manage many common runner configurations on public cloud providers. GRIT is created and maintained by the runner team.</p><h3 id=scale-a-fleet-of-runners>Scale a fleet of runners</h3><p>When your organization scales to having a fleet of runners, you should <a href=/runner/fleet_scaling/>plan for how you will monitor and adjust performance for these runners</a>.</p><h3 id=gitlab-runner-versions>GitLab Runner versions</h3><p>For compatibility reasons, the GitLab Runner <a href=https://en.wikipedia.org/wiki/Software_versioning>major.minor</a> version should stay in sync with the GitLab major and minor version. Older runners may still work with newer GitLab versions, and vice versa. However, features may not be available or work properly if a version difference exists.</p><p>Backward compatibility is guaranteed between minor version updates. However, sometimes minor version updates of GitLab can introduce new features that require GitLab Runner to be on the same minor version.</p><div class="alert alert-type-note"><p>GitLab Runner 15.0 <a href=https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/3414>introduced</a> a change to the registration API request format. It prevents the GitLab Runner from communicating with GitLab versions lower than 14.8. You must use a Runner version that is appropriate for the GitLab version, or upgrade the GitLab application.</p></div><p>If you host your own runners but host your repositories on GitLab.com, keep GitLab Runner <a href=/runner/install/>updated</a> to the latest version, as GitLab.com is <a href=https://gitlab.com/gitlab-org/release/tasks/-/issues>updated continuously</a>.</p><h3 id=runner-registration>Runner registration</h3><p>After you install the application, you <a href=/runner/register/><strong>register</strong></a> individual runners. Runners are the agents that run the CI/CD jobs that come from GitLab.</p><p>When you register a runner, you are setting up communication between your GitLab instance and the machine where GitLab Runner is installed.</p><p>Runners usually process jobs on the same machine where you installed GitLab Runner. However, you can also have a runner process jobs in a container, in a Kubernetes cluster, or in auto-scaled instances in the cloud.</p><h3 id=executors>Executors</h3><p>When you register a runner, you must choose an executor.</p><p>An <a href=/runner/executors/><strong>executor</strong></a> determines the environment each job runs in.</p><p>For example:</p><ul><li>If you want your CI/CD job to run PowerShell commands, you might install GitLab Runner on a Windows server and then register a runner that uses the shell executor.</li><li>If you want your CI/CD job to run commands in a custom Docker container, you might install GitLab Runner on a Linux server and register a runner that uses the Docker executor.</li></ul><p>These are only a few of the possible configurations. You can install GitLab Runner on a virtual machine and have it use another virtual machine as an executor.</p><p>When you install GitLab Runner in a Docker container and choose the <a href=https://docs.gitlab.com/ci/docker/using_docker_images/>Docker executor</a> to run your jobs, it’s sometimes referred to as a “Docker-in-Docker” configuration.</p><h3 id=who-has-access-to-runners-in-the-gitlab-ui>Who has access to runners in the GitLab UI</h3><p>Before you register a runner, you should determine if everyone in GitLab should have access to it, or if you want to limit it to a specific GitLab group or project.</p><p>There are three types of runners, based on who you want to have access:</p><ul><li><a href=https://docs.gitlab.com/ci/runners/runners_scope/#instance-runners>Instance runners</a> are for use by all projects</li><li><a href=https://docs.gitlab.com/ci/runners/runners_scope/#group-runners>Group runners</a> are for all projects and subgroups in a group</li><li><a href=https://docs.gitlab.com/ci/runners/runners_scope/#project-runners>Project runners</a> are for individual projects</li></ul><p>The scope of a runner is defined during the registration. This is how the runner knows which projects it’s available for.</p><h3 id=tags>Tags</h3><p>When you register a runner, you can add <a href=https://docs.gitlab.com/ci/yaml/#tags>tags</a> to it.</p><p>When a CI/CD job runs, it knows which runner to use by looking at the assigned tags. Tags are the only way to filter the list of available runners for a job.</p><p>For example, if a runner has the <code>ruby</code> tag, you would add this code to your project’s <code>.gitlab-ci.yml</code> file:</p><div class=codeblock-wrapper><div data-vue-app=codeblock-toolbar data-code-language=yaml class=codeblock-toolbar></div><div class=highlight><pre tabindex=0 style=-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:green;font-weight:700>job</span>:<span style=color:#bbb> </span></span></span><span style=display:flex><span><span style=color:#bbb> </span><span style=color:green;font-weight:700>tags</span>:<span style=color:#bbb> </span></span></span><span style=display:flex><span><span style=color:#bbb> </span>- ruby</span></span></code></pre></div></div><p>When the job runs, it uses the runner with the <code>ruby</code> tag.</p><h3 id=configuring-runners>Configuring runners</h3><p>You can <a href=/runner/configuration/advanced-configuration/><strong>configure</strong></a> the runner by editing the <code>config.toml</code> file. This is a file that is installed during the runner installation process.</p><p>In this file you can edit settings for a specific runner, or for all runners.</p><p>You can specify settings like logging and cache. You can set concurrency, memory, CPU limits, and more.</p><h3 id=monitoring-runners>Monitoring runners</h3><p>You can use Prometheus to <a href=/runner/monitoring/><strong>monitor</strong></a> your runners. You can view things like the number of currently-running jobs and how much CPU your runners are using.</p><h3 id=use-a-runner-to-run-jobs>Use a runner to run jobs</h3><p>After a runner is configured and available for your project, your <a href=https://docs.gitlab.com/ci/jobs/>CI/CD jobs</a> can use the runner.</p><h2 id=features>Features</h2><p>GitLab Runner has the following features.</p><ul><li>Run multiple jobs concurrently.</li><li>Use multiple tokens with multiple servers (even per-project).</li><li>Limit the number of concurrent jobs per-token.</li><li>Jobs can be run:<ul><li>Locally.</li><li>Using Docker containers.</li><li>Using Docker containers and executing job over SSH.</li><li>Using Docker containers with autoscaling on different clouds and virtualization hypervisors.</li><li>Connecting to a remote SSH server.</li></ul></li><li>Is written in Go and distributed as single binary without any other requirements.</li><li>Supports Bash, PowerShell Core, and Windows PowerShell.</li><li>Works on GNU/Linux, macOS, and Windows (pretty much anywhere you can run Docker).</li><li>Allows customization of the job running environment.</li><li>Automatic configuration reload without restart.</li><li>Easy to use setup with support for Docker, Docker-SSH, Parallels, or SSH running environments.</li><li>Enables caching of Docker containers.</li><li>Easy installation as a service for GNU/Linux, macOS, and Windows.</li><li>Embedded Prometheus metrics HTTP server.</li><li>Referee workers to monitor and pass Prometheus metrics and other job-specific data to GitLab.</li></ul><h2 id=runner-execution-flow>Runner execution flow</h2><p>This diagram shows how runners are registered and how jobs are requested and handled. It also shows which actions use <a href=https://docs.gitlab.com/api/runners/#registration-and-authentication-tokens>registration, authentication</a>, and <a href=https://docs.gitlab.com/ci/jobs/ci_job_token/>job tokens</a>.</p><pre class=mermaid tabindex=0>sequenceDiagram participant GitLab participant GitLabRunner participant Executor opt registration GitLabRunner ->>+ GitLab: POST /api/v4/runners with registration_token GitLab -->>- GitLabRunner: Registered with runner_token end loop job requesting and handling GitLabRunner ->>+ GitLab: POST /api/v4/jobs/request with runner_token GitLab -->>+ GitLabRunner: job payload with job_token GitLabRunner ->>+ Executor: Job payload Executor ->>+ GitLab: clone sources with job_token Executor ->>+ GitLab: download artifacts with job_token Executor -->>- GitLabRunner: return job output and status GitLabRunner -->>- GitLab: updating job output and status with job_token end </pre><h2 id=glossary>Glossary</h2><p>This glossary provides definitions for terms related to GitLab Runner.</p><ul><li><strong>GitLab Runner</strong>: The application that you install that executes GitLab CI jobs on a target computing platform.</li><li><strong>runner configuration</strong>: A single <code>[[runner]]</code> entry in the <code>config.toml</code> that displays as a <strong>runner</strong> in the UI.</li><li><strong>runner manager</strong>: The process that reads the <code>config.toml</code> and runs all the runner configurations concurrently.</li><li><strong>runner</strong>: The process that executes the job on a selected machine. Depending on the type of executor, this machine could be local to the runner manager (<code>shell</code> or <code>docker</code> executor) or a remote machine created by an autoscaler (<code>docker-autoscaler</code> or <code>kubernetes</code>).</li><li><strong>machine</strong>: A virtual machine (VM) or pod that the runner operates in. GitLab Runner automatically generates a unique, persistent machine ID so that when multiple machines are given the same runner configuration, jobs can be routed separately but the runner configurations are grouped in the UI.</li></ul><p>See also the official <a href=https://docs.gitlab.com/development/documentation/styleguide/word_list/#gitlab-runner>GitLab Word List</a> and the GitLab Architecture entry for <a href=https://docs.gitlab.com/development/architecture/#gitlab-runner>GitLab Runner</a>.</p><h2 id=troubleshooting>Troubleshooting</h2><p>Learn how to <a href=/runner/faq/>troubleshoot</a> common issues.</p><h2 id=contributing>Contributing</h2><p>Contributions are welcome. See <a href=https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CONTRIBUTING.md><code>CONTRIBUTING.md</code></a> and the <a href=/runner/development/>development documentation</a> for details.</p><p>If you’re a reviewer of GitLab Runner project, take a moment to read the <a href=/runner/development/reviewing-gitlab-runner/>Reviewing GitLab Runner</a> document.</p><p>You can also review <a href=https://gitlab.com/gitlab-org/gitlab-runner/blob/main/PROCESS.md>the release process for the GitLab Runner project</a>.</p><h2 id=changelog>Changelog</h2><p>See the <a href=https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md>CHANGELOG</a> to view recent changes.</p><h2 id=license>License</h2><p>This code is distributed under the MIT license. View the <a href=https://gitlab.com/gitlab-org/gitlab-runner/blob/main/LICENSE>LICENSE</a> file.</p></div><div class="help-feedback gl-rounded-base gl-mt-7 gl-p-5"><div class="help-feedback-container gl-flex"><div class=help-feedback-question-icon></div><button class="gl-flex gl-flex-row gl-items-center gl-justify-between" data-target=.feedback-wrapper data-toggle=collapse><h2 class="gl-m-0 gl-font-bold gl-text-lg">Help & feedback</h2><span class=help-feedback-toggle></span></button></div><div class="feedback-wrapper collapse"><div class="help-feedback-container xl:gl-flex"><div class="feedback gl-pr-5"><h3>Docs</h3><p><a href=https://gitlab.com/gitlab-org/gitlab-runner/-/blob/main/docs/_index.md>Edit this page</a> to fix an error or add an improvement in a merge request.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Documentation">Create an issue</a> to suggest an improvement to this page.</p><h3>Product</h3><p><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/new?issue%5Bdescription%5D=Describe%20what%20you%20would%20like%20to%20see%20improved.%0A%0A%3C!--%20Don%27t%20edit%20below%20this%20line%20--%3E%0A%0A%2Flabel%20~%22docs%5C-comments%22%20&issue%5Btitle%5D=Docs%20-%20product%20feedback:%20Write%20your%20title">Create an issue</a> if there's something you don't like about this feature.</p><p><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Feature%20proposal%20-%20detailed&issue%5Btitle%5D=Docs%20feedback%20-%20feature%20proposal:%20Write%20your%20title">Propose functionality</a> by submitting a feature request.</p><h3>Feature availability and product trials</h3><p><a href=https://about.gitlab.com/pricing/>View pricing</a> to see all GitLab tiers and features, or to upgrade.</p><p><a href=https://about.gitlab.com/free-trial/>Try GitLab for free</a> with access to all features for 30 days.</p></div><div class=help><h3>Get help</h3><p>If you didn't find what you were looking for, <a href=/search/>search the docs</a>.</p><p>If you want help with something specific and could use community support, <a href="https://forum.gitlab.com/new-topic?title=topic%20title&body=topic%20body&tags=docs-feedback">post on the GitLab forum</a>.</p><p>For problems setting up or using this feature (depending on your GitLab subscription).</p><a class="btn btn-default btn-md gl-button" href=https://about.gitlab.com/support/>Request support</a></div></div></div></div></div><footer class=gl-pb-6><div class="gl-flex gl-justify-between gl-border-0 gl-border-t gl-border-solid gl-border-gray-100 gl-pt-5"><a href=https://gitlab.com/dashboard><img src=/gitlab-logo.svg alt="GitLab logo"></a><ul class="docs-social gl-list-none gl-flex"><li><a href=https://www.facebook.com/gitlab class=facebook><span class=gl-sr-only>Facebook</span></a></li><li><a href=https://www.linkedin.com/company/gitlab-com class=linkedin><span class=gl-sr-only>LinkedIn</span></a></li><li><a href=https://twitter.com/gitlab class=twitter><span class=gl-sr-only>Twitter</span></a></li><li><a href=https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg class=youtube><span class=gl-sr-only>YouTube</span></a></li></ul></div><ul class="docs-footer-links gl-list-none gl-pl-0 xl:gl-flex"><li class="gl-pr-5 gl-mb-2 xl:gl-mb-0"><a href=https://gitlab.com/gitlab-org/technical-writing/docs-gitlab-com class=gl-text-gray-600>Docs Repo</a></li><li class="gl-pr-5 gl-mb-2 xl:gl-mb-0"><a href=https://about.gitlab.com/company/ class=gl-text-gray-600>About GitLab</a></li><li class="gl-pr-5 gl-mb-2 xl:gl-mb-0"><a href=https://about.gitlab.com/terms/ class=gl-text-gray-600>Terms</a></li><li class="gl-pr-5 gl-mb-2 xl:gl-mb-0"><a href=https://about.gitlab.com/privacy/ class=gl-text-gray-600>Privacy Statement</a></li><li class="gl-pr-5 gl-mb-2 xl:gl-mb-0"><button id=ot-sdk-btn class=ot-sdk-show-settings>Cookie Settings</button></li><li class="gl-pr-5 gl-mb-2 xl:gl-mb-0"><a href=https://about.gitlab.com/company/contact/ class=gl-text-gray-600>Contact</a></li></ul><nav class=docs-edit-links aria-label=Footer><ul class="docs-footer-links-secondary gl-list-none gl-pl-0 gl-pb-5 xl:gl-flex"><li><a href=https://gitlab.com/gitlab-org/gitlab-runner/-/blob/main/docs/_index.md>View page source</a></li><li><a href=https://gitlab.com/-/ide/project/gitlab-org/gitlab-runner/edit/main/-/docs/_index.md>Edit in Web IDE</a></li><li><a href=https://creativecommons.org/licenses/by-sa/4.0/ class="gl-mb-5 md:gl-mb-0"><img alt="Creative Commons License" src=/by-sa.svg></a></li></ul></nav></footer></div><aside class=sidebar-right><div class="js-toc gl-text-base"></div></aside></div></main><script type=module src=/vite/main.js></script><script src=/vite/mermaid.min.js></script><script>document.addEventListener("DOMContentLoaded",()=>{mermaid.initialize({startOnLoad:!0,theme:"neutral"})})</script><script async>(function(e,t,n,s,o){e[s]=e[s]||[],e[s].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var a=t.getElementsByTagName(n)[0],i=t.createElement(n),r=s!="dataLayer"?"&l="+s:"";i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id="+o+r,a.parentNode.insertBefore(i,a)})(window,document,"script","dataLayer","GTM-NJXWQL")</script><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJXWQL" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><script async>(function(){var e,t=!1;function n(){t===!1&&(t=!0,Munchkin.init("194-VVC-221",{useBeaconAPI:!0}))}e=document.createElement("script"),e.type="text/javascript",e.async=!0,e.src="https://munchkin.marketo.net/munchkin.js",e.onreadystatechange=function(){(this.readyState=="complete"||this.readyState=="loaded")&&n()},e.onload=n,document.getElementsByTagName("head")[0].appendChild(e)})()</script><script async src=https://cdn.bizible.com/scripts/bizible.js></script><script async>_linkedin_partner_id="30694",window._linkedin_data_partner_ids=window._linkedin_data_partner_ids||[],window._linkedin_data_partner_ids.push(_linkedin_partner_id),function(){var t=document.getElementsByTagName("script")[0],e=document.createElement("script");e.type="text/javascript",e.async=!0,e.src="https://snap.licdn.com/li.lms-analytics/insight.min.js",t.parentNode.insertBefore(e,t)}()</script><noscript><img height=1 width=1 style=display:none alt src="https://dc.ads.linkedin.com/collect/?pid=30694&fmt=gif"></noscript><script src=https://cdn.jsdelivr.net/npm/@gitlab/application-sdk-browser@0.2.8/dist/gl-sdk.min.js></script><script>const GL_PRODUCT_ANALYTICS_JSON={appId:"e1c8d446-8edf-46fa-9e6a-9f964b8675c8",host:"https://collector.prod-1.gl-product-analytics.com",hasCookieConsent:!0};Object.values(GL_PRODUCT_ANALYTICS_JSON).includes("")||(window.glClient=window.glSDK.glClientSDK(),window.glClient?.page())</script></body></html>