Modul Go, Repositori Git Pribadi, dan File Docker
Apakah Anda kesulitan mereferensikan repositori Git pribadi di Dockerfiles Anda? Dalam posting blog ini, saya akan menjelaskan apa yang menyebabkan masalah dan menawarkan perbaikan sederhana untuk mengatasinya.
Bagaimana cara Go menyelesaikan modul?
Saat membuat aplikasi, Go menyelesaikan modul dengan mencentang:
- Pertama, jika modul ada di cache modul lokal.
- Jika tidak, itu mengunduh modul dari server proxy Go yang merupakan cache global untuk modul Go, memungkinkan pembangunan yang lebih cepat dan lebih efisien. Jika modul ditemukan, Go menyimpannya di cache modul lokal.
- Jika modul tidak ada di proxy, itu diunduh dan tersedia untuk permintaan selanjutnya.
Modul dalam repositori pribadi Git tidak pernah dilayani oleh server proxy Go. Itu tidak dapat mengunduh modul karena tidak memiliki kredensial yang diperlukan.
Dalam hal ini, Go akan mencoba mengunduh modul secara langsung dengan mengkloning repositori pribadi Git. Ini akan menggunakan kredensial git yang dikonfigurasi pada mesin Anda untuk melakukannya.
Sebelum mencoba mendapatkan modul dari repositori git, Go akan mencoba menggunakan proxy. Untuk mencegah hal ini, Anda dapat mengatur GOPRIVATEvariabel lingkungan untuk memberi tahu Go agar memperlakukan modul apa pun di bawah domain tertentu sebagai pribadi. Misalnya:
go env -w "GOPRIVATE=github.com/neha-viswanathan/*"
Bagaimana dengan Dockerfiles?
Agar berhasil membangun biner Go Anda yang melibatkan modul Git pribadi dengan Docker, Anda harus menyediakan kredensial Git ke konteks build Docker Anda. Cara melakukannya adalah dengan meneruskan kredensial ini sebagai argumen build ke Docker.
Misalnya, jika Anda menggunakan GitHub, Anda dapat memberikan Token Akses Pribadi sebagai kredensial ke Docker sebagai berikut:
# 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/"
- perintah
git configmenulis ulang URL dengan menambahkan kredensial yang diperlukan.
export GITHUB_TOKEN="my personal access"
docker build --build-arg GITHUB_TOKEN=${GITHUB_TOKEN} --no-cache -t image-name:tag .

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































