Módulos Go, repositórios Git privados e Dockerfiles
Você está tendo problemas para referenciar repositórios Git privados em seus Dockerfiles? Nesta postagem do blog, explicarei o que está causando o problema e oferecerei uma solução simples para resolvê-lo.
Como o Go resolve os módulos?
Ao construir um aplicativo, Go resolve os módulos verificando:
- Primeiro, se o módulo estiver no cache do módulo local.
- Caso contrário, ele baixa o módulo do servidor proxy Go, que é um cache global para os módulos Go, permitindo compilações mais rápidas e eficientes. Se o módulo for encontrado, Go o armazena no cache de módulo local.
- Caso o módulo não esteja presente no proxy, ele é baixado e disponibilizado para requisições posteriores.
Módulos em repositórios Git privados nunca são servidos pelo servidor proxy Go. Ele não pode baixar o módulo porque não possui as credenciais necessárias.
Nesse caso, o Go tentará baixar o módulo diretamente clonando o repositório Git privado. Ele usará as credenciais git configuradas em sua máquina para fazer isso.
Antes de tentar obter o módulo do repositório git, o Go tentará usar o proxy. Para evitar isso, você pode definir a GOPRIVATEvariável de ambiente para dizer ao Go para tratar qualquer módulo em um domínio específico como privado. Por exemplo:
go env -w "GOPRIVATE=github.com/neha-viswanathan/*"
E os Dockerfiles?
Para construir com sucesso seu binário Go que envolve módulos Git privados com Docker, você precisará fornecer credenciais Git para seu contexto de construção Docker. A maneira de fazer isso é passar essas credenciais como um argumento de construção para o Docker.
Por exemplo, se você estiver usando o GitHub, poderá fornecer um token de acesso pessoal como credenciais para o Docker da seguinte maneira:
# 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/"
- o
git configcomando reescreve os URLs adicionando as credenciais necessárias.
export GITHUB_TOKEN="my personal access"
docker build --build-arg GITHUB_TOKEN=${GITHUB_TOKEN} --no-cache -t image-name:tag .





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)