Cette page explique comment configurer Cloud Build pour stocker des artefacts créés dans un dépôt Artifact Registry.
Avant de commencer
- Si le dépôt cible n'existe pas dans Artifact Registry, créez un dépôt.
Si Cloud Build et votre dépôt se trouvent dans des projets différents ou si vous utilisez un compte de service spécifié par l'utilisateur pour exécuter des compilations, attribuez le rôle "Écrivain du registre d'artefacts" au compte de service de compilation dans le projet contenant les dépôts.
Le compte de service Cloud Build par défaut est autorisé à effectuer les actions suivantes avec un dépôt dans le même projet Google Cloud :
- Importer et télécharger des artefacts
- Créer des dépôts gcr.io dans Artifact Registry
Configurer une compilation Docker
Une fois les autorisations accordées au dépôt cible, vous pouvez configurer votre build.
Pour configurer votre build:
Dans votre fichier de configuration de compilation, ajoutez l'étape de compilation et de taggage de l'image.
steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ] images: - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
Cet extrait utilise des substitutions Cloud Build. Cette approche est utile si vous souhaitez utiliser le même fichier de configuration de compilation pour transférer des images vers des dépôts pour différents environnements, tels que des environnement de test, de préproduction ou de production.
${_LOCATION}
,${_REPOSITORY}
et${_IMAGE}
sont des substitutions définies par l'utilisateur pour l'emplacement, le nom et l'image du dépôt. Vous spécifiez les valeurs de ces variables au moment de la compilation.$PROJECT_ID
est une substitution par défaut que Cloud Build résout avec l'ID de projet Google Cloud pour la compilation.- Si vous exécutez la commande
gcloud builds submit
, Cloud Build utilise l'ID de projet actif dans la session gcloud. - Si vous utilisez un déclencheur de compilation, Cloud Build utilise l'ID du projet sur lequel Cloud Build s'exécute.
Vous pouvez également utiliser une substitution définie par l'utilisateur au lieu de
$PROJECT_ID
afin de spécifier un ID de projet au moment de la compilation.- Si vous exécutez la commande
Lorsque vous êtes prêt à exécuter la compilation, spécifiez des valeurs pour les substitutions définies par l'utilisateur. Par exemple, cette commande remplace:
us-east1
pour l'emplacement du dépôtmy-repo
pour le nom du dépôtmy-image
pour le nom de l'image
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
Configurer une compilation Go
Une fois les autorisations accordées au dépôt cible, vous pouvez configurer votre build. Les instructions suivantes décrivent la configuration de votre compilation pour importer un module Go dans un dépôt Go.
Pour configurer votre build:
Pour importer un module Go dans votre dépôt Go lors de la compilation, ajoutez les étapes suivantes à votre fichier de configuration de compilation:
steps: - name: gcr.io/cloud-builders/gcloud args: - 'artifacts' - 'go' - 'upload' - '--project=$PROJECT_ID' - '--location=${_LOCATION}' - '--repository=${_REPOSITORY}' - '--module-path=${_MODULE_PATH}' - '--version=$TAG_NAME'
Le fichier de configuration de compilation inclut des substitutions Cloud Build. Cette approche est utile si vous souhaitez utiliser le même fichier de configuration de compilation pour importer des packages dans des dépôts pour différents environnements, tels que des environnements de test, de préproduction ou de production.
${_LOCATION}
,${_REPOSITORY}
et${_MODULE_PATH}
sont des substitutions définies par l'utilisateur pour l'emplacement, le nom et le chemin d'accès au module du dépôt. Vous spécifiez les valeurs de ces variables au moment de la compilation.$PROJECT_ID
et$TAG_NAME
sont des substitutions par défaut que Cloud Build remplace par les éléments suivants:$PROJECT_ID
est remplacé par l'ID de projet Google Cloud pour la compilation.- Si vous exécutez la commande
gcloud builds submit
, Cloud Build utilise l'ID de projet actif dans la session gcloud. - Si vous utilisez un déclencheur de compilation, Cloud Build utilise l'ID du projet sur lequel Cloud Build s'exécute.
Vous pouvez également utiliser une substitution définie par l'utilisateur au lieu de
$PROJECT_ID
afin de spécifier un ID de projet au moment de la compilation.- Si vous exécutez la commande
$TAG_NAME
est remplacé par le nom de votre balise pour respecter la convention Go consistant à utiliser des balises Git comme numéros de version.
Pour installer le package à partir du dépôt Go, ajoutez les étapes suivantes à votre fichier de configuration de compilation pour:
- Ajoutez un point de terminaison Artifact Registry régional dans l'emplacement de votre dépôt au fichier
.netrc
. - Exécutez l'outil d'assistance d'identification pour actualiser les jetons OAuth.
- Exécutez la commande
go run
. Vous pouvez également remplacer cette valeur pargo build
pour compiler le module,go test
pour exécuter des tests ougo mod tidy
pour télécharger les dépendances.
Pour l'étape de commande
go
,GOPROXY
est défini sur le dépôt Artifact Registry qui héberge les dépendances privées. Vous pouvez ajouter le proxy public à la listeGOPROXY
séparée par des virgules si le module comporte des dépendances publiques.steps: - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', '.'] env: - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}' options: env: # Disable GO sumdb checks for private modules. - 'GONOSUMDB=${_MODULE_PATH}'
- Ajoutez un point de terminaison Artifact Registry régional dans l'emplacement de votre dépôt au fichier
Lorsque vous êtes prêt à exécuter la compilation, spécifiez des valeurs pour les substitutions définies par l'utilisateur. Par exemple, cette commande remplace:
us-east1
pour l'emplacement du dépôtmy-project
pour l'ID du projetmy-repo
pour le nom du dépôtexample.com/greetings
pour le chemin d'accès au module
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
Configurer un build Java
Une fois les autorisations accordées au dépôt cible, vous pouvez configurer votre build. Les instructions suivantes décrivent la configuration de votre compilation pour importer un package Java dans un dépôt Maven.
Pour configurer votre build:
Configurez l'authentification pour Maven. Assurez-vous de spécifier le projet et le dépôt cibles appropriés dans votre fichier
pom.xml
.Dans votre fichier de configuration de compilation Cloud Build, ajoutez l'étape permettant d'importer le package avec Maven :
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
Lorsque votre fichier de configuration de compilation est prêt, lancez votre compilation avec la commande suivante:
gcloud builds submit
Configurer une compilation Node.js
Une fois les autorisations accordées au dépôt cible, vous pouvez configurer votre build. Les instructions suivantes décrivent comment configurer votre build pour importer un package Node.js dans un dépôt npm.
Pour configurer votre build:
Ajoutez votre dépôt Artifact Registry au fichier
.npmrc
de votre projet Node.js. Le fichier se trouve dans le répertoire avec votre fichierpackage.json
.@SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY/:always-auth=true
- SCOPE-NAME est le nom du champ d'application npm à associer au dépôt. L'utilisation de champs d'application garantit que vous publiez et installez toujours des packages à partir du dépôt approprié.
- PROJECT_ID correspond à l'ID de projet Google Cloud .
- LOCATION est l'emplacement régional ou multirégional du dépôt.
- REPOSITORY est le nom du dépôt.
Ajoutez un script au fichier
package.json
de votre projet qui actualise le jeton d'accès pour l'authentification avec le dépôt."scripts": { "artifactregistry-login": "npx google-artifactregistry-auth" }
Dans votre fichier de configuration de compilation, ajoutez l'étape permettant d'importer le package dans le dépôt.
steps: - name: gcr.io/cloud-builders/npm args: ['run', 'artifactregistry-login'] - name: gcr.io/cloud-builders/npm args: ['publish', '${_PACKAGE}']
${_PACKAGE}
est une substitution Cloud Build qui représente le répertoire de votre projet Node.js. Vous pouvez spécifier le répertoire lorsque vous exécutez la commande pour exécuter le build.Par exemple, cette commande importe le package à partir d'un répertoire nommé
src
:gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_PACKAGE="src" .
Configurer une compilation Python
Une fois les autorisations accordées au dépôt cible, vous pouvez configurer votre build. Les instructions suivantes décrivent la configuration de votre build pour importer un package Python dans un dépôt Python et l'installer à l'aide de pip.
Pour créer et conteneuriser une application Python, puis l'envoyer à un dépôt Docker, consultez la section Créer des applications Python dans la documentation Cloud Build.
Pour configurer votre build:
Dans le répertoire contenant votre fichier de configuration de compilation Cloud Build, créez un fichier nommé
requirements.txt
avec les dépendances suivantes:twine keyrings.google-artifactregistry-auth
- Twine permet d'importer des packages dans Artifact Registry.
- keyrings.google-artifactregistry-auth est le backend du trousseau Artifact Registry qui gère l'authentification avec Artifact Registry pour pip et Twine.
Pour importer un package Python dans votre dépôt Python lors de la compilation, ajoutez les étapes suivantes à votre fichier de configuration de compilation:
steps: - name: python entrypoint: pip args: ["install", "-r", "requirements.txt", "--user"] - name: python entrypoint: python args: - '-m' - 'twine' - 'upload' - '--repository-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/' - 'dist/*'
Dans cet extrait, la première étape consiste à installer Twine et le backend du trousseau Artifact Registry. La deuxième étape consiste à importer vos fichiers Python compilés dans le sous-répertoire
dist
. Ajustez les chemins d'accès àrequirements.txt
et à vos fichiers Python compilés s'ils ne correspondent pas à l'extrait.Le chemin d'accès au dépôt inclut des substitutions Cloud Build. Cette approche est utile si vous souhaitez utiliser le même fichier de configuration de compilation pour importer des packages dans des dépôts pour différents environnements, tels que des environnements de test, de préproduction ou de production.
${_LOCATION}
et${_REPOSITORY}
sont des substitutions définies par l'utilisateur pour l'emplacement, le nom et le nom du package du dépôt. Vous spécifiez les valeurs de ces variables au moment de la compilation.$PROJECT_ID
est une substitution par défaut que Cloud Build résout avec l'ID de projet Google Cloud pour la compilation.- Si vous exécutez la commande
gcloud builds submit
, Cloud Build utilise l'ID de projet actif dans la session gcloud. - Si vous utilisez un déclencheur de compilation, Cloud Build utilise l'ID du projet sur lequel Cloud Build s'exécute.
Vous pouvez également utiliser une substitution définie par l'utilisateur au lieu de
$PROJECT_ID
afin de spécifier un ID de projet au moment de la compilation.- Si vous exécutez la commande
Pour installer le package à partir du dépôt Python, ajoutez une étape à votre fichier de configuration de compilation qui exécute la commande
pip install
.steps: - name: python entrypoint: pip args: - 'install' - '--index-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/' - '${_PACKAGE}' - '--verbose'
Cet extrait inclut une substitution
${_PACKAGE}
supplémentaire pour le nom du package.Lorsque vous êtes prêt à exécuter la compilation, spécifiez des valeurs pour les substitutions définies par l'utilisateur. Par exemple, cette commande remplace:
us-east1
pour l'emplacement du dépôtmy-repo
pour le nom du dépôtmy-package
pour le nom du package
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .