タイトルの通り、Docker上にGitlabとGitlab-Runnerを構築し、GitlabのリポジトリへのpushでGitlab-Runnerをはしらせるまで、いろいろな記事を参考にしてうまくいったので記録を残しておきます。
ほんの一か月前、Dockerに初めましてしたばかりなので、苦労しました。
参考にした記事
- docker-compose.yml
https://qiita.com/ronkabu/items/9643e578c1e3b8ee3043 - Gitlab-Runner register
https://ccie-go.com/gitlab-cicd-install/
筆者の環境
- OS Windows10
- Docker for Desktop version 20.10.14
手順
1,Docker-Composeの準備
適当なフォルダを用意し、docker-compose.ymlファイルを作ります。
私はhakuchangitlabというフォルダ名にしました。
docker-compose.ymlの中身は以下のサイトにあるYAMLファイルををコピペしますが、一行だけ書き換えました。
書き換えたのは上から4行目の、labのイメージです。
上記のサイトのイメージはgitlab-eeを使用しているのですが、gitlab-ceに変えました。
version: '3.6'
services:
lab:
image: 'gitlab/gitlab-ce:latest' ←変更後
restart: always
hostname: 'gitlab.my.com'
docker-compose.ymlができたら保存して、コマンドプロンプトからhakuchangitlabフォルダまで移動します。
では、docker-compose up -d コマンドでdocker composeを構築します。
upが終わったらdocker psで確認してみます。
gitlab-runnerもgitlab-ceもSTATUSがUPになっていれば大丈夫です。gitlab-ceは(health:starting)が(health:healthy)になるまで待ちます。大体2、3分かかります。
healthyになったら、http://localhost:8080 にアクセスしてみます。
下の画面のように、GitlabのSign inページがつながれば成功です。
2 Gitlab リポジトリ
GitlabにSign inします
初期パスワードをgitlabコンテナから確認します。
docker psコマンドでgitlabのコンテナのIDを確認します。
コンテナに以下のコマンドで入ります。
docker exec -it コンテナのID /bin/bash
gitlabにログインするパスワードは/etc/gitlab/initial_root_passwordにあるのでcatで中を見てみます。
黄色で隠しているところがpasswordなので、gitlabのSign inページのパスワードにコピーします。スペースもコピーされてしまうのでご注意。
ユーザネームはrootを打ちます。
次はプロジェクトを作ってクローンしてみます。
New Project → create blank projectからプロジェクトを作ります。
私はプロジェクト名をproproにしました。
ここでProject URLのやじるしの部分をrootに変更します。
propro プロジェクトができました。
このリポジトリをクローンしてみます。
てきとうなディレクトリの中で以下のコマンドでcloneできます。
git clone http://localhost:8080/root/リポジトリ名.git
cloneのときユーザ名とパスワードを求められるので、gitlabにサインインするときに使ったrootとコンテナ内のinitial_root_passwordのパスワードを入れます。
プロジェクトができたてでクローンすると失敗するので何回かcloneしてみてください。
3 Gitla-runnerをGitlabに登録
Gitlabでリポジトリができたので、Gitlab-runnerを登録して使えるようにしたいと思います。
参考にしたページは以下のページです。
まず、gitlabから登録に必要な情報を確認します。
さっきつくったプロジェクトの左のSetting > CI/CDをクリック
Runnersをクリックする。Specific runnersにURLとTOKENがあります。必要なのは赤線で隠してあるこのTOKENです。
TOKENを確認したら、Gitla-runnerを登録します。
gitlab-runnerのコンテナに入ります。
docker ps コマンドでgitlab-runnerのコンテナIDを確認し↓
以下のコマンドでgitlab-runnerのコンテナに入ります。
docker exec -it コンテナID /bin/bash
コンテナ内にはいったら、以下のコマンドで登録を開始します。
gitlab-runner register
リポジトリの内容を登録します。
重要なのは最初のEnter The instance URLで、http://gitLab/ をうつこと。
トークンは先ほど確認したTOKENをうつ。
Enter an Executerは今回Dockerを、Enter the defuult docker imageは
ruby:2.7を指定しました。
成功したら、次に/etc/gitlab-runner/config.tomlを編集します。
その前に、docker netowrk lsでネットワークを確認すると
gitlab-netowrkがdocker composeのネットワークです。
/etc/gitlab-runner/config.tomlを編集します。gitlab-runnerコンテナに入り、
vi /etc/gitlab-runner/config.toml
で編集。ちなみにViがなかったので、apt-get updateしてからapt-get install viもしくはvimでインストールしました。
config.tomlファイルを開いたら、写真の一番下の行のように、先ほど確認したネットワークをnetwork_mode = "ネットワーク"で追加します。
保存して閉じたら。コンテナを抜けます。
コンテナの設定ファイルを書き換えたので、反映するためにDocker composeをリスタートします。
docker compose restart
http://localhost:8080 を確認します。リスタートしたのでまた2,3分待ちます。
先ほどのRunnersを確認すると、Avaibale specific runnersにrunnerが登録されているのがわかります。Editを押します。
タグがなくてもCIを実行できるように、Run untagged jobsをチェックしておきます。
4 CIの実行
実際にCIでHello Worldしてみます。
先ほどcloneしたリポジトリの中に .gitlab-ci.ymlファイルを作ります。
.gitlab-ci.ymlの中身は、ちゃんとGitlab-Runnerが動くか確認する多面いhello Worldを表示させるための簡単なジョブを書いてます。
stages:
- echo
echo-job:
stage: echo
script:
- echo "Hello World!"
.gitlab-ci.ymlを作ったらコミットし、pushします。
Gitlabを見てみるとGitlab-runnerが実行されてHelloWorldが出ました~。