プライベートパッケージ


TLドクター
gitサブモジュール

どうしたの?
あなたがベストプラクティスに従っているとき、状況を想像してください.そして、異なる部分であなたのコードを分割します、そして.それらを収集する問題に直面する.
残念ながら、goはプライベートパッケージをサポートしていません.

では、どうやって?
私が直面した状況を説明します.GITLABサブグループにあるプライベートGo - modパッケージ(例: gitlab.com/org/department/repo1.gitなど)
まず、gitlabサブグループを実際にサポートしないでください.この問題を回避するには、goprivate env変数を設定して追加する必要があります.最後にgit
$ GOPRIVATE="gitlab.com/org/department" go get gitlab.com/org/department/repo1.git 
番目の障壁は、そのレポへのアクセスです.プラットフォームにSSHキーを追加しなければなりませんでした.
長所
  • ネイティブの経験
  • 短所
  • sshキーは
  • を設定しなければなりません
  • gomodパッケージ名は、命名(最終的にgo.mod)で
  • と完全に対応しなければなりません

    問題解決.か?
    最初の問題は30分後に直面した.これはCI/CD、またはちょうどステップを構築している.
    前の「要約」から理解されるように、SSHキーを加えなければなりません.Dockerを使ってプロジェクトを構築し、ssh keyをdockerfile buildに渡すのは実際にセキュリティ上の問題です.

    代替法
    私はgitのサブモジュールで解決策を見つけ、機能を.gitに置き換えます.go.modでプロジェクトのサブモジュールとして必要なREPOを追加し、git submodule addにネーミング置換を追加します.
    例えば、
    サブモジュールの追加
    $ git submodule add ../repo1
    
    新しく追加されたレポ
    $ git submodule update --init
    
    代替案の追加
    replace gitlab.com/org/department/repo1.git => ./repo1
    
    そして、それはすべてです!サブモジュールとして扱うパッケージはgoパッケージよりずっと簡単です.
    PS .あなたのCIで引っ張っているサブモジュールを加えるのを忘れないでください!GitLabの場合には、go.mod変数です.
    読んでくれてありがとう!