概要
前回は Gitlab + Container Registry を試してみました
今回は CI と組み合わせて Container Registry を使ってみたいと思います
環境
- macOS 10.14.5
- docker 18.09.2
- Gitlab-ce 12.0.3
- gitlab-runner 12.0.1 (Ubuntu 16.04)
gitlab-runner のインストール
今回は Ubuntu を Runner にします
Shared Runner でも可能ですが Specified Runner のほうが確実です
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
apt -y install gitlab-runner
gitlab-runner の登録
sudo gitlab-runner register -n --url http://gitlab.example.com/ --registration-token e47zbJPKPwroKWF-nu1V --executor shell
token は Gitlab 上で確認できます
Settings -> CI/CD -> Runners -> Expand
「Runner registered successfully」と表示されれば OK です
Gitlab 上のプロジェクトで確認しても Runner が登録されているのがわかると思います
gitlab-runner ユーザに権限を付与
sudo usermod -aG docker gitlab-runner
Insecure Registry の登録
sudo vim /etc/docker/daemon.json
{
"insecure-registries" : ["gitlab.example.com:4567"]
}
sudo service docker restart
/etc/hosts の編集
sudo vim /etc/hosts
172.28.128.1 gitlab.example.com
IP は適宜変更してください
この IP は Vagrant が mac に DHCP で付与している IP になります
Tips: mac 版 gitlab-runner だとうまく動作しなかった
Homebrew で簡単に導入できたので始めは macOS を gitlab-runner にしようとしていたのですがどうもうまく登録できなかったのでやめました
おそらく gitlab-runner として登録する mac の IP がうまく取得/アクセスできないのが原因かなと思います
macOS の場合 moby がいて Gitlab コンテナから見ると送信元の IP が必ず 172.17.0.1 になります
この辺りが怪しそうですが Ubuntu でも同じ IP になったのでよくわかりませんでした
.gitlab-ci.yml 作成
では CI のルールを作成してみます
今回は shell executor なので素直に docker コマンドを並べれば OK です
今回の目的は build してできたイメージを Gitlab Container Registry に push するのが目的なのでそれができるところまでやります
vim .gitlab-ci.yml
before_script:
- env
- echo $CI_BUILD_TOKEN
- docker login -u $CI_REGISTRY_USER -p $CI_BUILD_TOKEN gitlab.example.com:4567
- docker info
build_image:
stage: build
script:
- docker build -t gitlab.example.com:4567/root/test:latest .
- docker push gitlab.example.com:4567/root/test:latest
env はデバッグ用なので不要であれば削除してください
ポイントは before_script
で docker login
している部分です
ログインするユーザはこれまでのように root ではなく $CI_REGISTRY_USER
/$CI_BUILD_TOKEN
を使います
CI 用に Container Registry にログインできる専用のユーザとパスワードが環境変数で渡ってくるのでそれを使いましょう
単純にそれらを使ったほうがセキュアで root のパスワードを平文で .gitlab-ci.yml
に書くのはよろしくないためです
今回は docker build
もするので適当に Dockerfile を作成しましょう
vim Dockerfile
FROM alpine
CMD ["date"]
あとはプロジェクトに push すれば OK です
push 後は自動で CI の内容が Runner で実行されます
git add .
git commit -m "add .gitlab-ci.yml"
git push -u origin master
動作確認
まずは CI が成功したか確認しましょう
CI/CI -> Pipelines を確認すると CI の結果が一覧で見れます
また Pipeline の番号を選択すると詳細が確認できます
最後に Registry を確認するとちゃんとイメージが Gitlab Container Registry に push されているのが確認できると思います
最後に
Gitlab CI と Container Registry を組み合わせて自動で docker イメージをリポジトリに push するところまでやってみました
今回は shell executor の Runner を用意しましたが docker in docker を使った Runner を立ち上げることもできるのでその辺りは環境に応じて変えてもらえればと思います
Runner を準備するのが面倒な場合は管理者であれば Shared Runner を作ってしまえば OK です
0 件のコメント:
コメントを投稿