GitLabでアジャイル開発
はじめに
以前に k8s / Rancher で GitLab を構築しました。
当時は 豊富な機能の中から Docker Registry の機能を検証しました。最近ではアジャイル開発でも使える機能もあると耳にして今回に至ります。
というわけで、今回は GitLab を構築してアジャイル開発で使う機能を少し触ってみようと思います。
GitLab 機能的な一覧は以下公式サイトの下段あたりに記載がありました。
環境情報
Kubernetes:v1.20.6
helm:v3.5.4
GitLab EE:13.12.8
※EE パッケージをライセンスなしの機能制限で利用します
※PV に Cephを利用しています
※今回デプロイする GitLab リソース(CPU/Memory/Volume)の最低要件は以下の通り(設定次第で下げることも可)
- CPU Request:2.6 Core
- Memoroy Request:9 GB
- Volume(PV):84 Gi
※cert-manager / nginx-ingress は GitLab の Chart に含まれている物を利用しました
⇒以前の記事で導入したものを利用してデプロイしようとしたのですが、パラメータが複雑で挫折しました・・・
GitLab deploy
GitLab 公式から git clone
して資材をダウンロードし、values.yaml を書き換えていきます。
# 資材ダウンロード
$ git clone https://gitlab.com/gitlab-org/charts/gitlab.git -b v4.12.8 --depth 1
・・・
$ cd gitlab/
# 依存関係がある Chart をダウンロード
$ helm dep update
Getting updates for unmanaged Helm repositories...
...Successfully got an update from the "https://charts.jetstack.io/" chart repository
...Successfully got an update from the "https://grafana.github.io/helm-charts" chart repository
...Successfully got an update from the "https://prometheus-community.github.io/helm-charts" chart repository
...Successfully got an update from the "https://charts.gitlab.io/" chart repository
...Successfully got an update from the "https://charts.bitnami.com/bitnami" chart repository
...Successfully got an update from the "https://charts.bitnami.com/bitnami" chart repository
Saving 11 charts
Dependency gitlab did not declare a repository. Assuming it exists in the charts directory
Dependency certmanager-issuer did not declare a repository. Assuming it exists in the charts directory
Dependency minio did not declare a repository. Assuming it exists in the charts directory
Dependency registry did not declare a repository. Assuming it exists in the charts directory
Downloading cert-manager from repo https://charts.jetstack.io/
Downloading prometheus from repo https://prometheus-community.github.io/helm-charts
Downloading postgresql from repo https://charts.bitnami.com/bitnami
Downloading gitlab-runner from repo https://charts.gitlab.io/
Downloading grafana from repo https://grafana.github.io/helm-charts
Downloading redis from repo https://charts.bitnami.com/bitnami
Dependency nginx-ingress did not declare a repository. Assuming it exists in the charts directory
Deleting outdated charts
values.yaml
を修正していきます。
-
global.hosts.domain
:アクセス用のドメイン名。GitLab へのアクセスはgitlab.<domain>
でアクセスすることになる- 今回はワイルドカードDNSサービスを使って、Node の IP でアクセスできるように指定
- nip.io
-
global.ingress.configureCertmanager
:事前に用意されている証明書を利用するため、ingress での cert-manager を利用しない -
certmanager.install
:cert-manager を利用しないのでインストールしない -
nginx-ingress.controller.service.~
:NodePort を利用したコンテナアクセスの設定 -
gitlab-runner.install
:自己署名証明書だとgitlab-runner
が利用できないのでインストールしない
参考
@@ -49,7 +49,7 @@ global:
allowClusterRoles: true
## https://docs.gitlab.com/charts/charts/globals#configure-host-settings
hosts:
- domain: example.com
+ domain: 192.168.10.71.nip.io
hostSuffix:
https: true
externalIP:
@@ -64,7 +64,7 @@ global:
## https://docs.gitlab.com/charts/charts/globals#configure-ingress-settings
ingress:
- configureCertmanager: true
+ configureCertmanager: false
annotations: {}
enabled: true
tls: {}
@@ -693,7 +693,7 @@ certmanager:
nameOverride: cert-manager
# Install cert-manager chart. Set to false if you already have cert-manager
# installed or if you are not using cert-manager.
- install: true
+ install: false
# Other cert-manager configurations from upstream
# See https://github.com/jetstack/cert-manager/blob/master/deploy/charts/cert-manager/README#configuration
rbac:
@@ -720,6 +720,10 @@ nginx-ingress:
server-tokens: "false"
service:
externalTrafficPolicy: "Local"
+ type: NodePort
+ nodePorts:
+ http: 32080
+ https: 32443
resources:
requests:
cpu: 100m
@@ -959,7 +963,7 @@ shared-secrets:
## Installation & configuration of gitlab/gitlab-runner
## See requirements.yaml for current version
gitlab-runner:
- install: true
+ install: false
rbac:
create: true
runners:
準備ができたので、早速デプロイします。
# namespace 作成
$ kubectl create ns gitlab
namespace/gitlab created
# Deploy GitLab
$ helm install gitlab -n gitlab -f values.yaml .
NAME: gitlab
LAST DEPLOYED: Tue Jul 20 18:11:20 2021
NAMESPACE: gitlab
STATUS: deployed
REVISION: 1
NOTES:
・・・
# 5分~10分程待つ
$ kubectl get po -n gitlab
NAME READY STATUS RESTARTS AGE
gitlab-gitaly-0 1/1 Running 0 5m58s
gitlab-gitlab-exporter-6589fc89bc-6lfcg 1/1 Running 0 5m58s
gitlab-gitlab-shell-6f786656b7-z5swh 1/1 Running 0 5m58s
gitlab-gitlab-shell-6f786656b7-zh4ln 1/1 Running 0 5m43s
gitlab-migrations-1-s2rr6 0/1 Completed 0 5m58s
gitlab-minio-7754b8d9d9-6tnnt 1/1 Running 0 5m58s
gitlab-minio-create-buckets-1-bljb4 0/1 Completed 0 5m58s
gitlab-nginx-ingress-controller-675956bc64-nvmt9 1/1 Running 0 5m58s
gitlab-nginx-ingress-controller-675956bc64-sg5jh 1/1 Running 0 5m58s
gitlab-nginx-ingress-default-backend-d66cb657-qsvrg 1/1 Running 0 5m58s
gitlab-postgresql-0 2/2 Running 0 5m58s
gitlab-prometheus-server-5b47c879b4-dkbx9 2/2 Running 0 5m58s
gitlab-redis-master-0 2/2 Running 0 5m58s
gitlab-registry-7cbcf899b8-lt572 1/1 Running 0 5m58s
gitlab-registry-7cbcf899b8-p54fs 1/1 Running 0 5m58s
gitlab-sidekiq-all-in-1-v1-7f689dd89c-dgf8t 1/1 Running 0 5m58s
gitlab-task-runner-5b679bd9f8-dm66n 1/1 Running 0 5m58s
gitlab-webservice-default-f99bd969d-gl8v4 2/2 Running 0 5m58s
gitlab-webservice-default-f99bd969d-l9w5p 2/2 Running 0 5m58s
$ kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
gitlab-minio <none> minio.192.168.10.71.nip.io 10.109.247.79 80, 443 13m
gitlab-registry <none> registry.192.168.10.71.nip.io 10.109.247.79 80, 443 13m
gitlab-webservice-default <none> gitlab.192.168.10.71.nip.io 10.109.247.79 80, 443 13m
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-gitlab-postgresql-0 Bound pvc-e166e184-32b9-4316-9b86-c2f20947af32 8Gi RWO rook-ceph-block 12m
gitlab-minio Bound pvc-6cb59e52-7634-4d1f-ab14-da85633f481b 10Gi RWO rook-ceph-block 12m
gitlab-prometheus-server Bound pvc-b3e77a93-2f4f-4617-b69c-1ccfb4b40474 8Gi RWO rook-ceph-block 12m
redis-data-gitlab-redis-master-0 Bound pvc-2e317239-758c-441f-bb4f-d4d0c7a963e3 8Gi RWO rook-ceph-block 12m
repo-data-gitlab-gitaly-0 Bound pvc-6fdf4507-c092-45c3-a5f4-ec1ec4d2e5fa 50Gi RWO rook-ceph-block 12m
GitLab アクセス
デプロイで来たので早速アクセスしてみます。
その前に root
ユーザのパスワードを取得します。
参考
$ kubectl get secret gitlab-gitlab-initial-root-password -ojsonpath='{.data.password}' -n gitlab | base64 --decode ; echo
Ingress の設定で確認できた URL と NodePort で指定したポート番号を指定してアクセスします。
https://gitlab.192.168.10.71.nip.io:32443/
自己署名なので SSL の警告は無視すると、ログイン画面が表示されます。先程確認したアカウントを使ってログインします。
ログイン画面
トップ画面
アジャイル開発機能
GitLab がデプロイされたので、早速機能をお試ししていきます。
アジャイル開発での機能的なお話はこちらの方の記事を参考にさせていただきました。簡潔でわかりやすかったです、感謝。
また、詳細な機能の紹介は公式のこちらから。
ここでは機能と有料機能についてテーブルにまとめました。機能制限は細かいところであるようです。
アジャイル | GitLab | License |
---|---|---|
ロードマップ | Roadmap | PREMIUM ~ |
エピック | Epics | PREMIUM ~ |
バックログ | Issues | FREE ※1 |
スプリント | Milestones | FREE |
バーンダウン/アップチャート | Milestones (Burndown and burnup charts) |
PREMIUM ~ |
ボード | Issue Boards | FREE ※1 |
ユーザーストーリー | Issue | FREE |
ストーリーポイント | Weights | PREMIUM ~ |
タスク | Task Lists | FREE |
※1:一部機能が PREMIUM
価格はこちらから。
ひとまず色々とさわってみました。
※スクリーンショットは設定で日本語に設定しています。
まずはプロジェクトを一つ作成しました。
プロジェクト事態は、見慣れた git レポジトリの画面が表示されます。
ボタンがたくさんあって機能が豊富そう。
左メニューの「イシュー」をクリックすると、イシューの一覧(バックログ)が表示されます。
今度は左メニューから「ボード」をクリックすると、カンバンボードが表示されます。デフォルトでは「オープン」と「Closed」しかなかったので、ラベルで「Doing」を作成し、「Create list」でラベルを指定して列を増やしています。
各イシューはドラッグ&ドロップで移動ができます。また、ボードの追加やラベル・マイルストーンなどでの絞り込みもできます。
以下は各イシューの画面になります。
説明文・コメント内はMarkdownで記載が可能です。
また、細かいタスクの内容はチェックボックス形式で記載できます。記載したタスクはイシューの一覧でも「xx of xx tasks completed」という形で表示されます。
書き方の詳細は以下のリンクから。
イシュー作成時に担当者や期限などの設定ができますが、作成後もイシュー右側の設定メニューからできます。
Assignee(担当者)やラベル、マイルストーン(スプリント)、期限の設定などができます。
FREE ライセンスでは Weight(ストーリーポイント)の設定ができません、、、残念。
また、イシュー間のリンクもできますが、FREE では 「relates to(関連している)」でのリンクしかできません。各イシュー間のブロック状態などは、PREMIUM 以降で利用出来るようです。
最後にマイルストーン(スプリント)です。
最初、どうしたら「進行中のイシュー」にイシューが移動するのかと思ったのですが、「オープンかつ割り当て済み」とちゃんと記載されていました・・・イシューの「Asignee」の欄を割り当てると移動しました。
本来であれば期限管理だけでなく、タイムトラッキング(時間計測)やリリース情報、マージリクエストなども利用してスプリントの管理に役立てるのではと思います。
まとめ
GitLab を知った当初は git
のリモートリポジトリのイメージでしたが、今ではコンテナイメージの格納から、タスク実行、開発のサポートまでできるとは・・・。色々と出来る反面、機能が多すぎてごちゃっとしているのと各コンポーネントの設定やトラブルシューティングが大変そうには見えました。
アジャイル開発の選択肢になればと思います。
補足(Ceph でのトラブルシューティング)
GitLab ではないんですが、一部詰まった箇所を。
values.yaml
で StorageClass を設定していなかったので、いつまでも PV が払い出されませんでした(デフォルトだと空だったみたいで・・・)。
Ceph の StorageClass を default に設定すると回避できました。
# StorageClass の annotations に文言追加
$ kubectl get sc rook-ceph-block -o yaml
・・・
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
・・・
# NAME に (default) が付与され、デフォルトに設定される
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block (default) rook-ceph.rbd.csi.ceph.com Delete Immediate true 29d
Discussion