Adios
BlogGuide

Guide

Comment déployer une application avec une dépendance Git privée

Une dépendance privée nécessite des identifiants pendant la compilation, mais ceux-ci n’ont pas leur place dans le code source. Une clé de déploiement donne accès au dépôt sans exposer votre clé SSH personnelle.

Équipe Adios6 min de lecture

Lorsqu’une dépendance privée échoue dans une compilation cloud, le code peut être correct. La compilation n’a simplement aucun moyen sûr de prouver son droit de lire le dépôt.

Ce que signifie réellement l’erreur

Une commande Git locale peut demander un nom d’utilisateur, un mot de passe ou une clé SSH. Une compilation distante ne peut pas s’arrêter pour attendre cette réponse. Lorsque Go, npm, pip ou un autre outil accède à un dépôt privé par HTTPS sans identifiants, Git indique que les invites du terminal sont désactivées.

Ce message ne signifie généralement pas que le nom du paquet est incorrect. Il indique que la compilation a besoin d’une identité non interactive autorisée à lire le dépôt.

A typical private Go module failure

fatal: could not read Username for 'https://bitbucket.org': terminal prompts disabled

Utilisez une clé de déploiement, pas votre clé personnelle

Une clé SSH comporte deux parties. La partie publique peut être enregistrée auprès de Bitbucket, GitHub ou GitLab. La partie privée prouve que la compilation possède cette clé publique. Seule la partie privée doit être stockée comme secret.

Créez une clé dédiée à cette tâche. Si elle est un jour exposée, vous pourrez la révoquer sans casser votre accès Git personnel ni celui d’un autre développeur.

  • —Accordez un accès en lecture seule, sauf si la compilation doit réellement envoyer du code au dépôt.
  • —Limitez l’accès aux dépôts nécessaires au graphe de dépendances.
  • —Ne réutilisez pas la clé SSH personnelle d'un développeur.
  • —Ne placez jamais dans le dépôt la clé privée ni une URL de dépôt contenant des identifiants.
ssh-keygen -t ed25519 -C "adios-build" -f ~/.ssh/adios-build -N ""

Mettre chaque partie au bon endroit

Ajoutez le contenu de adios-build.pub comme clé d’accès en lecture seule sur le dépôt privé. Envoyez ensuite adios-build, sans le suffixe .pub, à l’équipe Adios propriétaire de l’application.

Vous choisissez le nom du secret. L’exemple utilise BITBUCKET_DEPLOY_KEY pour rendre son rôle évident dans le manifeste et la liste des secrets.

cat ~/.ssh/adios-build.pub

adios secrets set BITBUCKET_DEPLOY_KEY \
  --from-file ~/.ssh/adios-build

Indiquer à Adios et Go où se trouve le code source privé

Le manifeste relie la compilation à la clé stockée via build.ssh. Pour les projets Go, GOPRIVATE indique aussi à l’outil de modules quels chemins d’import doivent éviter le proxy public et la base de sommes de contrôle.

Vous pouvez conserver le chemin de module HTTPS habituel dans go.mod. Sur les hôtes Git pris en charge, le worker de compilation Adios prépare l’accès SSH sans ajouter la clé à l’application en cours d’exécution.

build:
  ssh:
    - default=secret://BITBUCKET_DEPLOY_KEY
  env:
    GOPRIVATE: "bitbucket.org/your-workspace/*"

build_cmd: go build -o app ./cmd/api

Réessayez la compilation et lisez l'erreur suivante

Relancez adios up une fois les deux parties de la clé et le manifeste en place. Si la dépendance privée se télécharge, la connexion fonctionne. Adios résout le secret dans le worker et supprime le fichier de clé temporaire à la fin de la compilation.

Si la compilation échoue encore, le nouveau message indique généralement un côté précis de la connexion. Permission denied signifie que le fournisseur n’a pas accepté la clé publique. Un secret manquant signifie que la clé privée est stockée sous un autre nom ou dans une autre équipe. Si Go contacte son proxy public, GOPRIVATE ne couvre pas le chemin d’import complet du module.

Renouveler les accès sans modifier le code applicatif

Une référence à un secret garde les identifiants hors du dépôt : leur rotation ne nécessite donc pas de modifier go.mod ou les fichiers source. Créez une nouvelle paire, autorisez sa clé publique et mettez à jour BITBUCKET_DEPLOY_KEY avec adios secrets set.

Réussissez une compilation avec la nouvelle clé avant de retirer l’ancienne clé publique. Ce court chevauchement évite une interruption inutile et laisse un seul identifiant de compilation actif une fois la rotation terminée.

Tous les articles