Skip to content

Ubuntu に GitLab Runner をインストールする

(コンテナでは無い) Ubuntu を GitLab の Runner として登録する方法は Install GitLab Runner manually on GNU/Linux に記載されています。 今回は Runner 登録方法の要点だけをメモしておきます。

検証環境

対象 バージョン
Ubuntu 22.04.4LTS
gitlab-runner 16.10.0

Runner のインストールと実行

Runner として登録したい Ubuntu 上で以下のコマンドを実行して Runner のクライアントをインストールします。

curl -L --output /usr/local/bin/gitlab-runner "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-linux-amd64" && \
chmod 755 /usr/local/bin/gitlab-runner

root ユーザを利用する場合

以下を実行します。

1
2
gitlab-runner install --user=root --working-directory=/root && \
gitlab-runner start

標準ユーザを利用する場合

Runner 実行専用ユーザ (gitlab-runner) を作成し、そのユーザで Runner を実行します。 但し、Install GitLab Runner manually on GNU/Linux の手順で作業すると GitLab 上から実行した Job が以下のエラーで終了してしまいます。

ERROR: Job failed: prepare environment: exit status 1. Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information

この問題を回避する為、gitlab-runner ユーザのホームディレクトリにある .bash_logout を無効化します。 このファイルを削除しても良いのですが、今回は移動 (名前の変更) をすることで無効化します。尚、mv /home/gitlab-runner/.bash_logout{,.org}mv /home/gitlab-runner/.bash_logout /home/gitlab-runner/.bash_logout.org と等価です。

useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash && \
mv /home/gitlab-runner/.bash_logout{,.org} && \
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner && \
gitlab-runner start

これで Runner の実行は完了です。 systemctl status gitlab-runner.service でサービスの状態を確認すると自動起動設定もされていました。

# systemctl status gitlab-runner.service
● gitlab-runner.service - GitLab Runner
     Loaded: loaded (/etc/systemd/system/gitlab-runner.service; enabled; vendor preset: enabled)

尚、現時点ではバージョン 16.10.0 がインストールされました。

# gitlab-runner --version
Version:      16.10.0
Git revision: 81ab07f6
Git branch:   16-10-stable
GO version:   go1.21.7
Built:        2024-03-21T19:43:25+0000
OS/Arch:      linux/amd64

GitLab への Runner 登録

Docker Compose で GitLab / Runner を起動し、CI/CD する の手順に従い、Runner を登録します。 GitLab 上でトークンを発行したら Runner を実行している Ubuntu 側で「GitLab の URL」と「発行された Token」を指定しつつ、以下のように実行します。 実際には GitLab 上で「実行すべきコマンド」が表示されますので、それを Ubuntu 側へ貼り付けて実行するだけです。

gitlab-runner register --url http://10.0.0.1 --token glrt-12345678901234567890

参考

# gitlab-runner --help
NAME:
   gitlab-runner - a GitLab Runner

USAGE:
   gitlab-runner [global options] command [command options] [arguments...]

VERSION:
   18.2.1 (cc489270)

AUTHOR:
   GitLab Inc. <support@gitlab.com>

COMMANDS:
   list                  List all configured runners
   run                   run multi runner service
   register              register a new runner
   reset-token           reset a runner's token
   install               install service
   uninstall             uninstall service
   start                 start service
   stop                  stop service
   restart               restart service
   status                get status of a service
   run-single            start single runner
   unregister            unregister specific runner
   verify                verify all registered runners
   wrapper               start multi runner service wrapped with gRPC manager server
   fleeting              manage fleeting plugins
   artifacts-downloader  download and extract build artifacts (internal)
   artifacts-uploader    create and upload build artifacts (internal)
   cache-archiver        create and upload cache artifacts (internal)
   cache-extractor       download and extract cache artifacts (internal)
   cache-init            changed permissions for cache paths (internal)
   health-check          check health for a specific address
   proxy-exec            execute internal commands (internal)
   read-logs             reads job logs from a file, used by kubernetes executor (internal)
   help, h               Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --cpuprofile value           write cpu profile to file [$CPU_PROFILE]
   --debug                      debug mode [$RUNNER_DEBUG]
   --log-format value           Choose log format (options: runner, text, json) [$LOG_FORMAT]
   --log-level value, -l value  Log level (options: debug, info, warn, error, fatal, panic) [$LOG_LEVEL]
   --help, -h                   show help
   --version, -v                print the version