- 2023-01-10 (Tue) 21:23
- 一般 ソフトウェア ( Linux/coLinux )
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 という感じ?
- Newer: ことはじめ