とほほのGitLab入門
- トップ
- とほほのGitLab入門
- GitLabとは
- リンク
- インストール
- ユーザー(Users)
- グループ(Groups)
- プロジェクト(Projects)
- ブランチ(Branches)
- システム設定
- GitLab Runner
- メニュー体系
GitLabとは
- GitLab Inc.社が開発するGitリポジトリマネージャーです。ギットラボと読みます。
- パブリックサービスである GitHub ライクなリポジトリマネージャーをローカルサイトで運用することができます。
- コミュニティ版(CE:Community Edition)とエンタープライズ版(EE:Enterprise Edition)があります。
- CE版はMITライセンス、EE版は商用ライセンスです。
- EE版をインストールした場合でも、CEに含まれる無料機能はすべて使用可能で、EEに含まれる有料機能を期間限定でお試し利用することができます。お試し期間をすぎるとCE版機能のみを利用できるようになり、ライセンスを購入するとEE機能を利用できるようになります。
- 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時間経過すると削除されますので注意してください。
ユーザー(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)
プロジェクトはユーザーまたはグループ配下に作成することができます。
- https://gitlab.example.com/{user_name}/{project_name}
- https://gitlab.example.com/{group_name}/{project_name}
- https://gitlab.example.com/{group_name}/{sub_group}/{project_name}
プロジェクトを作成する
[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] で確認することができます。
メニュー体系
- ヘッダ
- ロゴ
ホームページを表示します。ホームページに表示する内容は [User Settings]-[Preferences]-[Behavior] で変更することができます。
- Menu
メニューを表示します。
- プロジェクト(Projects)
プロジェクトを検索、一覧表示、作成します。
- グループ(Groups)
グループを検索、一覧表示、作成します。
- マイルストーン(Milestones)
マイルストーンの一覧を表示します。マイルストーンはプロジェクトの大線表で、予定開始日・終了日を持ち、複数のイシューを含みます。
- スニペット(Snippets)
スニペットは再利用可能なコードです。よくつかうコードをスニペットとして登録・一覧・参照することができます。
- アクティビティ(Activity)
最近発生したプッシュ、マージ、イシュー、コメント、Wiki更新、デザイン、チームのアクティビティの一覧を表示します。
- 管理者(Admin)
管理者エリア(Admin Area)メニューを表示します。
- プロジェクト(Projects)
- 新規(New)
- 新規プロジェクト(New project/repository)
新規にプロジェクトを作成します。
- 新規グループ(New group)
新規にグループを作成します。
- 新規スニペット(New snipet)
新規にスニペットを作成します。
- 新規プロジェクト(New project/repository)
- 検索(Search)
プロジェクト、イシュー、マージリクエスト、マイルストーン、ユーザなどを検索します。
- イシュー(Issue)
イシューを検索します。
- マージリクエスト(Marge request)
マージリクエストを表示します。
- あなたにアサインされたもの(Assigned to you)
自分にアサインされたマージリクエストを表示します。
- あなたへのレビューリクエスト(Review request for you)
自分に要求されたレビューリクエストを表示します。
- あなたにアサインされたもの(Assigned to you)
- To-Doリスト(To-Do List)
To-Doリストの一覧を表示します。
- ヘルプ(Help)
ヘルプを表示します。
- 新着情報(What's new)
新機能の紹介などの新着情報を表示します。
- ヘルプ(Help)
ヘルプを表示します。
- サポート(Support)
GitLab のサポートを得るための情報を表示します。
- コミュニティフォーラム(Community forum)
コミュニティフォーラムサイトを開きます。
- キーボードショートカット(Keyboard shortcuts)
キーボードショートカットの一覧を表示します。意外に便利なショートカットが多数あります。
- 新着情報(What's new)
- ロゴ
- 管理者エリア(Admin Area)
管理者メニューを表示します。
- 概要(Overview)
全体に関わるメニューを表示します。
- ダッシュボード(Dashboard)
プロジェクト、ユーザ、グループに関わる数や新着などの全体概要を表示します。
- プロジェクト(Projects)
プロジェクトの一覧・詳細・作成・変更・削除などの管理を行います。
- ユーザー(Users)
ユーザーの一覧・詳細・作成・変更・削除などの管理を行います。
- グループ(Grooups)
グループの一覧・詳細・作成・変更・削除などの管理を行います。
- ジョブ(Jobs)
CI/CD で実行されるジョブの一覧を表示します。
- Runnner(Runners)
CI/CD の Runner(ジョブの実行主体)の一覧を表示します。
- Gitaly サーバー(Gitaly Servers)
Gitalyサーバーの一覧を表示します。Gitaly は Git の中核的なリポジトリ操作を行う RPC サーバです。
- ダッシュボード(Dashboard)
- 分析(Analytics)
使用頻度などの各種分析を行います。
- DevOpsレポート(DevOps Report)
過去30日間の開発(Dev)作業、運用(Ops)作業の傾向値を表示します。
- 使用状況トレンド(Usage Trends)
ユーザー、プロジェクト、グループ、イシュー、マージリクエスト等の時系列的な個数グラフを表示します。
- DevOpsレポート(DevOps Report)
- 監視(Monitoring)
監視に関わる設定を行います。
- システム情報(System Info)
CPU・メモリ・稼働時間・ディスク使用量を表示します。
- バックグラウンドマイグレーション(Background Migrations)
時間のかかるデータ移行処理をバックグラウンドで実行する際の状況を表示します。
- バックグラウンドジョブ(Background Jobs)
バックグラウンドで実行するジョブの統計情報を表示します。
- 正常性チェック(Health Check)
GitLab 自体の正常性をチェックします。また、外部からチェックするための URL を確認します。
- プロファイルの要求(Requests Profiles)
GitLab にプロファイルを記録するためのトークンを参照します。また、記録されたプロファイルを参照します。
- システム情報(System Info)
- メッセージ(Messages)
メンテナンス通知など、全ユーザーの画面や git コマンド実行時に表示されるメッセージを設定します。
- システムフック(System Hooks)
プッシュ、マージリクエストなどのイベントを他システムに HTTP/HTTPS で通知します。
- アプリケーション(Applications)
GitLab を OAuth プロバイダとして使用するアプリケーションを追加します。
- 不正利用レポート(Abuse Reports)
スパムらしきメールを送信したなの不正と思われる挙動の一覧を表示し、必要に応じてユーザーをブロックします。
- サブスクリプション(Subscription)
GitLab 有償版を利用する際のサブスクリプションコードを設定します。
- Kubernetes
コンテナ管理の Kubernetes との連携設定を行います。
- Geo
GitLab のセカンダリとして動作する GitLab Geo の管理を行います。プラチナライセンスが必要です。
- ノード(Nodes)
GitLab Geo のノードを管理します。
- 設定(Settings)
GitLab Geo に関する設定を行います。
- ノード(Nodes)
- デプロイキー(Deploy Keys)
SSH で GitLab にアクセスするための SSH鍵を設定します。
- ラベル(Labels)
イシューやマージリクエストをラベリング・分類するためのラベルを管理します。
- 設定(Settings)
システムに関わる設定を行います。
- 一般General)
システム全般に関わる設定を行います。
- インテグレーション(Integrations)
Redmine連携、Slack連携など、様々なインテグレーション機能を追加します。
- リポジトリ(Repository)
デフォルトブランチ名、ミラーリング、ストレージ設定などのリポジトリ情報を設定します。
- CI/CD
継続的インテグレーションとデリバリー(CI/CD)に関する設定を行います。
- レポート(Reporting)
ボット対策の CAPTCHA 設定や、不正利用を検出した際の送付先などを設定します。
- メトリクスとプロファイリング(Metrics and profiling)
監視(Prometheus)、ログ解析(Grafana)、パフォーマンス、統計などの設定を行います。
- ネットワーク(Network)
ネットワークに関する設定を行います。
- 外観(Appearance)
ロゴ、Favicon、ヘッダ・フッタメッセージ、ログイン画面メッセージなどを設定します。
- 基本設定(Preferences)
システムの基本的な設定を行います。
- 一般General)
- 概要(Overview)
- ユーザー設定(User settings)
ユーザーに関する設定を行います。
- プロフィール(Profile)
ユーザー名、メールアドレス、アイコン、タイムゾーン等の設定を行います。
- アカウント(Account)
二要素認証、ユーザIDの設定を行います。
- アプリケーション(Applications)
GitLab を OAuth プロバイダとして使用するアプリケーションを追加します。
- チャット(Chat)
チャットと連携(?)できるようですが、よくわかりません。
- アクセストークン(Access Tokens)
GitLab API, repository, registry 等にアクセスするためのアクセストークンを発行します。
- メール(Emails)
メールアドレスの設定を行います。
- パスワード(Password)
パスワードを変更します。
- 通知(Notifications)
受け取るメール通知に関する設定を行います。
- SSH 鍵(SSH Keys)
SSH で GitLab にアクセスするための SSH鍵を登録します。
- GPG キー(GPG Keys)
署名付きコミットを行うための GPG キーを登録します。
- 基本設定(Preferences)
ヘッダ色、ソースエディタデザイン、言語、ホームページなどの基本的な設定を行います。
- アクティブ セッション(Active Sessions)
アクティブなセッション(接続元クライアント)の情報を表示します。
- 認証ログ(Authentication log)
ログイン記録などの認証に関わるログを参照します。
- 割当使用率(Usage Quotas)
割り当てられたリソース(パイプラインやストレージ)の現在使用率を表示します。
- プロフィール(Profile)
- プロジェクト(Project)
プロジェクト情報を表示・管理します。
- プロジェクト情報(Project information)
プロジェクト情報を表示・管理します。
- アクティビティー(Activity)
最近発生したプッシュ、マージ、イシュー、コメント、Wiki更新、デザイン、チームのアクティビティの一覧を表示します。
- ラベル(Labels)
イシューやマージリクエストをラベリング・分類するためのラベルを管理します。
- メンバー(Members)
プロジェクトへのアクセスを許可するメンバー(ユーザーやグループ)を管理します。
- アクティビティー(Activity)
- イシュー(Issues)
イシューを表示・管理します。
- リスト(List)
イシューの一覧を表示し、管理します。
- ボード(Boards)
アジャイル開発の カンバン の様にイシューのステータスをドラッグ&ドロップで管理します。
- サービスデスク(Service Desk)
GitLab 自体をサービスデスクとして利用します。エンタープライズエディションで利用できます。
- マイルストーン
マイルストーンの一覧を表示します。マイルストーンはプロジェクトの大線表で、予定開始日・終了日を持ち、複数のイシューを含みます。
- リスト(List)
- マージリクエスト(Merge requests)
マージリクエストの一覧を表示・管理します。
- CI/CD(CI/CD)
継続的インテグレーションとデリバリー(CI/CD)に関する設定を行います。
- パイプライン(Pipelines)
CI/CD のパイプライン(自動化処理の流れ)を管理します。
- エディター(Editor)
パイプラインを編集します。
- ジョブ(Jobs)
パイプラインで実行されるジョブを管理します。
- スケジュール(Schedules)
パイプラインを cron から定期実行します。
- パイプライン(Pipelines)
- セキュリティとコンプライアンス(Security & Compliance)
セキュリティとコンプライアンスに関する設定を行います。
- 監査イベント(Audit Events)
GitLabで発生したセキュリティイベントを記録・参照します。有料機能です。
- 設定(Configuration)
静的脆弱性検証、動的脆弱性検証、ライセンスチェックなどの設定を行います。
- 監査イベント(Audit Events)
- デプロイ(Deployments)
デプロイに関する設定を行います。
- 機能フラグ(Feature Flags)
Unleashを用いて機能フラグ(アプリケーションの一部機能をOn/Offする仕組み)を制御します。
- 環境(Environments)
ステージング環境、本番環境へのリリースを設定します。
- 機能フラグ(Feature Flags)
- モニター(Monitor)
各種のモニタリング機能を利用します。
- メトリクス(Metrics)
Prometheusを用いてデプロイしたアプリケーションのパフォーマンスを監視します。
- ログ(Logs)
デプロイに関するログを管理します。
- トレーシング(Tracing)
Jaegerを用いてアプリケーションのトランザクションをトレースします。
- エラートラッキング(Error Tracking)
Sentryを用いてアプリケーションのエラートラッキングを行います。
- アラート(Alerts)
アプリケーションや監視ツールから GitLab に対して発行されたアラートを管理します。
- インシデント(Incidents)
インシデント(incidentラベルのついたイシュー)を管理します。
- メトリクス(Metrics)
- インフラストラクチャー(Infrastructures)
- Kubernetes clusters
コンテナ管理の Kubernetes clusters との連携設定を行います。
- Serverless platform
GKE や EKS 上の Knative や AWS Lambda などのサーバーレスシステムとの連携設定を行います。
- Terraform
Terraformを用いた自動構築システムと連携します。
- Kubernetes clusters
- パッケージとレジストリ(Packages & Registries)
パッケージとレジストリの管理を行います。
- パッケージレジストリ(Package Registry)
Maven, npm, RPM 等のパッケージツールおよびパッケージレジストリと連携します。
- インフラストラクチャレジストリ(Infrastructure Registry)
Terraform を用いたインフラ構築レジストリと連携します。
- パッケージレジストリ(Package Registry)
- 分析(Analytics)
プロジェクトの分析を行います。
- Value stream
イシュー、コミット、デプロイ数などを表示します。
- Value stream
- Wiki(Wiki)
プロジェクト毎に割り当てられた Wiki を参照・編集します。
- スニペット(Snippets)
よくつかうコードをスニペットとして登録・一覧・参照することができます。
- 設定(Settings)
プロジェクトの各種設定を行います。
- 一般(General)
プロジェクトの一般的な設定を行います。
- インテグレーション(Integrations)
Redmine連携、Slack連携など、様々なインテグレーション機能を追加します。
- Webhooks
プッシュ実行時に Jenkins を起動するなど、Webhook を介した他システムとの連携を設定します。
- アクセストークン(Access Tokens)
GitLab API で使用するアクセストークンを発行します。
- リポジトリ(Repository)
ブランチのアクセス権を設定したりなどのリポジトリの設定を行います。
- CI/CD(CI/CD)
継続的インテグレーションとデリバリー(CI/CD)に関する設定を行います。
- モニター(Monitor)
GitLab の監視やアラート発生時の動作などの設定を行います。
- 一般(General)
- プロジェクト情報(Project information)
- グループ(Group)
グループを表示・管理します。
- グループ情報(Group information)
グループ情報を表示・管理します。
- アクティビティー(Activity)
グループ内で最近発生したプッシュ、マージ、イシュー、コメント、Wiki更新、デザイン、チームのアクティビティの一覧を表示します。
- ラベル(Labels)
イシューやマージリクエストをラベリング・分類するためのラベルを管理します。
- メンバー(Members)
グループに属するメンバー(ユーザーやグループ)を管理します。
- アクティビティー(Activity)
- イシュー(Issues)
イシューを表示・管理します。
- リスト(List)
イシューを表示・管理します。
- ボード(Board)
アジャイル開発の カンバン の様にイシューのステータスをドラッグ&ドロップで管理します。
- マイルストーン(Milestones)
マイルストーンの一覧を表示します。マイルストーンはプロジェクトの大線表で、予定開始日・終了日を持ち、複数のイシューを含みます。
- リスト(List)
- マージリクエスト(Merge request)
マージリクエストの一覧を表示・管理します。
- Kubernetes(Kubernetes)
コンテナ管理の Kubernetes との連携設定を行います。
- パッケージとレジストリ(Packages & Registries)
パッケージとレジストリの管理を行います。
- パッケージレジストリ(Package Registry)
Maven, npm, RPM 等のパッケージツールおよびパッケージレジストリと連携します。
- 依存関係プロキシ(Dependency Proxy)
GitLabをDockerイメージなどのキャッシュプロキシとして利用します。
- パッケージレジストリ(Package Registry)
- 分析(Analytics)
グループの分析を行います。
- 貢献度(Contribution)
イシュー、マージリクエストなどの回数からメンバの貢献度を測定します。有料機能です。
- 貢献度(Contribution)
- 設定(Settings)
グループに関する設定を行います。
- 一般(General)
一般的な設定を行います。
- インテグレーション(Integration)
Redmine連携、Slack連携など、様々なインテグレーション機能を追加します。
- プロジェクト(Projects)
グループに紐づくプロジェクトを表示・管理します。
- リポジトリ(Repository)
ブランチなどリポジトリに関する設定を行います。
- CI/CD(CI/CD)
継続的インテグレーションとデリバリー(CI/CD)に関する設定を行います。
- アプリケーション(Applications)
GitLab を OAuth プロバイダとして使用するアプリケーションを追加します。
- パッケージとレジストリ(Packages & Registries)
GitLab を Maven などのパッケージ管理のプライベートレジストリとして使用する際の設定を行います。
- Webhooks(Webhooks)
グループに関する Webhook を設定します。
- 一般(General)
- グループ情報(Group information)