真理のデプロイ戦争
その日、CI/CD(継続的インテグレーション/継続的デリバリー)パイプラインが止まった。
それは、エンジニアにとって「呼吸が止まる」に等しい出来事だ。
──しかも、全社リリース直前のタイミングで。
====
「リリース反映されてない……?」
翔太がつぶやいたのは、朝の8時40分。
その言葉を聞いて、凛が素早くCIツールのコンソールを確認し、
ログをひと目見ただけで事態の異常さに気づいた。
「真理。デプロイが途中でタイムアウトしてる。しかも全環境で」
「……見てる。おかしい。Dockerイメージのビルドまでは通ってるのに、Kubernetes側が受け付けてない」
「K8sのAPI落ちた?」
「いや、クラスタは生きてる。認証トークンの期限切れもナシ。となると……」
──戦場は、インフラレイヤーへ。
コードやアプリではなく、土台そのものが揺れていた。
そしてこの戦場を治めるのは、ただ一人。
インフラ担当、東雲真理。
====
「問題は……そこじゃない。GitOpsのフックが無効化されてる」
真理はディスプレイをにらみながら、手元でYAMLファイルを素早く確認していた。
「なにそれ?」
翔太が聞く。
「コードベースの状態を、自動で環境に反映するための仕組み。要はコードに書いたことは絶対っていう哲学。でも今は、それが途中で止まってる。つまり──」
「神が降臨してないんですね……」
「言い方はアレだが、正解」
真理はすぐさま、CI/CDパイプラインのトリガースクリプトと、Webhook設定を洗い直す。
そして、ひとつのログに目を止めた。
「……これだ。署名付きコミットしか受け付けないってルールを追加したの、誰?」
翔太がハッとする。
「昨日、自分がセキュリティ対応でPR出しました……!でも、手動マージにしたはずで……!」
「Auto-merge、動いてたんだよ。人のつもりが、CIでは機械の手とみなされた。それがGitOpsの罠」
凛がつぶやく。
「つまり、人間が安全と思って設定したことが、機械にとっては障害だった……」
====
9時30分。
会議室には社内リリース責任者が集まり、冷や汗が流れていた。
だが、真理の指先は止まらない。
「CI側の署名チェックを無効化? 違う。署名を通した上で、CIトークンに署名権限を付与する。それが正解」
翔太が追いかけるように、TerraformでIAMロールを修正。
凛は隣でYAMLの差分確認をサポートしながら、アラートシステムを一時抑制。
──その場に、無駄な言葉はなかった。
あるのは、コードと、判断と、信頼だけ。
「……よし、トリガーいくよ」
真理が手元のCLIからコマンドを叩いた。
flux reconcile kustomization main --with-source
数秒後──
[Success] Applied changes to cluster: all resources synced.
「……勝ったな」
真理が、静かに笑った。
翔太は拍手しそうになって、こらえた。
====
昼。
ようやく全社のリリースが完了し、静かなオフィスに戻った3人。
翔太がぽつりと聞いた。
「真理さん……インフラって、楽しいんですか?」
真理は珍しく、答える前に空を見上げた。
「楽しくはない。でも」
「……でも?」
「誰かが見えない不安に襲われたときに、大丈夫だって言えるのが、私たちの仕事だ」
翔太は、少し考えて、頷いた。
「……かっこいいです」
「うん、知ってる」
凛が吹き出した。
「真理のドヤ顔は、世界三大インフラのひとつだから」
「他は?」
「DNSと電力」
「妥当」
その日。
私たちは、何かを失ったわけではない。
でも、「見えない戦い」を、確かにひとつ乗り越えた。
それはコードにも残らず、ドキュメントにも残らない。
ただ、私たちだけの記憶の中に、信頼の仕組みとして刻まれた。