これは何?
要約
GitLabのCI/CDパイプライン実行を担うgitlab Runnerには、複数のexecutor(パイプライン実行環境)がある。
virtualbox executorに関する日本語の情報が少なかったため記載。
VMに可能なことはほぼすべて可能であり、スナップショットから実行するため、安定して同じ結果が得られます。
例えば、CI/CDのユースケースとして、
巨大なmavenプロジェクトでdocker imageをbuild, pushするといった用途には、docker executorより向いていると思われます。
(docker でもdoodで出来なくはない)
shell executorでも可能ですが、セキュリティや冪等性に難があるため、このようなユースケースの場合、virtualbox executorが向いています。
蛇足ですが、KVMを使っているproxmox上では特段の設定を必要とせず、ネストした仮想化が使えた。
動作に関して
virtualbox executorは、VMの制御以外はssh executorとほぼ同じ挙動になるようで、
単にVMに対してSSHを行っているだけのよう。
Runnerのインストール・実行
インストール
arch=amd64
curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_${arch}.deb"
sudo dpkg -i gitlab-runner_${arch}.deb
systemdに再登録
virtualboxのVMを作ったユーザーを指定
本来これだけで良いハズだが、VMが存在しないと言われてしまったので、.serviceファイルにUser, Groupを追記
your_username=user
sudo gitlab-runner uninstall
sudo gitlab-runner install --user $your_username --config $HOME/.gitlab-runner/config.toml
sudo nano /etc/systemd/system/gitlab-runner.service
# または
sudo sed -i "s/\[Service\]/\[Service\]\nUser\=$your_username\nGroup\=$your_username\n/" /etc/systemd/system/gitlab-runner.service
VMの作成
とりあえずvirtualboxとvagrantのインストール
sudo apt-get install -y vagrant virtualbox
vagrantでVMを作成
mkdir executor_vm
cd executor_vm
vagrant init generic/ubuntu2004
# 適当に編集
# VM名と、GitLabへの名前解決、ciで必要なツールなど
nano Vagrantfile
vagrant up
Runnerの登録
対話、非対話形式に問わず最低限、
- gitlabのURL
- gitlabのトークン
- executor
- VM名
- VMのユーザー名
- VMのパスワード
を指定。
手元の実験環境では、--ssh-disable-strict-host-key-checking "true"
を指定しないとVMへのSSHに失敗した。
それよりしたの設定項目は任意。
runner登録の例
URL=" your gitlab url "
TOKEN=" your token "
VM_NAME=" your vm name "
VM_USER="your vm user"
VM_PASS="your vm password"
# virtualboxのVMを作ったユーザーで実行している点に留意
gitlab-runner register \
--non-interactive \
--url "$URL" \
--registration-token "$TOKEN" \
--executor "virtualbox" \
--virtualbox-base-name "$VM_NAME" \
--ssh-user "$VM_USER" \
--ssh-password "$VM_PASS" \
--ssh-disable-strict-host-key-checking "true" \
--description "virtualbox-runner" \
--maintenance-note "Free-form maintainer notes about this runner" \
--tag-list "virtualbox" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"