SREとCI/CD
今年の4月から、現在の職場で「SREチーム」という枠で働くようになりました。
SREというとシステム運用やDevOpsの全般を面倒見るイメージを持っていたのですが、
既存のシステムはその開発チームが運用管理しているのもあって、
自分はまったく運用作業をしていません。
各システムのモダナイズを進めるにあたっての、開発チームへの技術フォローや、
技術検証の取り組みなどが主な自分の仕事になっています。
SREとしてチームにどう関わるか
「SREチーム」という名を冠しているので、開発チームからは意思決定を求められることが多くなります。
使用する言語・フレームワークなどは職場内で統一しようとしているものがあるので問題なくフォローできたりするのですが、
もう少し細かい範囲、例えばディレクトリ構造やユニットテストの書き方について相談を受けると、
「開発チームで考えればいいのでは?」
「そうはいっても丸投げだと標準化が進まない」
という思いが湧いてきて悩んでいる日々です。
世に言うSREの仕事として正しいかは別として、
ああしろこうしろ、とSREが指示する方針だと開発チームは楽しくないでしょう。
一方で、指針となるプロジェクト・サービスも用意できていないので、
新しい言語で開発しろとだけ言われても開発者は途方にくれると思います。
CI/CDの構築とSRE
ここ数ヶ月はSREと開発チームの境界線、住み分けについて考えていますが、
直近で「CI/CDの構築について」聞かれる機会がありました。
「CI/CDをやりたいので相談したいです」
と声をかけていただき、これは確かにSREっぽいなと思いながら詳細を聞きました。
相談内容はこんな感じです。
・開発チームとして何をすべきか
・CI/CD環境について教えてほしい
・SREチームに頼めば全部やってくれるのか
最初はやりたいことをヒアリングして、
CI/CD環境をSREチーム側で用意するイメージをしていましたが、
話を聞くとここでも開発チームと調整が必要なことに気づきました。
まず、CI/CDについてはGitLabを使用している以上、GitLab CIを使うことになります。
GitLab CIで何かをする上で、いくつか準備・設定すべきことがありますが、
- GitLab Runnerのインストール、登録
- CIの設定ファイル(.gitlab-ci.yml)の追加
- CIの設定ファイルに動かすスクリプトを書く
- デプロイ先の環境作成
ざっとこんな感じになると思います。
デプロイしないなら3までですし、ContainerRegistryやPagesを使うならもう少しやることは増えますね。
この中で、SREチームがやるべきこととして明確なのは、1・2・4だと思います。
開発者目線から考えると、CIのスクリプト(テストとか)を書くだけで実行できる環境になっていると、
かなり開発のみに集中できる印象です。
なので、SREチームとしては、CIの設定ファイルの雛形やサンプルを提供し、
開発チームに書いてもらったものをレビューしてコミットする、という流れを考えました。
調整というほど大仰な作業ではないですが、
ブランチ運用との連動だったり、CIの実行環境についてだったりを話しているうちに新たな要件が湧いてくるので、
丸投げする・されるものではないなと感じています。
また、CIの設定ファイルは基本的にソースファイルと同じリポジトリで管理する必要があるので、
丸投げされたときにSREチームがコミットするのかどうかも相談しないといけません。
開発者のスキルとCI/CD
自分が一番モヤモヤしているのはここです。
SREチームがうまく開発チームと連動していい感じに責務分担できたとして、
CI/CDに関するナレッジはどこに溜まるのでしょうか?
開発チームのメンバーに知見として蓄積されていかないのではないでしょうか?
自分は未経験でこの業界に入りましたが、
2年目の時に小さな開発チームの中で、GitLabの構築からCI/CD環境の整備までを担当する機会があり、
そこで幅広い知識を身につけることができた経験があります。
昨今ではCI/CDはコンテナ環境で実行されることが多く、
Linuxについての基礎的な知識からDockerに関する知識など、運用にあたって様々なスキルが要求されます。
難易度は高いですが、1段目線を上げることのできる機会にもなり得ると思いますし、
それゆえに「SREチーム」がその経験を奪ってしまう構図を少し残念に感じています。
きっと観点がずれていて、SREチームは開発組織としての効率化やオペレーションの最適化を考える上で必要なのだろうと感じています。
ただ、業務で得られる経験値はSREの分野はとても大きいので、それをどうやって組織に還元することができるのかも悩ましいです。