とほほのGitLab入門

目次

GitLabとは

インストール

Docker を用いてコンテナ起動するのが簡単です。

HOST_NAME=gitlab.example.com
PORT_HTTP=3000
PORT_SHTTP=10443
PORT_SSH=10022

GITLAB_HOME=`pwd`

mkdir -p $GITLAB_HOME/config
mkdir -p $GITLAB_HOME/logs
mkdir -p $GITLAB_HOME/data

# SELinuxを有効にしている場合は下記を実施
chcon -R -t container_file_t $GITLAB_HOME/config
chcon -R -t container_file_t $GITLAB_HOME/logs
chcon -R -t container_file_t $GITLAB_HOME/data

docker run --detach \
  --hostname ${HOST_NAME}:${PORT_HTTP} \
  --publish ${PORT_SSH}:22 \
  --publish ${PORT_HTTP}:${PORT_HTTP} \
  --publish ${PORT_SHTTP}:443 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ee:latest

コンテナ起動後、ログインできるようになるまでしばらく時間がかかります。http://{サーバアドレス}:3000/ に Webアクセスできるようになるまで数分、アクセスできるようになってもさらに数分間は 502 エラーが返されます。初期設定が完了するとログイン画面が表示されます。root の初期パスワードは下記を実行することで取得できます。24時間経過すると削除されますので注意してください。

# docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

ユーザー(Users)

ユーザーを作成する

[Menu]-[Admin]-[Overview]-[Users]-[New user]

ユーザーのパスワードを設定する

[Menu]-[Admin]-[Overview]-[Users]-(User name)-[Edit]

自分のパスワードを設定する

[User]-[Preference]-[Password]

自分の言語を設定する

[User]-[Preference]-[Preferences]-[Localization]-[Language]

自分のタイムゾーンを設定する

[User]-[Preference]-[Profile]-[Time settings]

SSHで接続する

下記で SSH の公開鍵(id_rsa.pub)と秘密鍵(id_rsa)を作成する。

# ssh-keygen -t rsa -b 2048

作成した公開鍵(~/.ssh/id_rsa.pub)の内容を [ユーザー設定(User Settings)]-[SSH Keys]-[Key] に貼り付けて [Add key]

グループ(Groups)

グループはユーザーの集合です。グループ配下にサブグループを作成することができます。

グループを作成する

[Menu]-[Groups]-[Create group]

グループにユーザーやグループを招待する

(Group Menu)-[Group information]-[Members]-[Invite member]

プロジェクト(Projects)

プロジェクトはユーザーまたはグループ配下に作成することができます。

プロジェクトを作成する

[Menu]-[Projects]-[Create new project]

プロジェクトを削除する

(Project)-[Settings]-[General]-[Advanced]-[Expand]-[Delete project]

プロジェクトにユーザを招待する

(Project)-[Project Information]-[Members]-[Invite member]

ブランチ(Branches)

ブランチは、ひとつのプロジェクトに対していくつかのバージョンを管理するために使用します。一番メインとなるブランチは main です。以前は master と呼んでいましたが、master という単語が人種差別的な意味合いを持つことから最近は main ブランチに変更されました。例えば main ブランチが本番環境、staging ブランチがステージング環境、develop/v1.0 がバージョン 1.0 の開発環境、feature-xxx ブランチが機能開発用、hotfix-xxx ブランチがバグ修正用などのバージョンを管理します。何種類かのフローパターンがあるので、詳細は GitLab Flow などを検索してみてください。

ブランチを作成する

(Project)-[Repository]-[Branches]-[New branch]

ブランチを削除する

(Project)-[Repository]-[Branches]-[Delete branch]

子ブランチを親ブランチにマージリクエストする

(Project)-[Repository]-[Branches]-[Merge request]

マージリクエストを受け付けてマージする

(Project)-[Repository]-[Branches]-(Merge request)-[Merge]

システム設定

メールを送信できるようにする

下記を参考に /etc/gitlab/gitlab.rb を編集し、gitlab-ctl reconfigure を実行する。

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.example.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "foo@example.com"
gitlab_rails['smtp_password'] = "********"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_pool'] = false
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'foo@example.com'

GitLab Runner

GitLab Runnerとは

GitLab Runner は CI/CD 機能のひとつで、コミットなどが行われた際に、構文チェック、ユニットテスト、コンパイルなどの自動作業を行います。GitLab サーバと別に、GitLab Runner を動作させるマシンを用意します。最もシンプルな、GitLab から GitLab Runner 上の Shell をキックする例を示します。

[GitLab] - [GitLab Runner(Shell)]

GitLab Runner からさらに SSH で別マシン上でジョブを実行したり、Docker, Kubernetes などでコンテナを生成してジョブを実行することもできます。

GitLab Runnerをインストールする

(プロジェクト)-[Settings]-[CI/CD]-[Runners] から Specific runners の URL とトークンを確認します。

URL: http://gitlab.example.com:3000/
Token: AbcDEfgHiJKlKMoPqRsT

GitLab Runner となるマシン上で GitLab Runner をインストールします。

# curl -L --output /usr/local/bin/gitlab-runner \
    https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# chmod +x /usr/local/bin/gitlab-runner
# useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
# gitlab-runner start
# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=9991 revision=58ba2b95 version=14.2.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab.example.com:3000/		# 上記で確認したURL
Enter the registration token:
AbcDEfgHiJKlKMoPqRsT			# 上記で確認したトークン
Enter a description for the runner:
[centos7a]: runner-1			# GitLabのRunner一覧で表示される名前
Enter tags for the runner (comma-separated):
					# とりあえず空欄
Registering runner... succeeded runner=M-sY-PrV
Enter an executor: custom, docker-ssh, parallels, docker-ssh+machine, kubernetes, docker, shell, ssh...
shell					# shellを選択
Runner registered successfully. Feel free to start it, but if it's running already the ...

Dockerコンテナ版の GitLab Runner を使用する場合は下記の様に準備します。

# docker run -d -it --name runner1 -h runner1 gitlab/gitlab-runner
# docker exec -it runner1 /bin/bash
# chown gitlab-runner /home/gitlab-runner
# echo "192.168.2.124 gitlab.example.com" >> /etc/hosts	# 必要に応じて
# gitlab-runner register
(設定内容は上記参照)

再度 (プロジェクト)-[Settings]-[CI/CD]-[Runners] を確認すると Runner が登録されています。

.gitlab-ci.ymlを用意する

次にプロジェクトの直下に .gitlab-ci-yml ファイルを作成します。

job1:
  script: echo "Execute Job-1"

job2:
  script: echo "Execute Job-2"

.gitlab-ci.yml の詳細は下記を参照してください。

GitLab Runnerを実行する

プロジェクトに対して何らかのファイルを push するとジョブが自動実行されます。ジョブの実行結果は (プロジェクト)-[CI/CD]-[Pipelines] で確認することができます。