Run gitlab-ci jobs on your workstation
GitLab CI is awesome. Throw a .gitlab-ci.yml
in your project and gitlab does the rest.
As soon as your .gitlab-ci.yml
grows, you may want to check if everything is right with syntax, etc. You can lint your .gitlab-ci.yml prior pushing, but for me it always ended up in a flood of debugging .gitlab-ci.yml
commits anyways.
gitlab-runner exec¶
Fortunately gitlab-runner has an exec mode which allows you to run and debug jobs on your workstation without registering the runner or commit pollution.
$ gitlab-runner exec --help
Runtime platform arch=amd64 os=linux pid=829705 revision=HEAD version=13.8.0
NAME:
gitlab-runner exec - execute a build locally
USAGE:
gitlab-runner exec command [command options] [arguments...]
COMMANDS:
docker-ssh use docker-ssh executor
parallels use parallels executor
shell use shell executor
ssh use ssh executor
virtualbox use virtualbox executor
custom use custom executor
docker use docker executor
OPTIONS:
--help, -h show help
Install gitlab-runner, select an executer and you're ready to go.
Limitations¶
Unfortunately running gitlab-runner exec
has some limitations.
Some environment variables are missing and must be set by hand (CI_REGISTRY
for example). include
does work only partially.
Example¶
This shows a pipeline-snippet building a python package.
.gitlab-ci.yml
---
image: ${CI_REGISTRY}/docker/python-build:3.3.0
stages:
- test
- build
- release
test:pylint:
stage: test
script:
- pylint --exit-zero -f colorized src/
# [...]
To test jobs in the test-stage
locally, run gitlab-runner exec <executor> <job> <options>
:
gitlab-runner exec docker test:pylint \
--docker-volumes /var/run/docker.sock \
--docker-volumes /tmp/gl-cache \
--docker-cache-dir /tmp/gl-cache \
--cache-dir /tmp/gl-cache \
--env CI_REGISTRY=registry.gitlab.io
Conclusion¶
It is a bummer that you can not use features like artifacs
or include
, maybe this will be a thing in the future. Anyways...
Running gitlab-runner exec
prior committing pipeline related stuff is very easy and reduces commit spam massively in my case. It safes time and keeps my workstation a bit cleaner as a sideeffect, since more and more tools resides within containers.
Links¶
- docs.gitlab.com - GitLab Runner commands
- blog.asksven.io - Testing gitlab-ci pipelines locally
- medium.com - How to Test Gitlab Ci Locally
- www.akitaonrails.com - Running GitLab CI Runner Locally