Yoshi.dev

技術系の趣味、またはやった仕事やそこから学んだことを忘れないために

skaffoldを使う時のgit repository管理戦略

現在マイクロサービスで新規サービスの開発をしているのだが、ローカルでの開発時にskaffoldを使おうとしてる
リポジトリ管理をモノリポジトリかマルチリポジトリにするかで迷ったが、一旦マルチリポジトリでいってみようと思ってる
マルチリポジトリに期待してるのは

  • リポジトリの単位でコードベースを分けられるので、より確実にコードの疎結合が実現できる
  • gitからcloneするときに一つ一つが軽くなるので、後々本番デプロイ環境作ったときのリリース作業が重くならない

といったところ

具体的にはgitで各サービスごとのリポジトリとは別で、skaffoldのymlファイルを管理するリポジトリを作成して
submodules機能を使ってskaffoldリポジトリのサブモジュールとして子リポジトリを登録していくといい感じになった(最初submodules機能の存在を知らなくて、それぞれ子リポジトリをcloneしてた...)

skaffold-repository
|-- service1-repository(submodule)
|-- service2-repository(submodule)
`-- skaffold.yml

skaffoldは開発ツール(という認識)なので専用のリポジトリを作ることに違和感はそんなにないかと思ってるけどどうなんだろ
開発するアプリケーションごとにもう一個間にディレクトリ切ってもいいと思う
〇〇アプリケーションに必要なサービスはservice1とservice2
△△アプリケーションに必要なサービスはservice2とservice3
といった感じなら

skaffold-repository
|- 〇〇
    |- service1-repository(submodule)
    |- service2-repository(submodule)
    `-- skaffold.yml
|- △△
    |- service2-repository(submodule)
    |- service3-repository(submodule)
    `-- skaffold.yml

ちなみにgitで管理しているリポジトリがネストした場合、親ディレクトリと子ディレクトリでそれぞれgitの管理が別になるみたいで、わざわざgitignoreとかで子ディレクトリを親のgit管理はいかから除外するといったことをする必要はなかった

自分のskaffold.ymlの中身はこんな感じになった

apiVersion: skaffold/v1beta7
kind: Config
build:
  artifacts:
    - image: demo/sample-graphql01
      context: ./sample-graphql
      jibGradle: {}
    - image: demo/sample-grpc01
      context: ./sample-system
      jibGradle:
        project: sample-grpc
deploy:
  kubectl:
    manifests:
      - sample-graphql/k8s/*.yml
      - sample-system/k8s/*.yml

sample-graphqlはシンプルなgraphqlのアプリのみがあるrepository
sample-systemはもともとモノリシックな開発をしていたため、マルチプロジェクトなリポジトリとなっている
sample-systemのなかのsample-grpcプロジェクトとsample-graphqlプロジェクトを `skaffold dev` で立ち上げて
ローカルでガリガリ開発を進めていく感じ

それにしてもskaffold...いい...