Home > Archives > 2023年01月10日

2023年01月10日

docker で GitLab CI 用の Runner を用意する

GitLab CI 用の Runner を用意するのに docker 使うのが楽そうなので docker engine のインストールからやってみた.

とりあえず,https://docs.docker.com/engine/install/ubuntu/ に沿ってリポジトリを追加してパッケージをインストール:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

そしてテスト:

sudo docker run hello-world

それっぽい出力が見えれば docker engine の準備は OK.

んで.あとは docker コマンドで適当にやれば良いと.とりあえず https://docs.gitlab.com/runner/install/docker.html に沿ってコンテナを動かしてく.

まずは GitLab Runner の設定ファイルを保存するディレクトリをホストに用意.これをコンテナ側の /etc/gitlab-runnner にマウントすることになる.

sudo mkdir -p /srv/gitlab-runner/config

そして Runner のコンテナを起動(Runner のコンテナ内からホスト側の docker を叩けるように,ホストの /var/run/docker.sock を同じ位置にマウントする):

sudo docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner:latest

んで,この状況だと設定ファイルがなくて動かない(エラーを吐きまくってる)ので,設定ファイルの作成をする:

sudo docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

こっちは -d を付けてないのでターミナル上で色々と聞かれるので諸々打ち込む.coordinator URL とか token とかは GitLab の Admin Area の OVerview の Runners にある "Register an instance runner" の辺りで情報が取れる(そっちだとコマンドラインだけで済みそうな実行方法が書いてあるっぽい気もする).executer は docker にでもしとくのが楽な気がする(スケールさせず,.gitlab-ci.yml の image 設定で動かすコンテナを指定可能).

作成された設定ファイルを読み込むように,先に走らせてたコンテナ内の runner をリスタート(gitlab-runner という名前のコンテナで gitlab-runner というコマンドを実行というわかりにくさ):

sudo docker exec gitlab-runner gitlab-runner restart

さて,あとはデフォルトの設定ファイルの使いにくいところを修正.とりあえず job のたびにコンテナイメージを pull されるのもあれなので pull しないでローカルのを使えるように設定ファイル(/srv/gitlab-runner/config/config.toml)の [runners.docker] セクションにポリシーを追加:

  allowed_pull_policies = [ "always", "if-not-present", "never" ]

これで後は各プロジェクトの .gitlab-ci.yml のイメージ指定のとこで pull_policy に if-not-present とか書いとけばローカルにあるイメージを使ってもらえる.CI 用のカスタムのイメージを使いたいけど Docker Hub に登録するのもメンドイという場合にも,ホスト上で commit しといたカスタムイメージを指定して pull_policy を never にすりゃいける:

image:
  name: "ubuntu:22.04-custom"
  pull_policy: never

あとはついでに設定ファイルの並行実行数の指定も変更しとくとよい?:

concurrent = 4

さて,これで Runner の準備は OK かな.docker engine のインストールが微妙にメンドイ感じに見えてたけど特に引っかかるところもなかったので楽といえば楽.

閑話休題.

カスタムした docker イメージを作るのもメモっとく.Dockerfile をちゃんと用意するのが正しい気もするけれど,インタラクティブにやる方法のメモ.

とりあえず,ホストでベースのイメージを起動.--name で名前つけとくと楽?:

sudo docker run --name ubuntu_2204_modifying -it ubuntu:22.04 bash

そしてそのままコンテナ内で諸々の準備をする.apt でなにか突っ込むとか:

apt update
apt install -y g++ curl make
exit

コンテナのシェルを抜けたらコンテナが止まるので,その状態を commit してイメージにする:

sudo docker commit ubuntu_2204_modifying ubuntu:22.04-custom

これで準備完了.

閑話休題.

docker run と docker exec を間違えるのでメモ.run は新しいコンテナを作って(コマンドを)実行.そして exec は起動中の既存のコンテナ上でコマンドを実行.run = create + start + exec という感じ?

Home > Archives > 2023年01月10日

Search
Feeds

Page Top