この記事は「Aucfan Advent Calendar 2020」の6日目です。
はじめに
はじめまして!!開発部 Aucfan グループ でマネージャーをしている渡辺(仮名)です。
今回は今まで手動で運用していた謎挙動を深堀りしてみたので
そのお話をさせていただこうかなと思います。
前提
- 発生時期
- 1年ほど前から
- 環境
- FuelPHP 1.8系
- PHP 7.1系の最新
- composer.pharのバージョンは2.0.7
- 独自のライブラリを別レポジトリで管理しcomposerで反映している
- repository名: package-godclass
- jenkinsを使用してリリースを行っている
- 登場人物(全員仮名)
- 加藤
- Aucfanグループのエンジニアリーダー
- 渡辺
- 私です ^^;
- 林
- 企画とディレクション担当
- 加藤
- ある日のやり取りは
- 事実を元にしたフィクションです。
- composer.jsonの中身は以下の様な形になっています
"repositories": [
{
"type": "package",
"package": {
"name": "aucfan/package-godclass",
"type": "fuel-package",
"version": "202011190006",
"source": {
"url": "ssh://git@github.com/xxxxxx/package-godclass.git",
"type": "git",
"reference": "master"
}
}
}
],
ある日のやり取り
会話のやり取りはすべてSlack上で行われています
加藤) aucfan.comのリリース始めます〜
渡辺) お願いします!
〜〜リリース完了後〜〜
加藤) リリース完了しました
林) 動作確認します
林) 加藤さん、今回の改修が反映されてないです・・・
加藤) ええっ!?Jenkinsは成功をかえしてるなぁ・・・ちょっと確認します〜
渡辺) (´-`).。oO(ん?mjd?? 俺も覗きに行こうっと
〜〜5分後〜〜
加藤) gitのログを見る限り本番環境は最新のものになってるなぁ・・・
渡辺) package-godclass
のほうじゃない?
加藤) 確認してみます・・・あー!!更新されてない!composer.lockは最新のバージョンになってるんだけど・・・なぜ・・・
加藤) composer.lockを削除だ!・・・更新されない・・・それならcacheを削除だ!・・・だめだ更新されない・・・
加藤) このままだとリリースは難しいので、今回は手動で git pull
します・・・orz
渡辺) (´-`).。oO(このままだと、手動運用が捗ることになるから時間があるときに原因調査するかな・・・
後日、深堀り始めて・・・
(´-`).。oO(composer.lockを消してもcleancacheしても駄目だよなぁ・・・
(´∵`).。oO(vendor/composer/installed.jsonを消したら更新されたけどコレジャナイ感が・・・
(´-`).。oO(仕方ない、composerのログを見てみるか・・・魔法のオプション -vvv や!
〜〜ログを見始めて〜〜
( ´-`).。oO(え?ログのコマンド実行してみたけど差分のコミットハッシュでてなくね?
(; ´-`).。oO(ええ?masterだとローカルのコミットハッシュコミットハッシュ取ってない??
(((( ;゚Д゚)))).。oO(同じブランチを参照してる・・・これってこの前まで運用できてたよね・・・(呆然
( ´-`).。oO(コミットハッシュをセットすれば問題なく動いたけど、前と運用が変わってくるから極力合わせられるようにしたい・・・
( ´-`).。oO(referenceにremoteブランチをセットしたらうまく行った!!!けどなんでや・・・ここまで来たら気になるのでcomposer本家のソース見に行くか・・・(白目
(8o」∠).。oO(v2.0になったときに実装が結構変わってる・・・\(^o^)/
原因
- composer経由のgit downloadの実装が変わっていた
- composerが2.0に更新された際にreferenceの取得方法が変更されていた
- 更新前はリモートブランチをすべて更新していた (
git fetch composer && git fetch --tags composer
) - 更新後はreference のブランチが指定されるようになった
- referenceをmasterにした場合 ローカルのブランチを参照してしまう
- 更新前はリモートブランチをすべて更新していた (
- composerが2.0に更新された際にreferenceの取得方法が変更されていた
対応策
- referece に対象のレポジトリのコミットハッシュを設定する。
- referece に リモートブランチを設定する。
終わりに
-
原因を特定してみれば、そのとおりだよなぁという感じでした
- 特定するまでの工程は意外に楽しかったりしました(ぇ
-
現在、Aucfanではデータ基盤のシステムを少しづつリビルドしており、それに合わせてフロントの刷新も計画しております
- 既存システムのメンテナンス経験を積みつつ、多くのデータを扱って新しい何かを生み出したいあなた!!ぜひAucfanへ!!お待ちしています!
-
明日は @s_satohの記事になります。ちょっと毛色が違う記事になるらしいのでみんな見てね!
余談
(´-`).。oO(バージョンを年月日時分秒になってるのはそっとしておいてください。
(´-`).。oO(1年たつとバージョンが1億上がるって思うとすごい