ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

「GitLab実践ガイド」を読んだ

はじめに

読んだ。

GitLab実践ガイド (impress top gear)

GitLab実践ガイド (impress top gear)

Git大好きエンジニアで、もちろんGitLabも仕事で愛用してますし、もう社内のGitLabなしでは僕は仕事できません(笑) 仕事のすべてをGitLabにおいてるので。。。まぁlocalでは作業できるけど。。。

そんなGitLab大好きマン、この書籍出るっていうのでまぁまず買うよね。

軽く内容をさらいつつ、気になる点はgitlab.comで試してみる。

第1章 GitLabが目指す開発スタイル

まずはプロダクトの思想から。大事ですよね。

DevOpsの考えを前提とした上で、ConvDev(Conversational Development)というスタイルを推奨しています。

ConvDevは、開発プロセスフロー全体において、グループメンバー同士のコミュニケーションを重視してアプリケーション開発を行う自然な開発スタイルです。具体的には、開発者は一貫性のある方法で、開発プロセスの一つひとつを追跡することが求められます。ConvDevでは、アイデアから展開までのコラボレーションと知識共有を促進することで、開発ライフサイクルを加速することを目指しています。

わかりづらいですが、DevOpsを支えるためには、コミュニケーションの促進だったり、課題の見える化が必要で、それを支える機能を取り込もうという思想ですね。

GitHubGitHub is how people build softwareと同じですね。GitHubはソフトウェア開発そのものだ、というのと似ていて、GitLabはソフトウェア開発で必要になるコラボレーションまで含めて支援していくという思想です。

プロダクト/サービスをどう変えていくか、どう作るか、どいったアイデアを生み、それを開発に落とし込み、さらにそれを実際にプロダクト/サービスに反映する、このサイクルを促進する仕組みを持ち合わせています。

CI/CDをサポートしている、といえば味気ないですが、単なるテストやビルド、デプロイの自動化ではなく、継続的なプロダクト、ビジネスの改善という広い視野を持っている、といったところでしょうか。

第2章 GitLabの導入

内部コンポーネントの解説があるのはいいですね。いざ自分がオンプレで運用するようになったときのトラブルシューティングに役立ちそうです。今回は流し読みしました。

あとはインストール、セットアップ方法なので、ここも適宜必要なときに参照すればいいかなと思います。すでに導入済みなので流し読みしました。

にしてもGitLabのomnibusパッケージはinstallもupdateもすっごい楽ですね。すばらしい。最近8系から10系にupgradeしましたが、postgresのupgradeが必要だったぐらいで、あとはなんなくできました。

第3章 GitLabを使ってみよう

この章はGitLabの使い方で、自分は知ってるので流し読み。ユーザ/グループの概念の説明、登録方法。あとは基本的なGitの使い方。本当にはじめて導入するひとに対してやさしいですね。

Gitの概念、使い方は本当にわかりやすく、実際のコマンド含めコンパクトにまとまっているので初心者向けの説明に重宝しそうです。活用します。

第4章 開発ワークフロー

1章で述べたビジネス解決のためのアイデア共有のための仕組み紹介です。まずはslackクローンのchatシステムであるmattermost。社内ではオンプレにmattemrostとgitlabそれぞれ展開してますが、gitlabに付属してるmattermostは使ったことありませんでした。連携が若干楽になったりするのかな?とりあえず今の所は自分で立てているgitlabでmattermostは使わないと思います。

社内共有のgitlabでmattermostが使えるかどうかは確認したいところ。

あとはissueを使ってチケットトラッキング的なことができるので、redmineいらないんですよね。カンバンボードもついていて、commitやMRと紐づけられるのが本当に便利です。

リソースの参照で、#がissueなのは知ってたけど、!はMR、あとはマイルストーンスニペットもあるんですね。知らなかった。

あとはブランチ戦略ですね。GitLab-flowが紹介されています。

第5章 継続的インテグレーション

この章はgitlab-ci.ymでコントロールできるCI設定と、そのためのgitlabci-runnerについての説明ですね。ここも既知だったので読み飛ばし。gitlabの最大の利点はここにあると個人的には思ってます。githubだとcircleciだtravisciだ外部サービスを使わなきゃいけないので。gitlab-ciは本当によくできている。

Executerはdocker一択かなぁと思います。

第6章 継続的デプロイ

ここで扱う内容は今までやったことなかったんですが、deploy先はどこになるかというと、コンテナでdeployした環境になるんですね。

この本で見る限りは、まぁintegration testはコンテナを使ってgitlabでテストすることはまぁわかるんですが、本番deployが例えばAWS上とか、別の区域のクラウド上とかそういう場合はどうするのかな?っていうのが疑問です。

runnerを本番とステージングでわけて、本番構築用の環境からrunnerが反応するようにしておけばどこのクラウドだろうができるって感じですかね。docker(コンテナ)っていう前提ですが。

本番がgitlabとIPでreachするかどうかが重要ですね。

例えば僕が持ってる静的webサイトの本番deployはcircle-ci上でS3とsyncさせてやってます。本番環境にrunnerを動かしておいて、コンテナdeployできる環境があればgitlab-ci.ymlの定義で簡単にできそうですが、クラウドが当たり前の現在で、例えばECSとかと連携が楽にできるのかな?ってのは気になりました。ECS使ったことないのでなんともですが。

Review appsは使いどころというか、条件がいまいちわかりませんでした。本番deployをmanualにして、stagingで状態を確認してからdeployってのはとてもいいと思いました。

最後、container registry付属ってのもとてもいいですね。docker-hubに出せないイメージもあるでしょうから、imageをbuild、登録して、それを展開してdeployしてテストするということができる。container registryは使ったことないので自分の環境で有効にしてみようと思います。

第7章 フィードバック

deployしたあとのパフォーマンス計測としてprometheusが内蔵されています。すごいな。

そもそもgitlabサーバそのもののメトリクスを収集できるようになるのはまぁわかるのですが、やっぱりdeployしたアプリケーションをどうやって監視するのかがわかりませんでした。

本書p243でもGitLabのOmnibusパッケージに付属しているPrometheusは、デフォルトでgitLabをモニタリングするためのメトリクスが設定されているため、アプリケーションのパドーマンスモニタリングに利用するのはおすすめできません。ここでは別途Prometheusを導入する方法を紹介しますって書いてあってなんだそれってなりました。

また、Cycle Analyticsでは各ステージの時間を計測できます。これも使ったことないですね。issueやMRの時間も計測されるみたいなので、GitLab Flowのブランチ戦略にしたがって運用する必要がありそうです。

issueが立ち上げられてから本番deployまでのそれぞれの時間が図れるというのだから、これはすばらしいフィードバックですよね。継続的改善のために必要な指標が簡単に得られる。

また、現在ベータ版で、10系から導入されたAuto DevOpsの紹介が簡単にされています。これは興味ありますね。ただ、kubernetesを別途用意しないといけないのかな?

おわりに

普段から毎日お世話になっているGitLabの最新情報がまとまった一冊。Git含め知識0の方から今すぐDevOpsがはじめられる一冊になってると思います。個人的にはデプロイまわりがまだ触れてないので、GitLabを今後も使い倒していきたいと思います。