🌐
GitLab
docs.gitlab.com › gitlab docs › administer › administer gitlab runner › runner executors
Executors | GitLab Docs
Executors that do not rely on a helper image require a Git installation on the target machine and in the PATH. Always use the latest available version of Git. GitLab Runner uses the git lfs command if Git LFS is installed on the target machine.
🌐
GitLab
docs.gitlab.com › gitlab docs › administer › administer gitlab runner
GitLab Runner | GitLab Docs
GitLab Runner automatically generates ... separately but the runner configurations are grouped in the UI. Executor: The method GitLab Runner uses to execute jobs (Docker, Shell, Kubernetes, etc.)....
Discussions

Confused with gitlab-runner and executor
First q - nope! When people refer to the executor, they (should) only mean "the mechanism of which will be the acting environment for your pipeline commands to run in". If you use a shell-executor, it could be performed by the docker install or the binary install of the runner, and same for the docker-executor 2. Performance can be a bit of an issue - the trade off with dockerized builds are that 1 computer/VM can run multiple, simultaneous, totally isolated pipelines, whereas a shell runner can only safely run 1. While performance might drop off, there's the gain of not having to have several machines/vm's created (much more overhead from a full-os vs just a container). For context, I see network latency increase when I use a docker-windows executor running 5 different queued pipeline tasks on this 1 machine (16gb Ram, 8 CPU) and some CPU drop off, but if I were to spin up 5 different machines to handle this same work load (5 pipeline tasks queued at the same time, I'm probably not fully utilizing the resources but I definitely am hogging more resources that could be leveraged. Now taking into consideration that you have both a shell & a docker executor, it would depend on what kind of code you're pipeline is working with and how a build consumes resources - if you are building a java project, it would be hard to see a performance impact unless it's true massive, but for something like NodeJS with tons of packages, it would definitely cause impact if the shell runner executed a job while the docker executor took a few jobs as well, if say, using that same 16gb RAM & 8 Core machine. For some organization, I've kept shell runners on their own machine, because if someone edits their gitlab ci file to do something that affects the shell runner permanently (like "sudo apt upgrade", or something that causes a variable to linger beyond the build that affects the next build) then I have to worry about fixing that issue. There are good use cases for the shell runners though, but the docker executors provide the quickest way to scale pipelines to 100+ repositories, averaging 10 builds an hour during work hours (20 min pipeline execution). In some sort of motivational stance, if you have the extra machine power waiting around, I think you should be adding more features into your pipeline, which would then show you the need for the simultaneous task execution. Gitlab 's SAST jobs, coverage testing, linting, or even live execution of code for smoke tests or things of that nature could be explored to add value to the pipelines. All those combined would create a lengthy pipeline execution time, so there's more reason to attempt to run as many as these in parallel as possible. More on reddit.com
🌐 r/gitlab
1
3
May 5, 2023
docker - gitlab-ci-runner choose executer "Please enter the executor:" - Stack Overflow
I have ran gitlab-ci-multi-runner in a container by docker. When I execute the gitlab-ci-multi-runner register in the container,it ask Please enter the executor: docker...? If I choose docker,d... More on stackoverflow.com
🌐 stackoverflow.com
New to Gitlab. Need help understanding executors
You don't have to use the ssh executor in order to deploy to a different machine. In fact I would argue that you probably wouldn't want to. The executor is just for defining where the tasks in your `.gitlab-ci.yml` are run. The way I would approach this is using CI Variables for your ssh configuration properties (ssh key, hostname, etc.), then define task(s) to deploy whatever artifacts you need to the target machine. What this approach gives you is the ability to segregate you CI tasks from your production machine. More on reddit.com
🌐 r/gitlab
8
5
September 6, 2021
Confused about Gitlab runners
I don't want to run my code, I just want to compile it The executor executes your build script, compiling is the stuff you would put in your build script. So no, it's not really for running your actual application. Docker is useful for this because it's isolated, you could also run it directly on your machine but setting up build environments manually sucks. It's better to invest a bit of time to find / create docker images you can use for your builds. For popular tools, many have official docker images anyway. It's not a stupid restriction, I have set up both runners using the shell (or whatever it's called exactly) and docker and both were painless & fast to set up and use. More on reddit.com
🌐 r/devops
22
0
June 18, 2021
🌐
GitLab
docs.gitlab.com › gitlab docs › administer › administer gitlab runner › runner executors › custom
The Custom executor | GitLab Docs
GitLab Runner: Used to download/update artifacts and cache. The Custom executor provides the stages to configure job details, prepare and clean up the environment, and run the job script in it.
🌐
Medium
medium.com › devops-with-valentine › a-brief-guide-to-gitlab-ci-runners-and-executors-a81b9b8bf24e
A Brief Guide to GitLab CI Runners and Executors | by Valentin Despa | DevOps with Valentine | Medium
November 18, 2021 - The GitLab Runner receives instructions from the GitLab server in regards to which jobs to run. Each runner must be registered with the GitLab server. Runner Executor: each Runner will define at least one executor.
🌐
GitLab
docs.gitlab.com › gitlab docs › install › configure gitlab runner › advanced configuration
Advanced configuration | GitLab Docs
The prepare_timeout setting limits ... phases: Executor initialization (prepare_executor): The runner sets up the execution environment, such as starting a Docker container, scheduling a Kubernetes pod, or connecting over SSH....
🌐
GitLab
docs.gitlab.com › gitlab docs › administer › administer gitlab runner › getting started
Get started with GitLab Runner | GitLab Docs
GitLab Runner executors are the different environments and methods that GitLab Runner can use to execute CI/CD jobs. They determine how and where your pipeline jobs actually run.
🌐
Medium
medium.com › ci-t › a-practical-guide-to-gitlab-runner-custom-executor-drivers-bc6e6562647c
A practical guide to GitLab Runner Custom Executor drivers | by Ricardo Mendes | CI&T | Medium
July 29, 2020 - But what if you want to run the CI/CD jobs in an infrastructure that is not supported by the native executors or to scale your Runners fleet in a custom strategy that better fits your needs? There is a special type of executor that helps to tackle this: the Custom Executor. This gives you the control to create your own executor by configuring GitLab Runner to use some executable to provision, run, and clean up your environment.
🌐
Reddit
reddit.com › r/gitlab › confused with gitlab-runner and executor
r/gitlab on Reddit: Confused with gitlab-runner and executor
May 5, 2023 -

When someone suggests to use docker executor, does it mean that we also have to run gitlab-runner as a docker container?

I have another question. We run gitlab-runner register to register an executor. Let's assume I installed gitlab-runner in an AWS EC2 instance. I believe I can register executors multiple times from that same machine. For example, I can register it as a shell executor, or as a docker executor. But I think performance might be impacted if builds run at the same time and it calls those 2 executors running on the same machine. Correct?

Top answer
1 of 1
6
First q - nope! When people refer to the executor, they (should) only mean "the mechanism of which will be the acting environment for your pipeline commands to run in". If you use a shell-executor, it could be performed by the docker install or the binary install of the runner, and same for the docker-executor 2. Performance can be a bit of an issue - the trade off with dockerized builds are that 1 computer/VM can run multiple, simultaneous, totally isolated pipelines, whereas a shell runner can only safely run 1. While performance might drop off, there's the gain of not having to have several machines/vm's created (much more overhead from a full-os vs just a container). For context, I see network latency increase when I use a docker-windows executor running 5 different queued pipeline tasks on this 1 machine (16gb Ram, 8 CPU) and some CPU drop off, but if I were to spin up 5 different machines to handle this same work load (5 pipeline tasks queued at the same time, I'm probably not fully utilizing the resources but I definitely am hogging more resources that could be leveraged. Now taking into consideration that you have both a shell & a docker executor, it would depend on what kind of code you're pipeline is working with and how a build consumes resources - if you are building a java project, it would be hard to see a performance impact unless it's true massive, but for something like NodeJS with tons of packages, it would definitely cause impact if the shell runner executed a job while the docker executor took a few jobs as well, if say, using that same 16gb RAM & 8 Core machine. For some organization, I've kept shell runners on their own machine, because if someone edits their gitlab ci file to do something that affects the shell runner permanently (like "sudo apt upgrade", or something that causes a variable to linger beyond the build that affects the next build) then I have to worry about fixing that issue. There are good use cases for the shell runners though, but the docker executors provide the quickest way to scale pipelines to 100+ repositories, averaging 10 builds an hour during work hours (20 min pipeline execution). In some sort of motivational stance, if you have the extra machine power waiting around, I think you should be adding more features into your pipeline, which would then show you the need for the simultaneous task execution. Gitlab 's SAST jobs, coverage testing, linting, or even live execution of code for smoke tests or things of that nature could be explored to add value to the pipelines. All those combined would create a lengthy pipeline execution time, so there's more reason to attempt to run as many as these in parallel as possible.
Find elsewhere
🌐
GitLab
docs.gitlab.com › gitlab docs › administer › administer gitlab runner › runner executors › shell
The Shell executor | GitLab Docs
The Shell executor is the simplest executor configuration for GitLab Runner. It executes builds locally on the machine where GitLab Runner is installed, so all dependencies must be installed on the same machine. It supports all systems on which the Runner can be installed.
🌐
GitLab
docs.gitlab.com › gitlab docs › administer › administer gitlab runner › register a runner
Registering runners | GitLab Docs
sudo gitlab-runner register \ --non-interactive \ --url "https://gitlab.com/" \ --token "$RUNNER_TOKEN" \ --executor "docker" \ --docker-image alpine:latest \ --docker-pull-policy "if-not-present" \ --description "docker-runner"
🌐
Gitlab
docs.gitlab.co.jp › runner › executors › custom.html
The Custom executor | GitLab
GitLab Runner provides the Custom executor for environments that it doesn’t support natively, for example, Podman or Libvirt.
🌐
GitLab
docs.gitlab.com › gitlab docs › install › configure gitlab runner › commands
GitLab Runner commands | GitLab Docs
When GitLab Runner is installed on a host and runs local executors, it starts additional processes for operations like downloading or uploading artifacts, or handling cache. These processes are executed as gitlab-runner commands, which means that you can use pkill -QUIT gitlab-runner or killall QUIT gitlab-runner to kill them.
🌐
KodeKloud Notes
notes.kodekloud.com › architecture & core concepts › types of executors
Types of Executors - KodeKloud
January 28, 2026 - GitLab CI/CD runners use executors to define isolated environments for pipeline jobs, ensuring consistency and repeatability across different runner hosts.
Author: veertuinc
🌐
GitHub
github.com › cirruslabs › gitlab-tart-executor
GitHub - cirruslabs/gitlab-tart-executor: GitLab Runner executor to run jobs in Tart VMs · GitHub
GitLab Runner executor to run jobs in Tart VMs. Contribute to cirruslabs/gitlab-tart-executor development by creating an account on GitHub.
Author: cirruslabs
🌐
DEV Community
dev.to › zenika › gitlab-runners-which-topology-for-fastest-job-execution-5bma
🦊 GitLab Runners: Which Topology for Fastest Job Execution? - DEV Community
April 29, 2026 - After analyzing all runner types, Shell and Docker executors on single servers offer the fastest job execution for most teams. ... Choosing the right GitLab Runner topology depends on your specific needs, but if minimizing job execution time is your primary concern, Shell or Docker executors on well-provisioned single servers consistently deliver the fastest jobs.
🌐
GitLab
docs.gitlab.com › gitlab docs › administer › administer gitlab runner › runner executors › instance
Instance executor | GitLab Docs
Generally available in GitLab Runner 17.1. The instance executor is an autoscale-enabled executor that creates instances on demand to accommodate the expected volume of jobs that the runner manager processes.