とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

GitLabの最近の動向

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-sessiondokcer 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

次回、その辺を書けたらと思います。