狠狠撸

狠狠撸Share a Scribd company logo
vendoring が無くなると
Go x Github private repo x Docker
運?用が地味に?面倒になって困る話 (未完)
Itsuki Sakitsu
?自?己绍介:猟师系飞别产エンジニア
とある骋辞プロジェクト
コードはGithub private repoで管理理
コードは
別のGithub private repoにも依存
想定ケース
? マイクロサービスが相互のgrpcサービスクライアントを参照
? ?自作ライブラリを切り出してprivate repoで管理理
素直にDocker?leを書くと…
Go get -d -v ./… がfail
Dockerイメージに
認可情報が無いので通信拒否
→认可情报を渡せばよい?
動くが…どうなんだろう?
—build-arg等を利利?用してGithub認可トークンを渡し、.netrcに保存
? github認可トークンは「アカウント」単位、無関係な個?人リポジトリも参照可
? ビルド専?用のgithubアカウント発?行行…?
vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完)
救世主:depの濫?用
(実質vendoring)
depは何をしてくれるのか?
使い?方は `brew install dep` してから `dep init` とか `dep ensure` するだけ
1. Gopkg.lock による依存バージョンの管理理
2. 同時に全依存コードを リポジトリ直下の vendorフォルダ以下に永続化してくれる
? Private repoからのダウンロードもマシンローカルの認可情報を使うので当然普通に動く
dep導?入後のDocker?le
? 事前に dep ensure を実?行行、COPY . . でvendorフォルダごと?一括でCOPYする
? 不不必要に認可情報を取り回す必要なし
? Docker?leもビルドコマンドもスッキリ
※コード改変毎に go getが?走るが、実質ダウンロードは発?生しない
vendorフォルダごと渡すため
githubとの通信は不不要
vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完)
ところがどっこい…
Dep → vgo移?行行の流れ?
vgoでは依存の永続化先が変わる
$GOPATH/pkg/mod配下で?一括管理理
? vendorフォルダは使わない
? 環境全体で?一括管理理するのでリソース効率は良い
Go公式もvendoringは無くしたい
というお気持ち (当?面は残すとか)
意訳:vendoring消そうと思ってたけどフィー
ドバック?色々あったから残すことにはしたよ
dep導?入後のDocker?le
? 事前に dep ensure を実?行行、COPY . . でvendorフォルダごと?一括でCOPYする
? 依存コードが全てあるので後続のgo getは実質不不要
? 認可情報も渡す必要がなくなり、Docker?leも起動コマンドもスッキリ
? コード改変毎に go getされてしまうが、動くのはCOPYだけなので実害なし
→go mod vendor で当座を凌ぐ
意訳:Go mod vendorコマンドを実?行行すれば
vendor 配下にビルドとテストに必要な全依存を
永続化するやで
1. おとなしくgithub認可トークンをdocker?leに??食わせる?
? 適切に運?用すればセキュリティ懸念も少ないはず
? ビルド専?用のアカウントとトークンを?用意するとか
2. Go build処理理はいっそローカルで実?行行?
? Go versionなど、ビルド環境?自体に差分が?生まれる懸念が
3. $GOPATH直下でdocker buildして /pkg/mod 配下を COPY でぶち込む?
? Docker build毎に cd させられるのが流?石にちょっと…
4. Github enterpriseを使う?
? そもそもprivate repoを使うことをやめればよいのだ
最終的なベスプラは?見見えぬまま
vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完)

More Related Content

vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完)