🕵🏽♂️ Satisfaciendo dependencias a módulos Go privados
Cuando desarrollamos aplicaciones en Go que mantienen dependencias a módulos que no son de código abierto necesitamos especificar de forma correcta cómo dichas dependencias deben ser obtenidas para poder utilizarlas en nuestro entorno o producir los ejecutables deseados. Esta especificación requiere de una combinación de variables de entorno y configuración de GIT.
Las referencias en este artículo son para Gitlab, aunque los pasos para otras plataformas, como Github o Bitbucket, son las mismas.
Variables de Entorno
Go tiene su propia utilidad para obtener y definir variables de entorno. En este caso se requiere definir los argumentos para GOPRIVATE
de la siguiente manera:
; go env -w GOPRIVATE=gitlab.com/<entorno_privado>/*
Donde <entorno_privado>
es el espacio de trabajo donde nuestros repositorios privados están alojados y debe ser sustituido de acuerdo a nuestra necesidad.
GOPRIVATE
indica los módulos que el comando go
considera como privados y, por lo tanto, no deben ser descargados a través de goproxy.io ni comprobar la suma de verificación del módulo con la disponible en sum.golang.org.
Especificación de GIT
Posteriormente debemos modificar la forma en la que git
resuelve la dirección del repositorio para el módulo privado.
Mediante SSH
Comúnmente en nuestro entorno de desarrollo local accedemos a nuestros repositorios privados mediante un par de llaves SSH, es posible configurar git
de forma local para que este mecanismo sea utilizado correctamente a nuestro favor ejecutando:
; git config --global url."ssh://git@gitlab.com:<entorno_privado>".insteadOf https://gitlab.com/<entorno_privado>
Mediante un token de acceso
En Gitlab podemos crear un token de acceso para nuestras cuentas que tenga, como mínimo, los permisos read_user
, read_api
y read_repository
para ser usado como contraseña al resolver nuestros repositorios privados:
; git config --global url."https://<usuario>:<token_de_acceso>@gitlab.com/<entorno_privado>".insteadOf https://gitlab.com/<entorno_privado>
Verificando la configuración
Una vez hechos los cambios pertinentes podemos obtener nuestros módulos privados y ejecutar correctamente:
; go get gitlab.com/<entorno_privado>/<mi_modulo>
; go mod tidy