Go Modülleri, Özel Git Depoları ve Dockerfiles
Docker dosyalarınızda özel Git depolarına başvurma konusunda sorun mu yaşıyorsunuz? Bu blog gönderisinde, soruna neyin neden olduğunu açıklayacağım ve sorunu çözmek için basit bir düzeltme önereceğim.
Go modülleri nasıl çözer?
Bir uygulama oluştururken Go, aşağıdakileri kontrol ederek modülleri çözer:
- Birincisi, modül yerel modül önbelleğindeyse.
- Değilse, modülü Go modülleri için küresel bir önbellek olan Go proxy sunucusundan indirerek daha hızlı ve daha verimli derlemeler sağlar. Modül bulunursa, Go onu yerel modül önbelleğinde depolar.
- Modül proxy'de yoksa indirilir ve sonraki istekler için kullanılabilir hale getirilir.
Özel Git havuzlarındaki modüllere hiçbir zaman Go proxy sunucusu tarafından hizmet verilmez. Gerekli kimlik bilgilerine sahip olmadığı için modülü indiremez.
Bu durumda Go, özel Git deposunu kopyalayarak modülü doğrudan indirmeye çalışır. Bunu yapmak için makinenizde yapılandırılan git kimlik bilgilerini kullanacaktır.
Modülü git deposundan almaya çalışmadan önce Go, proxy'yi kullanmayı deneyecektir. GOPRIVATEBunu önlemek için, ortam değişkenini Go'ya belirli bir etki alanı altındaki tüm modülleri özel olarak ele almasını söyleyecek şekilde ayarlayabilirsiniz . Örneğin:
go env -w "GOPRIVATE=github.com/neha-viswanathan/*"
Peki ya Dockerfiles?
Docker ile özel Git modüllerini içeren Go ikili dosyanızı başarılı bir şekilde oluşturmak için, Docker oluşturma bağlamınıza Git kimlik bilgilerini sağlamanız gerekir. Bunu yapmanın yolu, bu kimlik bilgilerini Docker'a yapı bağımsız değişkeni olarak iletmektir.
Örneğin, GitHub kullanıyorsanız Docker'a kimlik bilgileri olarak aşağıdaki şekilde bir Kişisel Erişim Simgesi sağlayabilirsiniz:
# the build argument to pass the credentials
ARG GITHUB_TOKEN
# git is needed to download private go modules directly from git repositories
RUN apk add git
# configure git with PAT to access the private repositories
RUN git config --global --add url."@github.com/neha-viswanathan/">https://${GITHUB_TOKEN}@github.com/neha-viswanathan/".insteadOf "https://github.com/neha-viswanathan/"
- komut
git config, gerekli kimlik bilgilerini ekleyerek URL'leri yeniden yazar.
export GITHUB_TOKEN="my personal access"
docker build --build-arg GITHUB_TOKEN=${GITHUB_TOKEN} --no-cache -t image-name:tag .

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































