Stocker des modules Go dans Artifact Registry

Configurez un dépôt Go Artifact Registry privé, importez-y un module et utilisez-le en tant que dépendance.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez l'API Artifact Registry

    Activer l'API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  7. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  8. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  9. Activez l'API Artifact Registry

    Activer l'API

  10. Installez Google Cloud CLI.
  11. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  12. Installez Go 1.15 ou une version ultérieure.
  13. Installez le module complémentaire de la gcloud CLI package-go-module :
    gcloud components install package-go-module

Créer un dépôt

Pour créer et configurer un dépôt :

  1. Exécutez la commande suivante pour créer un dépôt.

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=go \
        --location=LOCATION \
        --description=DESCRIPTION
    

    Remplacez les éléments suivants :

    • REPOSITORY est le nom du dépôt. Pour chaque emplacement de dépôt d'un projet, les noms de dépôt doivent être uniques.
    • LOCATION est l'emplacement régional ou multirégional du dépôt. Vous pouvez omettre cet indicateur si vous définissez une valeur default. Pour afficher la liste des emplacements acceptés, exécutez la commande gcloud artifacts locations list.
    • DESCRIPTION est une description facultative du dépôt. N'incluez pas de données sensibles, car les descriptions de dépôt ne sont pas chiffrées.
  2. Exécutez la commande suivante pour afficher les détails du dépôt.

      gcloud artifacts repositories describe --location=LOCATION REPOSITORY
    

    Le résultat se présente comme suit :

      Encryption: Google-managed key
      Repository Size: 0.000MB
      createTime: '2022-06-03T20:20:01.644813Z'
      format: GO
      mode: STANDARD_REPOSITORY
      name: projects/my-project/locations/us-west1/repositories/my-repo
      updateTime: '2022-06-03T20:20:01.644813Z'
    

Définir des valeurs par défaut pour les commandes gcloud

Vous pouvez simplifier vos commandes gcloud CLI en configurant les valeurs par défaut des valeurs de projet, de dépôt et d'emplacement. Une fois les valeurs par défaut configurées, les balises --project, --location et --repository ne sont plus nécessaires.

Empaqueter et importer un module Go

Le module complémentaire de la gcloud CLI package-go-module crée un package de vos modules Go, ce qui vous permet de gérer les versions et de les importer dans Artifact Registry à l'aide de la commande gcloud.

Créer un module Go

Commencez par créer un module Go simple à importer dans votre dépôt.

  1. Dans votre répertoire d'accueil, créez un répertoire nommé "foo" pour votre module

    mkdir foo
    
  2. Accédez au répertoire de votre module et exécutez go mod init pour créer un fichier go.mod pour celui-ci.

      cd foo \
      go mod init example.com/foo
    

    Remplacez example.com/foo par le chemin d'accès au module. Pour en savoir plus, consultez la documentation de référence sur les modules Go.

  3. Dans le répertoire foo, créez un fichier foo.go avec le contenu suivant:

    
    package foo
    
    const HelloWorld = "Hello World!"
    

Empaqueter et importer votre module

Empaquetez et importez le module dans votre dépôt:

  gcloud artifacts go upload --project=PROJECT \
      --repository=REPOSITORY \
      --location=LOCATION \
      --module-path=example.com/foo \
      --version=VERSION \
      --source=SOURCE_LOCATION

Remplacez les éléments suivants :

  • PROJECT par l'ID de votre projet Google Cloud.
  • REPOSITORY par le nom du dépôt dans lequel le package est stocké.
  • LOCATION par l'emplacement régional ou multirégional du dépôt.
  • example.com/foo par le chemin d'accès au module Pour en savoir plus, consultez la documentation de référence sur les modules Go.
  • VERSION par la version sémantique du module sous la forme vX.Y.Z, où X est la version majeure, Y est la version mineure et Z est la version du correctif.
  • SOURCE_LOCATION par le chemin d'accès au répertoire racine de votre module Go. Si vous omettez l'option --source, la valeur par défaut est le répertoire actuel.

Le module est importé dans Artifact Registry.

Pour en savoir plus sur la création de modules Go, consultez ce tutoriel.

Lister les modules

Exécutez la commande suivante pour inspecter le module Go importé dans le projet, le dépôt et l'emplacement par défaut lorsque les valeurs par défaut sont configurées:

  gcloud artifacts packages list

Le résultat se présente comme suit :

  Listing items under project my-project, location us-west1, repository my-repo.

  PACKAGE                   CREATE_TIME          UPDATE_TIME
  example.com/foo           2022-06-03T20:43:39  2022-06-20T20:37:40

Afficher les détails de la version du module

Exécutez la commande suivante pour afficher les versions de votre module dans le projet, le dépôt et l'emplacement par défaut lorsque les valeurs par défaut sont configurées:

  gcloud artifacts versions list --package=MODULE_PATH

Le résultat se présente comme suit :

  Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo.

  VERSION  DESCRIPTION  CREATE_TIME          UPDATE_TIME
  v0.1.0                2022-06-03T20:43:39  2022-06-03T20:43:39
  v0.1.1                2022-06-20T20:37:40  2022-06-20T20:37:40

Télécharger des modules

Pour importer des modules stockés dans Artifact Registry, vous devez demander à Go de rechercher les dépendances dans Artifact Registry et de contourner la base de données de somme de contrôle.

Configurer l'environnement Go

  1. Demandez à Go de télécharger des modules à partir d'Artifact Registry, du proxy de module Go public, puis de les source dans cet ordre:

      export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
    

    Remplacez les éléments suivants :

    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • PROJECT est l'ID du projet Google Cloud.
    • REPOSITORY est le nom du dépôt dans lequel le package est stocké.
  2. Excluez votre module des vérifications à l'aide de la base de données publique de somme de contrôle:

      export GONOSUMDB=MODULE_PATH_REGEX
    

    Remplacez MODULE_PATH_REGEX par le chemin d'accès de votre module ou par une expression régulière si vous souhaitez exclure plusieurs modules.

    Pour empêcher la vérification de votre module example.com/foo à l'aide de la base de données de somme de contrôle publique, exécutez la commande suivante:

      export GONOSUMDB=example.com/foo
    

    Si vous souhaitez que tous les modules dont les chemins d'accès commencent par example.com soient exclus de la vérification à l'aide de la base de données publique de somme de contrôle, exécutez la commande suivante:

      export GONOSUMDB=example.com/*
    

S'authentifier auprès d'Artifact Registry

Lorsque vous téléchargez des modules Go empaquetés à utiliser en tant que dépendances à partir d'Artifact Registry, le binaire Go utilise les identifiants de votre fichier Netrc pour s'authentifier auprès d'Artifact Registry. Pour simplifier le processus d'authentification, vous pouvez utiliser l'assistant d'identification Go afin d'actualiser les jetons de votre fichier Netrc pour l'authentification auprès d'Artifact Registry.

L'emplacement de votre fichier netrc peut être défini à l'aide de la variable d'environnement netrc. Si la variable NETRC n'est pas définie, la commande go lira $HOME/.netrc sur les plates-formes de type UNIX ou %USERPROFILE%\_netrc sous Windows.

Artifact Registry est compatible avec les méthodes d'authentification suivantes.

Identifiants de courte durée (recommandé)
Utilisez l'outil d'aide à la connexion Go d'Artifact Registry pour mettre à jour les jetons d'authentification dans votre fichier Netrc.
Utiliser une clé de compte de service

Utilisez cette option lorsque vous ne pouvez pas vous authentifier à l'aide d'identifiants dans votre environnement. Ajoutez la clé de compte de service non chiffrée à votre fichier netrc.

Ajouter l'assistant d'identification Go à GONOPROXY

Avant d'utiliser l'assistant d'identification Go, vous devez l'ajouter à la liste GONOPROXY pour forcer Go à le télécharger directement depuis GitHub. Si vous souhaitez télécharger d'autres modules directement à partir de la source, vous pouvez les ajouter dans une liste d'éléments séparés par une virgule, comme illustré dans l'exemple suivant:

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

Où MODULE_PATH1 et MODULE_PATH2 sont des chemins d'accès aux modules à télécharger à partir de la source.

Pour ajouter l'assistant d'identification Go à votre liste GONOPROXY et l'exécuter pour configurer vos identifiants, procédez comme suit:

  1. Ajouter l'assistant d'identification Go à votre GONOPROXY

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. Exécutez la commande suivante pour ajouter vos identifiants Artifact Registry à votre fichier Netrc avec l'outil de package du module Go:

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          [--json_key=path/to/service/account/key.json]
    

    LOCATION est l'emplacement régional ou multirégional de votre dépôt. Pour ajouter plusieurs zones géographiques, saisissez-les sous forme de liste en les séparant par une virgule.

    L'assistant d'identification Go ajoute des paramètres à votre fichier Netrc pour l'authentification auprès d'Artifact Registry. Si vous transmettez l'option --json_key, la clé est ajoutée à votre fichier netrc pour l'authentification par mot de passe.

Utiliser votre module en tant que dépendance

  1. Si vous vous authentifiez auprès d'Artifact Registry en utilisant des identifiants éphémères, vous devez actualiser votre jeton OAuth en exécutant la commande suivante:

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
    
  2. Dans votre répertoire d'accueil, créez un répertoire nommé "bar".

      mkdir bar
    
  3. Accédez au répertoire de votre module et exécutez go mod init pour créer un fichier go.mod pour votre package.

      cd bar \
      go mod init example.com/bar
    

    Remplacez example.com/bar par le chemin d'accès au module. Pour en savoir plus, consultez la documentation de référence sur les modules Go.

  4. Pour exiger la version de foo stockée dans Artifact Registry, modifiez le fichier go.mod afin qu'il se présente comme suit:

    
    module example.com/bar
    
    go 1.19
    
    require example.com/foo v0.1.0
    

    Remplacez les éléments suivants :

    • example.com/foo est le chemin d'accès du module requis.
    • v0.1.0 est la version stockée dans Artifact Registry.
  5. Dans votre répertoire bar, créez un fichier main.go avec le contenu suivant:

      
      package main
    
      import (
        "fmt"
    
        foo "example.com/foo"
      )
    
      func main() {
        fmt.Println(foo.HelloWorld)
      }
    
      
    
  6. Exécutez go mod tidy pour télécharger les dépendances, y compris le package foo:

      go mod tidy
    
  7. Exécutez le module de barre:

      go run .
    

    Le résultat se présente comme suit :

      Hello World!
    

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, procédez comme suit :

Pour éviter que les ressources utilisées sur cette page ne soient facturées sur votre compte Google Cloud, procédez comme suit : Avant de supprimer le dépôt, assurez-vous que tous les modules que vous souhaitez conserver sont disponibles à un autre emplacement.

  1. Pour supprimer le dépôt :

      gcloud artifacts repositories delete \
          --location=LOCATION \
          --project=PROJECT \
          REPOSITORY
    

    Remplacez les éléments suivants :

    • LOCATION par l'emplacement régional ou multirégional du dépôt.
    • PROJECT par l'ID de votre projet Google Cloud.
    • REPOSITORY par le nom du dépôt.
  2. Si vous souhaitez supprimer les paramètres de dépôt et d'emplacement par défaut que vous avez configurés pour la configuration gcloud active, exécutez les commandes suivantes:

      gcloud config unset artifacts/repository
      gcloud config unset artifacts/location
    

Étapes suivantes