Cette page explique comment configurer des comptes de service spécifiés par l'utilisateur pour les compilations.
Par défaut, Cloud Build utilise un compte de service spécial pour exécuter des compilations en votre nom. Ce compte de service est appelé compte de service Cloud Build et est créé automatiquement lorsque vous activez l'API Cloud Build dans un projet Google Cloud. Ce compte de service dispose d'un certain nombre d'autorisations par défaut, telles que la possibilité de mettre à jour des compilations ou d'écrire des journaux.
Au lieu d'utiliser le compte de service Cloud Build par défaut, vous pouvez spécifier votre propre compte de service pour exécuter des compilations en votre nom. Vous pouvez spécifier autant de comptes de service que vous le souhaitez par projet. La gestion de plusieurs comptes de service vous permet d'accorder différentes autorisations à ces comptes de service en fonction des tâches qu'ils effectuent. Par exemple, vous pouvez utiliser un compte de service pour compiler et transférer des images vers Container Registry et un autre compte de service pour compiler et transférer des images dans Artifact Registry.
Avant de commencer
-
Activer les API Cloud Build and IAM.
Pour utiliser les exemples de ligne de commande de ce guide, installez et configurez la CLI Google Cloud.
Assurez-vous d'avoir créé le compte de service que vous souhaitez utiliser. Vous devez créer le compte dans le projet Cloud dans lequel vous exécutez des compilations.
Configurer plusieurs projets
Si le compte de service spécifié par l'utilisateur se trouve dans un projet différent de celui dans lequel vous démarrez les builds, accordez l'accès nécessaire:
Dans le projet contenant le compte de service spécifié par l'utilisateur, assurez-vous que la contrainte de règle d'administration
iam.disableCrossProjectServiceAccountUsage
n'est pas appliquée. Cette contrainte est appliquée par défaut. Pour désactiver cette contrainte de règle d'administration, exécutez la commande suivante, où SERVICE_ACCOUNT_PROJECT_ID est le projet contenant votre compte de service spécifié par l'utilisateur:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=SERVICE_ACCOUNT_PROJECT_ID
Dans le projet qui contient le compte de service spécifié par l'utilisateur, accordez le rôle
roles/iam.serviceAccountTokenCreator
à l'agent de service Cloud Build du projet dans lequel vous exécutez des builds:gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:BUILD_SERVICE_AGENT \ --role="roles/iam.serviceAccountTokenCreator"
Remplacez les valeurs d'espace réservé dans la commande ci-dessus par les éléments suivants :
SERVICE_ACCOUNT_PROJECT_ID
: ID du projet qui contient votre compte de service spécifié par l'utilisateur.BUILD_SERVICE_AGENT
: adresse e-mail de l'agent de service au formatservice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
, oùBUILD_PROJECT_NUMBER
est le numéro du projet dans lequel vous exécutez les builds. Vous pouvez le trouver sur la page des paramètres du projet.
Limites :
- Votre projet Cloud doit se trouver dans une organisation Google Cloud.
- Vous devez commencer les compilations à la ligne de commande en utilisant
gcloud builds submit
ougcloud beta builds triggers create
. Pour utiliser la page "Déclencheurs" de Google Cloud Console, le compte de service spécifié par l'utilisateur et le déclencheur de compilation doivent se trouver dans le même projet.
Configurer les journaux de compilation
Pour spécifier votre propre compte de service pour les compilations, vous devez stocker vos journaux de compilation dans Cloud Logging ou dans un bucket Cloud Storage créé par l'utilisateur. Vous ne pouvez pas stocker vos journaux dans le bucket de journaux par défaut.
- Pour stocker vos journaux dans un bucket Cloud Storage, suivez les instructions de la section Stocker des journaux de compilation dans le bucket créé par l'utilisateur. Assurez-vous de ne pas avoir défini de règle de conservation sur le bucket de journaux, car cela pourrait empêcher Cloud Build d'écrire des journaux de compilation dans le bucket.
- Pour stocker des journaux de compilation dans Logging, attribuez le rôle Rédacteur de journaux (
roles/logging.logWriter
) au compte de service. Pour en savoir plus sur les autres rôles de compte de service nécessaires, consultez la section Autorisations IAM requises. - Pour en savoir plus sur l'emplacement de stockage des journaux de compilation, consultez la section Choisir l'emplacement de stockage des journaux de compilation.
Autorisations IAM requises
Pour commencer les compilations à l'aide du compte de service spécifié par l'utilisateur, l'utilisateur qui demande la compilation doit disposer du rôle IAM Utilisateur du compte de service (
roles/iam.serviceAccountUser
) dans le projet disposant du compte de service.Pour stocker les journaux de compilation dans Logging, accordez le rôle Rédacteur de journaux (
roles/logging.logWriter
) au compte de service.Si vous stockez des images ou des artefacts compilés dans Artifact Registry, Container Registry ou Cloud Storage, accordez l'accès nécessaire:
- Pour stocker des images ou des artefacts dans Artifact Registry, accordez le rôle Rédacteur Artifact Registry (
roles/artifactregistry.writer
) au compte de service. - Pour stocker des images dans Container Registry, accordez le rôle Administrateur de l'espace de stockage (
roles/storage.admin
) au compte de service. - Pour stocker des artefacts dans Cloud Storage, attribuez le rôle Administrateur des objets de l'espace de stockage (
roles/storage.objectAdmin
) au compte de service.
- Pour stocker des images ou des artefacts dans Artifact Registry, accordez le rôle Rédacteur Artifact Registry (
Accordez toutes les autorisations IAM supplémentaires requises par le compte de service pour exécuter la compilation. Par exemple, si votre compilation doit être déployée sur App Engine, le compte de service nécessite le rôle d'administrateur App Engine. Si votre compilation spécifie une source à partir d'un bucket Cloud Storage, le compte de service doit disposer du rôle Rôle Administrateur de l'espace de stockage
Pour savoir comment attribuer des rôles IAM à un compte de service, consultez la page Configurer l'accès aux ressources.
Exécuter des compilations à partir de la ligne de commande
Dans le répertoire racine de votre projet, créez le fichier de configuration de compilation Cloud Build nommé
cloudbuild.yaml
oucloudbuild.json
.Dans le fichier de configuration de compilation :
- Ajoutez un champ
serviceAccount
spécifiant l'adresse e-mail de votre compte de service. - Si vous stockez les journaux de compilation dans Logging, ajoutez un champ
logging
et définissez sa valeur surCLOUD_LOGGING_ONLY
. - Si vous stockez les journaux de compilation dans un bucket Cloud Storage créé par l'utilisateur, procédez comme suit :
- Ajoutez un champ
logging
et définissez sa valeur surGCS_ONLY
. - Ajoutez un champ
logsBucket
et définissez sa valeur sur l'emplacement de votre bucket Cloud Storage.
- Ajoutez un champ
Vous ne pouvez pas stocker de journaux dans le bucket de journaux par défaut lorsque vous utilisez le compte de service spécifié par l'utilisateur.
Le fichier de configuration de compilation suivant configure Cloud Build pour exécuter des compilations à l'aide d'un compte de service spécifié par l'utilisateur et configure les journaux de compilation pour qu'ils soient stockés dans un bucket Cloud Storage créé par l'utilisateur:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT' options: logging: GCS_ONLY
JSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT", "options": { "logging": "GCS_ONLY" } }
Remplacez les valeurs d'espace réservé dans votre fichier de configuration de compilation par les éléments suivants:
LOGS_BUCKET_LOCATION
est le bucket Cloud Storage où stocker les journaux de compilation. Exemple :gs://mylogsbucket
.PROJECT_NAME
correspond à l'ID du projet Cloud sur lequel vous exécutez la compilation.SERVICE_ACCOUNT
est l'adresse e-mail ou l'ID unique du compte de service que vous souhaitez spécifier pour les compilations. Par exemple,my-sa-name@my-project-name.iam.gserviceaccount.com
.
- Ajoutez un champ
Lancez la compilation à l'aide du fichier de configuration de compilation :
gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :
CONFIG_FILE_PATH
est le chemin d'accès du fichier de configuration de compilationSOURCE_DIRECTORY
est le chemin d'accès ou l'URL du code source.
Si vous ne spécifiez pas les éléments CONFIG_FILE_PATH et SOURCE_DIRECTORY dans la commande gcloud builds submit
, Cloud Build considère que le fichier de configuration de compilation et le code source se trouvent dans le répertoire de travail actuel.
Exécuter des compilations à l'aide de déclencheurs de compilation
Dans votre dépôt source, créez le fichier de configuration de compilation Cloud Build nommé
cloudbuild.yaml
oucloudbuild.json
.Dans le fichier de configuration de compilation :
- Si vous stockez les journaux de compilation dans Logging, ajoutez un champ
logging
et définissez sa valeur surCLOUD_LOGGING_ONLY
. - Si vous stockez les journaux de compilation dans un bucket Cloud Storage créé par l'utilisateur, procédez comme suit :
- Ajoutez un champ
logging
et définissez sa valeur surGCS_ONLY
. - Ajoutez un champ
logsBucket
et définissez sa valeur sur l'emplacement de votre bucket Cloud Storage.
- Ajoutez un champ
Vous ne pouvez pas stocker de journaux dans le bucket de journaux par défaut lorsque vous utilisez le compte de service spécifié par l'utilisateur.
Le fichier de configuration de compilation suivant configure les journaux de compilation pour qu'ils soient stockés dans un bucket Cloud Storage créé par l'utilisateur:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' options: logging: GCS_ONLY
JSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "options": { "logging": "GCS_ONLY" } }
Remplacez la valeur d'espace réservé dans votre fichier de configuration de compilation par ce qui suit:
LOGS_BUCKET_LOCATION
est le bucket Cloud Storage où stocker les journaux de compilation. Exemple :gs://mylogsbucket
.
- Si vous stockez les journaux de compilation dans Logging, ajoutez un champ
Spécifiez un compte de service à utiliser avec votre déclencheur de compilation:
Console
Pour exécuter des builds à l'aide de l'interface utilisateur "Trigger" dans Cloud Console, le compte de service spécifié par l'utilisateur doit se trouver dans le même projet que votre déclencheur de compilation. Pour utiliser des déclencheurs avec des comptes de service multiprojet, créez le déclencheur à l'aide de l'outil
gcloud
.- Créez ou modifiez votre déclencheur de compilation.
- Dans le champ Compte de service, spécifiez votre compte de service. Si aucun compte de service n'est spécifié, le compte de service Cloud Build est utilisé par défaut.
- Cliquez sur Créer pour enregistrer le déclencheur de compilation.
gcloud
Lors de la création d'un déclencheur de compilation, spécifiez votre compte de service à l'aide de l'option
--service-account
. Si vous ne spécifiez pas de compte de service, le compte de service Cloud Build par défaut est utilisé. Dans l'exemple suivant, la commandegcloud
crée un déclencheur de compilation lorsque le code source se trouve dans GitHub:gcloud beta builds triggers create github \ --name=TRIGGER_NAME \ --repo-name=REPO_NAME \ --repo-owner=REPO_OWNER \ --branch-pattern=BRANCH_PATTERN --build-config=BUILD_CONFIG_FILE --service-account=SERVICE_ACCOUNT --project=BUILD_PROJECT
Remplacez les valeurs d'espace réservé dans votre fichier de configuration de compilation par les éléments suivants:
TRIGGER_NAME
correspond au nom de votre déclencheur de compilation.REPO_NAME
est le nom du dépôt.REPO_OWNER
est le nom d'utilisateur du propriétaire du dépôt.BRANCH_PATTERN
est le nom de la branche de votre dépôt sur lequel appeler la compilation.TAG_PATTERN
est le nom du tag de votre dépôt sur lequel appeler la compilation.BUILD_CONFIG_FILE
correspond au chemin d'accès à votre fichier de configuration de compilation.SERVICE_ACCOUNT
correspond à l'adresse e-mail associée à votre compte de service.BUILD_PROJECT
est le projet dans lequel vous démarrez des builds.
Votre déclencheur de compilation appelle une compilation en réponse à l'événement associé à votre déclencheur. Par exemple, votre déclencheur s'exécute lorsque le code source est transféré vers le dépôt. Pour en savoir plus sur les déclencheurs, consultez la pageCréer et gérer des déclencheurs de compilation.
Étapes suivantes
- Pour en savoir plus sur les comptes de service Cloud Build par défaut, consultez la section Compte de service Cloud Build.
- Pour savoir comment accorder des autorisations au compte de service Cloud Build par défaut, consultez la section Configurer l'accès au compte de service Cloud Build.