【Synology】DockerでGitLabのCI/CDを構築してみた
GitLab構築
SynologyにDockerでGitLabのCI/CD環境を作ってみます。
GitLab自体の構築に関しては、下記記事で説明していますので、説明は省きます。
気になる方は下記の記事をご参考ください。
このブログの「inkblogdb.com」ドメインを例にして設定していますので、
ご自身のドメイン等に置き換えてご参考にしてください。
docker-compose.yml
初めにdocker-compose.ymlを載せておきます。
後ほど解説します。
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ee:latest
container_name: gitlab
restart: always
hostname: 'inkblogdb.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://inkblogdb.com:50433'
registry_external_url 'https://inkblogdb.com:50000'
gitlab_rails['gitlab_shell_ssh_port'] = 50022
gitlab_rails['time_zone'] = "Asia/Tokyo"
# Synologyの独自証明書を設定
letsencrypt['enable'] = false
nginx['ssl_certificate'] = "/etc/ssl/certs/gitlab/RSA-fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/ssl/certs/gitlab/RSA-privkey.pem"
ports:
- '50433:50433' # external_url用
- '50000:50000' # registry_external_url用
- '50022:22' # SSH用
volumes:
- './gitlab/config:/etc/gitlab'
- './gitlab/logs:/var/log/gitlab'
- './gitlab/data:/var/opt/gitlab'
# Synologyの独自証明書を反映
- '/usr/syno/etc/certificate/system/default:/etc/ssl/certs/gitlab'
shm_size: '256m'
entrypoint: >
sh -c "
mkdir -p /etc/gitlab/ssl ;
ln -s /etc/ssl/certs/gitlab/RSA-fullchain.pem /etc/gitlab/ssl/inkblogdb.com.crt ;
ln -s /etc/ssl/certs/gitlab/RSA-privkey.pem /etc/gitlab/ssl/inkblogdb.com.key ;
/assets/wrapper
"
gitlab-runner:
image: gitlab/gitlab-runner:latest
container_name: gitlab-runner
restart: always
volumes:
- './gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
depends_on:
- gitlab
Synology特有の注意点・変更点
docker.sock
Synologyにあるdocker.sockをgitlab-runnerに指定してあげます。
パッケージセンターからインストールしたDockerは、上記docker-compose.yml通り/var/run/docker.sock
にあるかと思います。
GitLabがunhealthyになる問題
docker-compose.ymlで初回構築時、いつまでたってもGitLabコンテナが
healthyにならないことがよくありました。
Synologyが悪いわけでは無さそうですが、
コンテナを再起動してあげてしばらく待ってあげると、ちゃんとhealthyになりましたのでご参考までに…。
docker-compose restart
GitLabのコンテナが起動した=healthy状態ではないため、
docker-compose.ymlでGitLabの起動後にrunnerを起動するようにしていますが、正直意味ないかと思います。
depends_on:
- gitlab
Runnerの作成
CI/CDを動かすにあたって、Runnerを作成します。
サイドメニューの左下にある「管理者」ボタンをクリックします。
さらにサイドメニューの「CI/CD」の中の「Runner」をクリックします。
「新規インスタンスRunner」ボタンをクリックします。
新規インスタンスRunner
Tags
タグに任意のタグ名を入力し、タグのないジョブの実行にチェックを入れます。
※だいたいチェックを入れておけばよいと思います。
設定(オプション)
ここは任意で設定したい項目があれば設定してください。
「Runnerを作成」をクリックして作成します。
Runnerの登録
先ほど「Runnerを作成」ボタンを押すと、自動的にRunnerの登録画面が表示されます。
プラットフォーム
オペレーティングシステムは「Linux」を選択します。
ステップ1
画面の通りのコマンドを、DockerのGitLabRunner内で実行します。
docker exec -it gitlab-runner /bin/bash
gitlab-runner register \
--url https://inkblogdb.com:50433 \
--token 画面に表示されているトークン
そのまま下記の通りに進めてください。
※「Enter the default Docker image」というところは、任意に変えていただいてもかまいません
Runtime platform arch=amd64 os=linux pid=26 revision=690ce25c version=17.8.3
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
[https://inkblogdb.com:50433]:
Verifying runner... is valid runner=t1_xxe-J-
Enter a name for the runner. This is stored only in the local config.toml file:
[498eb2969af1]:
Enter an executor: docker, docker+machine, docker-autoscaler, custom, shell, ssh, parallels, virtualbox, instance, docker-windows, kubernetes:
docker
Enter the default Docker image (for example, ruby:2.7):
ruby:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
上記コマンドを下記のようにワンライナーで書くことも可能です。
gitlab-runner register \
--non-interactive \
--url https://inkblogdb.com:50433 \
--executor "docker" \
--docker-image ruby:latest \
--description "docker-runner" \
--token 画面に表示されているトークン
コマンドを打ち終わって
元の画面にこのような画面が出てくると成功です。
まとめ
SynologyでCI/CD環境を作ってみたかったので、GitLabを用いて作ってみました。
CI/CD環境の作り方を調べてみたかったのでよい機会になりました。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。