この記事は夏のブログリレー33日目の記事です。
こんにちは。mehm8128です。SysAd班に入ってます。他にも2つくらいの班に入ってます。
ISUCONの記事が11日目、草の記事が22日目、この記事が33日、と全く意識してなかったのに全部ゾロ目になっちゃいました。ちなみに44日目は別の人です。
今回はGiteaをアップデートした話を書きます。
アップデート担当を後輩に引き継ぐとき、この記事見せるだけで終わりそうでいいですね。
Giteaとは
セルフホストできるGitサービスです。
簡単に言うとtraPメンバーだけが使えるGithubみたいな感じです。
traPではGiteaをはじめ、NextCloudやGhost、CodiMD、CrowiなどのOSSを利用しています。
その中でも僕はGiteaのアップデートを担当しています。というか1回だけ担当するつもりがなぜかcode ownerになってしまいました。
Giteaで管理しているソースコードは部内PaasのShowcaseでデプロイすることができるのでbotやハッカソンなどのソースコード管理に使われています。しかも外部に公開したくなったらGithubへのミラーリングもできるのでとても便利です。
本家のリポジトリ:https://github.com/go-gitea/gitea
traPのリポジトリ:https://github.com/traPtitech/gitea
traPのリポジトリではいくつかtraP独自の変更を加えています。traPブランチのコミット履歴から見てみて下さい。
アップデートのしかた
最初は何も分からなかったのでDiscordで通話しながら先輩に教えていただきました。
20時に始めたはずなのに終わったときには一の位が消え去って2時になっていました。しかもリリースノートまとめなど(後述)がまだ残っていてそれは別の機会に4時間くらい取ってまた教えていただいたので結局10時間くらいかかってしまいました。
この記事を書いているのはその初回ではなくて2回目のアップデートが終わった直後なのですが、少し慣れたのである程度短時間でできました。バグ修正で沼らなければもっと早く終わったと思います。
作業は大きく分けて3つに分かれているので順番に説明していきます。
ソースコードのアップデート
メインの部分です。
まず概略を図で説明します。
本家ブランチと、それにtraP独自の変更を加えたブランチの関係はアップデート前はこうなっています。
--- traP
/
--- 旧ver --- 新ver
それを以下のようにしたいのです。
--- 旧ver --- 新ver --- traP
これは、git rebase
をいい感じに使えばいい感じにできます。git rebase
をあんまり使ってこなかった自分はここで理解するのにかなり時間を使いました。
git rebase
を使うと最大でtraP独自のコミットの回数だけコンフリクトが起こるので、1つずつ直していきます。基本的にoursの変更をいい感じに取り入れながらtheirsをacceptしていきます。慣れていないと難しくて時間がかかりました。
そういえば最近VSCodeのコンフリクト解消UIが変わって賛否両論ありましたが、僕は新しいUIの横に3分割するのが好みです。
全てコンフリクトを解消し終わったらgit push -f
します(本当はここでローカルで起動して動作確認するのがいいのですが、パソコンの性能の関係でローカルで起動するとビルドにかなり時間かかるのでGithub Acitionsに任せます)。
タグを打つとGithub Actonsが自動ビルド&ステージング環境へのデプロイ(後述)してくれます(traPの場合)。
ここでエラーが出たらgit rebase -i
を使ったり使わなかったりして修正します。
無事Github Actionsが通ったらステージング環境で動作確認をします。
ステージング環境へのデプロイ
本来ならGithub Actionsが勝手にステージング環境へのデプロイをやってくれるらしいのですが、現在はなぜか上手く反映されないらしく、手動でやっています。
SysAdの開発用サーバーにssh接続してデプロイするスクリプトを直接叩くと、ステージング環境へのデプロイができるようになっています。
デプロイが完了したらステージング環境にアクセスして動作確認を行います。
traP独自の変更が反映されているか、新しいバージョンでの新機能は追加されているか、などを一通り確認します。新機能は例えば、今回だとデフォルトブランチがmasterからmainに変わったりファイル検索機能がついたりしたのでそこらへんを確認しました。ちなみに一箇所見逃しがあって現在テーマ切り替え機能が死んでます。次のアップデートのときに直すのでお待ちください。
新機能についてはリリースノートを読まないといけません。
今回だとこれです。
https://github.com/go-gitea/gitea/releases/tag/v1.17.0
breakingとsecurityは特にしっかり読みます。インフラ周りの設定を修正しないといけない箇所がある可能性があるので、分からない部分や修正が必要そうな部分があればサーバーをいじれる先輩に聞いたりします。新機能については主にfeaturesに書いてあります。
本番環境へのデプロイ
動作確認ができたら本番環境へのデプロイをします。その前にデプロイするときに使うファイルに書かれている、Giteaのバージョンを上げるためのPRをGiteaで管理されてるリポジトリに投げて、先輩にマージしてもらいます。
そして、本番環境へのデプロイはSysAd班のリーダーしかできないのでそれも先輩にお願いしてAnsibleを回してデプロイしてもらいます。
デプロイが完了したらリリースノートの新機能をまとめたものをtraQの team/SysAd/announce チャンネルで全体通知を飛ばしてアナウンスします。
これでアップデートが完了します。
最後に
Giteaの草、色的に草じゃないのでなんて呼ぶのがいいんですかね。
明日の担当はあすまさんです、お楽しみに!