GitLabの概要
GitLabはいくつかあるGit Serverの選択肢の一つです。GitLab自身は手持ちの環境へのインストールをサポートしており、インストール方法もドキュメントが公開されています。
また、同じコードベースで構築したGitLabがSaaSとして提供されており、Gitlab.com にアカウントを作るだけで利用できます(利用は無料から)。
GitLabはソースコードを管理するだけではなく、DevOps, CI/CD を実現するための機能がオンプレ版無償版GitLabやGitlab.comのフリーアカウントでも利用できます。
オンプレ版GitLabではGitLab Runnerか、KubernetesをGitLabと連携することでGitLab CI/CDが利用可能になります。
ちなみに、SaaS版のGitLab.comの場合は共用のGitLab Runnerが用意されているので、まず始めるならそれを使うことも可能です。もちろん、手持ちの環境にGitLab Runnerをインストールして使うことももちろん可能です。
GitLabとKubernetresの連携で最近変わったこと
GitLabでRunnerを動かすなら、利用できるKubernetesがある場合はKubernetresと連携する方が簡単です。CI/CD処理が必要なタイミングでKubernetes上でPodが生成され、その中で処理が行われ、終わるとPodが消去されます。環境が特定の処理で汚染されることなく、利用できます。
セットアップは以前はGitLabのページから、示された手順に従って入力しておくとKubernetesと連携できましたが、この方法(証明書ベースの連携方法)については現在は非推奨の方法であると書かれています。
現在は二つの方法があるようですが、Helmを使ってインストールする方法が一番簡単です。
Helm chartを使ったセットアップ例
以下はHelm v3を使う場合の例です。Helm v2を使った環境を使っている場合は公式サイトをご覧ください。
helm repo add gitlab https://charts.gitlab.io
次に設定ファイルを作ります。
helm show values gitlab/gitlab-runner > gitlab-runner-values.yaml (雛形を出力) cat gitlab-runner-values.yaml ... gitlabUrl: https://gitlab.com/ runnerRegistrationToken: "kVkx7jpg3tn71EkUqfBK rbac: create: true tags: "myrunner" (上記は最低限変更する箇所)
設定ファイルの準備が終わったら次のように実行すると、Kubernetes上でRunnerのプロセスが動きます。このプロセスが要求に応じてPodを作成し、CI/CDを実行するようになります。
helm install --namespace <NAMESPACE> gitlab-runner -f <CONFIG_VALUES_FILE> gitlab/gitlab-runner
基本的にはこれだけです。namespaceを指定しない場合はdefault Namespaceで実行されます。
OpenShiftには、Operatorを使った方法が提供されています。
GitLabのCI/CDをDockerコンテナで行う
しかし、そもそもKubernertesほど大きなクラスターが必要ない場合は、従来のようにDockerをRunnerとして使うことも可能です。インストール方法としては次のような流れです(以下はUbuntu 18.04 LTS以降を使った場合)。
- Tokenキーを確認する
Runnerのレジストレーション用のTokenは以下で確認します。
- 管理者エリアの概要>Runner
プロジェクト>設定 > CI/CDのRunner
Dockerをインストールする
sudo apt update && sudo apt install docker.io dbus-user-session sudo usermod -aG docker gitlab-runner
dbus-user-session
はdokcer login
を正常に動かすために必要でした。2行目はgitlab-runnerユーザーとして動くRunnerがdockerコマンドをsudoなしで実行するために必要な設定です。
ドキュメントに従って、GitLab Runnerをインストールする
GitLab Runnerをセットアップして、「Docker Executer」として稼働
~$ sudo gitlab-runner register Runtime platform arch=amd64 os=linux pid=4390 revision=5316d4ac version=14.6.0 Running in system-mode. Enter the GitLab instance URL (for example, https://gitlab.com/): http://git-local.maas/ Enter the registration token: DUKEoHj3U77Z8wWd9vc8 Enter a description for the runner: [git-runner]: Enter tags for the runner (comma-separated): runner,docker Registering runner... succeeded runner=DUKEoHj3 Enter an executor: docker+machine, kubernetes, docker, docker-ssh, shell, ssh, virtualbox, custom, parallels, docker-ssh+machine: docker Enter the default Docker image (for example, ruby:2.6): ubuntu:latest Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! ~$ sudo gitlab-runner restart
- 「executor」はどこで動かすかを設定します。色々な環境で実行するのを想定しています。今回はdockerを選択している例を示しています。
- 「tags for the runner」はRunnerを呼び出すためのタグを指定します。複数のタグを設定で来ます。これを後述のファイルに記述するとそのRunnerを使って、CI/CDが実行されます。
GitLabでCI/CDする
GitLabでCI/CDする環境ができたら、あとは使うだけです。
リポジトリーに「.gitlab-ci.yml」というファイルを置いて、ここにCIやCDの処理を書いていきます(以下.gitlab-ci.ymlの例)。
image: alpine:latest pages: stage: deploy script: - echo 'Nothing to do...' artifacts: paths: - public only: - master tags: - docker
テンプレートからクローンしたり、こちらにあるサンプルを使って、CI/CDが体験できるようです。
https://docs.gitlab.com/ee/ci/examples/#gitlab-cicd-examples
次回、その辺を書けたらと思います。