gitlab runners and ci – getting started

intro

Before trying to use GitLab runner (shell) in anger, I wanted to peek under the hood – it’ll make things easier later.

I’ll stash more information here if it looks useful.

Docs:

One of a number of posts on GitLab CI, see the gitlab-runner tag.

.gitlab-ci.yml

This is the basis for gitlab ci, and by default it goes in the root of the repository.

As of 9.4, it can be moved and renamed, which is nice: one less file littering the root of the repo.

  • Within the repository, navigate to settings || CI / CD
  • Find Custom CI config path.
  • Pick your designed folder and filename.

If you add a file via the GUI, you can take a shortcut and add a template

  • From new file, select .gitlab-ci.yml from the templates list.
  • Select from the list of languages etc. what you’re developing.
  • There’s not one for puppet, so no shortcut to had there.

environment variables and context

I started with the following CI definition to take a look around

before_script:
  - /usr/bin/echo 'before script'
  - /usr/bin/env | /usr/bin/sort
  - /usr/bin/pwd
  - /usr/bin/ls -al

after_script:
  - /usr/bin/echo 'after script'
  - /usr/bin/env | /usr/bin/sort
  - /usr/bin/pwd
  - /usr/bin/ls -al

test1:
  stage: test
  script:
    - /usr/bin/echo 'test1'
    - /usr/bin/env | /usr/bin/sort
    - /usr/bin/pwd
    - /usr/bin/ls -al
  • this results in a pipeline with a single ‘box’ called test1; this is the job name
  • A directory structure is created: /home/gitlab-runner/builds/XCHrAuVS/0/puppet/control-repo
  • puppet/control-repo are the group and repository name; and that’s where the git repo is cloned (initially) and fetched (by default) for each run.
# git branch
* (detached from a32a6a6)
# git branch --remote -v
  origin/development       dbf4e5c (commit message)
  origin/gitlabrunner2     a32a6a6 WIP: ci
  origin/production        eeb6160 (commit message)
# git commit --oneline
a32a6a6 WIP: ci
96dcb2c WIP: ci
af15796 WIP: ci
[..]
  • There’s quite a lot of environment variables available; such as commit information:
CI_COMMIT_SHA=a32a6a6d0982c052275ff7824bbfad125ce5e953
CI_COMMIT_BEFORE_SHA=96dcb2c709bc2d493128c9a9b0c573fb78f7afab
CI_COMMIT_MESSAGE=WIP: ci
CI_COMMIT_TITLE=WIP: ci
CI_COMMIT_DESCRIPTION=
  • .. context ..
CI_BUILDS_DIR=/home/gitlab-runner/builds
CI_CONFIG_PATH=ci/definition.yml
CI_JOB_NAME=test1
CI_JOB_STAGE=test
CI_PROJECT_DIR=/home/gitlab-runner/builds/XCHrAuVS/0/puppet/control-repo
CI_SERVER_VERSION=11.10.3
CI_SERVER_VERSION_MAJOR=11
CI_SERVER_VERSION_MINOR=10
CI_SERVER_VERSION_PATCH=3
GITLAB_USER_EMAIL=john.smith@example.com
GITLAB_USER_ID=2
GITLAB_USER_LOGIN=john
  • and other shell variables which help describe the situation..
HOME=/home/gitlab-runner
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin:/home/gitlab-runner/.local/bin:/home/gitlab-runner/bin
USER=gitlab-runner
PWD=/home/gitlab-runner/builds/XCHrAuVS/0/puppet/control-repo
OLDPWD=/home/gitlab-runner
  • The runner switches to the account before running all aspects of the pipeline.
  • Running something as root would require sudo rules; eg: installing dependencies in before_script.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s