Créer un pipeline DevOps sans serveur pour Salesforce avec Cloud Build

Last reviewed 2021-02-22 UTC

Ce tutoriel explique comment créer un pipeline d'intégration continue/de déploiement continu (CI/CD) sans serveur pour Salesforce à l'aide de Salesforce Developer Experience (SFDX) et Cloud Build. Les pipelines Cloud Build utilisent la conteneurisation. Les pipelines exécutent les compilations sous la forme d'une série d'étapes de compilation, où chaque étape est exécutée dans un conteneur Docker. Le pipeline peut évoluer à la hausse ou à la baisse en fonction de la charge, sans avoir à préprovisionner les serveurs. Il propose également des compilations rapides, cohérentes et automatisées.

Ce tutoriel s'adresse à toute personne chargée de la conception, du développement et de la maintenance des workflows DevOps au sein d'une organisation. Il peut s'agir d'architectes, d'équipes DevOps et d'ingénieurs. Les différentes sections du document illustrent les parties du pipeline en fonction des rôles. Par exemple, une partie concerne les administrateurs et les responsables DevOps, et une autre les développeurs Salesforce.

Dans le présent document, nous partons du principe que vous connaissez bien Salesforce DX, la CLI Salesforce, Git, GitHub, Docker, les produits Google Cloud tels que Cloud Build et les concepts de conteneurisation. Nous supposons également que vous possédez un compte GitHub.

Les cycles de développement des logiciels peuvent varier considérablement. Dans ce tutoriel, nous partons du principe que vous suivez une méthodologie de publication agile.

Objectifs

  • Configurer Salesforce Developer Experience
  • Configurer une stratégie d'embranchement Git
  • Configurer Cloud Build
  • Exécuter le pipeline CI/CD pour Salesforce à l'aide des outils de compilation Google Cloud et de GitHub

Coûts

Ce tutoriel utilise les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Des frais Salesforce peuvent également s'appliquer. Dans ce tutoriel, vous utilisez une organisation Salesforce Developer Edition, qui peut être gratuite. Pour en savoir plus, consultez la page Salesforce sur Developer Edition.

Avant de commencer

  1. 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

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

  3. Activez l'API Cloud Build

    Activer l'API

  4. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

  5. Veillez à disposer d'un compte Salesforce pouvant assumer le rôle d'e lorganisation Dev Hub. Si vous n'avez pas d'organisation, vous pouvez créer un compte Developer Edition sur le site Salesforce pour les développeurs.

Une fois que vous avez terminé ce tutoriel, évitez de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la page Effectuer un nettoyage pour en savoir plus.

Architecture

Le schéma suivant illustre l'architecture du workflow CI/CD que vous créez dans ce tutoriel. Dans cette architecture, les projets sont organisés sous forme de releases. Les développeurs qui souhaitent travailler sur une fonctionnalité créent une nouvelle branche de fonctionnalité à partir d'une branche de release.

Architecture du pipeline montrant le flux de création d'une branche, l'envoi d'une demande d'extraction et la fusion de la modification dans la branche principale. Plusieurs étapes déclenchent des tâches Cloud Build.

Le schéma illustre le flux suivant :

  1. Les développeurs créent dans GitHub des branches de fonctionnalités pour les fonctionnalités qu'ils développent.
  2. Les développeurs terminent le travail de développement et effectuent des tests unitaires dans les organisations tests Salesforce.
  3. Les développeurs valident et déploient leur travail de développement dans leur dépôt de code source (GitHub dans ce tutoriel).
  4. Les développeurs créent une demande d'extraction pour fusionner leur travail dans la branche de release.
  5. La création d'une demande d'extraction déclenche automatiquement une tâche Cloud Build pour exécuter des tests.
  6. Le personnel responsable (généralement des responsables d'équipe) examine et approuve les demandes d'extraction pour fusionner le travail de développement dans la branche de release.
  7. Une fusion dans la branche de release déclenche automatiquement une tâche Cloud Build pour déployer le codebase à des fins de contrôle qualité ou dans d'autres environnements Salesforce.
  8. Des tests manuels et examens sont éventuellement effectués dans un environnement de contrôle qualité.
  9. Le personnel responsable crée une demande d'extraction pour fusionner le code dans la branche main.
  10. La demande d'extraction envoyée à la branche main déclenche une tâche Cloud Build pour déployer le code en production.

Les développeurs qui souhaitent travailler sur des projets commencent par cloner le dépôt du projet à partir de l'outil de contrôle de source de l'entreprise (GitHub dans ce tutoriel). Le schéma suivant représente cette stratégie sous forme de graphique.

Stratégie d'embranchement présentée sous la forme d'un ensemble de versions, avec une branche divisée en plusieurs branches de fonctionnalités qui sont ensuite fusionnées séparément dans une branche de release, puis de cette branche dans la branche principale.

Comme le montre le schéma, la stratégie d'embranchement comprend les éléments suivants :

  1. Une branche principale. Le code de la branche principale reflète la version actuelle du code en cours d'exécution en production.
  2. Une branche de release. Une branche de release est une branche de longue durée (par rapport à une branche de fonctionnalité) qui coordonne toutes les modifications et le code associés à une release. Une organisation crée une branche de release pour chaque nouvelle release.
  3. Une ou plusieurs branches de fonctionnalités. Les branches de fonctionnalités permettent d'isoler le travail en cours de la version la plus récente du code dans la branche principale. En règle générale, plusieurs branches de fonctionnalités forment une branche de release. Pour les développeurs, il est recommandé de créer des branches de fonctionnalités pour corriger les bugs.

Une fois que les développeurs ont cloné un dépôt de projet, ils travaillent sur leur ordinateur local ou dans une organisation test Salesforce. Ils peuvent utiliser une organisation test pour exécuter des tests unitaires sur les modifications qu'ils effectuent. Si les tests unitaires réussissent, ils valident leur code et le transmettent dans le dépôt de code source. Ils génèrent ensuite une demande d'extraction de leur code à fusionner dans la branche de release parente.

La demande d'extraction déclenche automatiquement une tâche Cloud Build qui effectue les opérations suivantes :

  • Crée une organisation test afin d'exécuter des tests unitaires
  • Met à jour la demande d'extraction avec le résultat des tests

À ce stade, les chefs d'équipe et les propriétaires de produits peuvent examiner la demande d'extraction. Si la demande est approuvée, les modifications sont fusionnées dans la branche de release.

Selon votre cycle de développement logiciel, des étapes automatisées supplémentaires peuvent être déclenchées en fonction d'une fusion avec la branche de release. Exemple d'étape automatisée : déployer le code validé sur un bac à sable supérieur, tel qu'un bac à sable de contrôle qualité ou de test d'intégration système.

Vous pouvez également configurer Cloud Build pour envoyer des notifications de compilation et effectuer des actions supplémentaires à l'aide de Cloud Functions, Cloud Run ou d'autres outils Google Cloud. (Ces actions supplémentaires ne sont pas abordées dans ce tutoriel.) Cette approche offre la flexibilité nécessaire pour adapter le pipeline en fonction de votre framework DevOps d'entreprise.

Pour des raisons de simplicité, dans ce tutoriel, vous déployez l'exemple de codebase sur une seule organisation Salesforce (Dev Hub). Lorsque vous créez un pipeline CI/CD pour la production, vous utilisez l'architecture illustrée plus tôt et automatisez les déploiements sur des bacs à sable appartenant à votre cycle de développement de logiciels.

Personas généralement impliqués dans le développement de logiciels

Chaque organisation est différente, et chacune dispose de son propre ensemble de rôles et d'équipes. Le tableau suivant répertorie les principaux personss (rôles) qui interagissent généralement avec les pipelines DevOps Salesforce comme celui décrit dans ce tutoriel.

Les personnes occupant différents rôles ont différentes responsabilités pour la configuration des pipelines Salesforce. Par conséquent, le tutoriel comprend deux chemins. L'un est destiné aux administrateurs et aux responsables DevOps, et l'autre aux développeurs.

Personna Responsabilités
Administrateur ou responsable DevOps
  • Configure l'organisation Dev Hub.
  • Génère des certificats permettant aux utilisateurs de se connecter à l'organisation Dev Hub à partir de la CLI Salesforce.
  • Crée des applications connectées dans tous les environnements Salesforce vers lesquels le code est déployé à l'aide du pipeline DevOps.
  • Configure les comptes de développeur dans l'organisation Dev Hub.
  • Configure le pipeline DevOps et tous les déclencheurs requis.
  • Initialise le dépôt de code source.
  • Configure les déclencheurs Cloud Build.
Développeur Salesforce
  • Clone le dépôt de code source.
  • Configure la CLI Salesforce pour le développement.
  • Développe les fonctionnalités dans une release et effectue les tests unitaires associés.
  • Lorsque les fonctionnalités sont finalisées, génère une demande d'extraction pour les fusionner dans la branche de release.
Responsable de contrôle qualité
  • Examine et approuve les demandes d'extraction pour fusionner le travail d'un développeur sur une fonctionnalité dans la branche de release.
Responsable de release
  • Gère et approuve les demandes d'extraction pour la fusion dans la branche principale, qui promeut le code en production.

Configurer des pipelines pour les administrateurs Salesforce et les responsables DevOps

Cette section décrit les tâches que les administrateurs et les équipes DevOps effectuent pour configurer le workflow CI/CD.

Activer l'organisation Dev Hub

  1. Connectez-vous à votre organisation de production Salesforce.
  2. Dans l'onglet Setup (Configuration), dans la zone Quick Find (Recherche rapide), saisissez Dev Hub, puis sélectionnez Dev Hub.

    Page Salesforce Dev Hub.

  3. Activez Dev Hub.

    Cette étape vous permet de configurer une organisation test. Utilisez l'organisation test pour déployer l'exemple de code du tutoriel dans une organisation Salesforce Developer Edition.

Créer un certificat et une paire de clés

Après avoir activé l'organisation Dev Hub, vous devez générer un certificat et une paire de clés pouvant servir à s'authentifier auprès de l'organisation Salesforce Dev Hub. Vous utiliserez ce certificat et cette paire de clés lorsque vous configurerez Cloud Build aux étapes suivantes.

Pour les pipelines CI/CD de production, vous devez générer des certificats supplémentaires pour vous authentifier auprès des bacs à sable Salesforce. (Vous ne créez pas ces certificats supplémentaires dans le cadre de ce tutoriel.) Lorsque vous générez des certificats et des paires de clés pour chaque environnement, veillez à leur donner des noms identifiables, comme dans les exemples suivants :

  • Production (organisation Dev Hub) : salesforce.key et salesforce.crt. Vous utiliserez ces noms dans la procédure qui suit.
  • Bac à sable de contrôle qualité : salesforce_qa.key et salesforce_qa.crt.
  • Bac à sable de développement intégré : salesforce_dev.key et salesforce_dev.crt.

Pour générer un certificat et une paire de clés, procédez comme suit :

  1. Dans Cloud Shell, générez un certificat et une paire de clés afin que Cloud Build puisse s'authentifier auprès de votre organisation Salesforce Dev Hub à partir de la CLI Salesforce :

    openssl req -x509 -sha256 -nodes -days 36500 -newkey \
    rsa:2048 -keyout salesforce.key -out \
    salesforce.crt
    

    Vous êtes invité à saisir des informations pour identifier le certificat. Pour ce tutoriel, ces valeurs n'ont pas d'importance. Vous pouvez donc appuyer sur Entrée pour accepter les valeurs par défaut.

    Notez que dans la commande, vous utilisez les noms salesforce.key et salesforce.crt, car vous créez le certificat et la paire de clés pour l'organisation Dev Hub.

  2. Cliquez sur More (Plus), puis sélectionnez Download File (Télécharger le fichier).

  3. Dans le champ Chemin d'accès complet au fichier, saisissez le nom de fichier suivant, puis cliquez sur Télécharger :

    salesforce.crt
    

    Cette étape déclenche le téléchargement en local du certificat que vous avez généré. Dans la section suivante, vous allez importer le certificat dans votre organisation Salesforce.

Créer des applications connectées dans Salesforce

Dans cette section, vous allez créer une application connectée que Cloud Build peut utiliser pour déployer votre code Salesforce. Pour ce tutoriel, vous ne déployez du code que dans l'organisation Dev Hub. Dans un environnement de production, vous déployez du code pour chaque bac à sable et pour l'organisation de production dans laquelle vous souhaitez que Cloud Build déploie votre code Salesforce pour le pipeline DevOps.

Dans le cadre de ce processus, vous utilisez le certificat et la paire de clés générés à la section précédente. Le certificat est la clé publique permettant d'authentifier le client Salesforce dans une session Cloud Shell avec l'organisation Salesforce Dev Hub (bac à sable Salesforce). Le certificat permet également d'authentifier Cloud Build pour les déploiements automatisés.

Les détails de certaines étapes de la procédure suivante varient selon l'édition de Salesforce que vous utilisez. Assurez-vous d'utiliser le certificat et les paires de clés appropriés pour l'environnement sélectionné.

  1. Avec Salesforce Lightning Experience, utilisez le Gestionnaire d'applications pour créer des applications connectées. Dans Setup (Configuration) dans votre organisation Salesforce, procédez comme suit :

    1. Dans la zone Quick Find (Recherche rapide), saisissez App.
    2. Sélectionnez App Manager (Gestionnaire d'applications).
    3. Cliquez sur New Connected App (Nouvelle application connectée).

    Si vous utilisez Salesforce Classic, dans Setup (Configuration) dans votre organisation Salesforce, procédez comme suit :

    1. Dans la zone Quick Find (Recherche rapide), saisissez Apps.
    2. Sous Build > Create (Compiler > Créer), sélectionnez Apps (Applications).
    3. Sous Connected Apps (Applications connectées), cliquez sur New (Nouveau).
  2. Pour le nom de votre application, saisissez Google Cloud DevOps.

    Cette valeur renseigne Google_Cloud_DevOps dans le champ API Name (Nom de l'API).

  3. Saisissez l'adresse e-mail du contact et toute autre information appropriée sur votre application.

  4. Sélectionnez Enable OAuth Settings (Activer les paramètres OAuth).

  5. Dans le champ Callback URL (URL de rappel), saisissez l'URL suivante :

    http://localhost:1717/OauthRedirect
    
  6. Pour activer l'option de signature numérique, cliquez sur Choose File (Choisir le fichier), puis sélectionnez le fichier salesforce.crt que vous avez téléchargé précédemment.

  7. Ajoutez les niveaux d'accès OAuth suivants dans Selected OAuth Scopes (Niveaux d'accès OAuth sélectionnés) :

    • Access and manage your data (api) (Accéder à vos données et les gérer – API)
    • Perform requests on your behalf at any time (refresh_token, offline_access) (Effectuer des requêtes en votre nom à tout moment – refresh_token, offline_access)
    • Provide access to your data via the web (web) (Fournir un accès à vos données via le Web – Web)

    Sélecteur de boîte de dialogue pour les niveaux d'accès OAuth.

  8. Cliquez sur Save (Enregistrer), puis sur Continue (Continue).

  9. Notez la valeur de la clé client affichée dans la section d'API. Vous en aurez besoin lorsque vous configurerez le fichier manifeste Cloud Build.

    Si vous travaillez dans un environnement de production, vous disposez d'une clé pour chaque environnement de déploiement.

  10. Cliquez sur Manage (Gérer), puis pour modifier les règles OAuth, cliquez sur Edit Policies (Modifier les règles).

  11. Définissez Permitted users (Utilisateurs autorisés) sur Admin Approved Users are Pre-Authorized (Les utilisateurs validés par l'administrateur sont pré-autorisés), puis confirmez votre choix.

  12. Définissez la relaxe IP sur Relax IP Restrictions (Assouplir les restrictions IP).

  13. Cliquez sur Enregistrer.

  14. Cliquez sur Manage Profiles (Gérer les profils) et sélectionnez l'option System Administrator (Administrateur système).

    Après cette étape, les utilisateurs avec ce profil peuvent se connecter à la CLI Salesforce.

  15. Cliquez sur Enregistrer.

Initialiser l'environnement Google Cloud

  1. Dans Cloud Shell, définissez le projet que vous avez créé ou sélectionné comme projet par défaut :

    gcloud config set project PROJECT_ID
    

    Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

  2. Attribuez des paramètres pour la région et la zone :

    gcloud config set compute/region us-central1
    gcloud config set compute/zone us-central1-a
    

    Dans ce tutoriel, la région est us-central1 et la zone est us-central1-a.

  3. Exportez l'ID du projet Google actuel vers une variable d'environnement nommée GCP_PROJECT_NUMBER :

    export GCP_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
    

Importer les clés Salesforce dans Cloud Storage

  1. Dans Cloud Shell, créez un bucket Cloud Storage dans votre projet de compilation pour stocker les fichiers de clé privée Salesforce :

    gsutil mb -p ${DEVSHELL_PROJECT_ID} -l us-central1 \
        gs://salesforce-ref-${DEVSHELL_PROJECT_ID}
    

    Le bucket doit avoir un nom unique. Cette commande crée un nom de bucket comprenant votre ID de projet Google Cloud.

  2. Copiez les clés privées Salesforce que vous avez générées dans la section Activer l'organisation Dev Hub dans le nouveau bucket Cloud Storage :

    gsutil cp salesforce.key gs://salesforce-ref-${DEVSHELL_PROJECT_ID}
    

Créer votre dépôt GitHub

  1. Dans Cloud Shell, clonez le dépôt associé à ce tutoriel :

    git clone https://github.com/GoogleCloudPlatform/salesforce-serverless-cicd-cloudbuild
    
  2. Créez un dépôt GitHub nommé DEV_REPO_NAME.

    Remplacez DEV_REPO_NAME par le nom que vous souhaitez attribuer localement au dépôt.

    Il s'agit du dépôt à partir duquel les développeurs extraient du code ou vers lequel ils en envoient. Pour les besoins de ce tutoriel, vous allez créer ce dépôt dans votre propre compte GitHub.

  3. Accédez au dépôt cloné :

    cd salesforce-serverless-cicd-cloudbuild
    
  4. Ajoutez le dépôt GitHub du développeur en tant que dépôt distant :

    git remote add github DEV_REPO_NAME
    

Configurer Cloud Build

Dans cette section, vous allez effectuer les étapes de configuration requises pour déclencher des tâches Cloud Build lorsque les développeurs génèrent des demandes d'extraction pour fusionner leur travail dans une branche de release.

Vous allez configurer deux déclencheurs pour le pipeline CI/CD que vous créez dans ce tutoriel :

  • Déclencheur qui exécute une tâche Cloud Build lorsqu'un développeur crée une demande d'extraction pour fusionner du code dans la branche de release. Une utilisation courante de ce déclencheur consiste à exécuter des tests unitaires.
  • Déclencheur qui exécute une tâche Cloud Build lorsqu'une demande d'extraction est fusionnée dans la branche de release. Une utilisation courante de ce déclencheur consiste à déployer des modifications dans un bac à sable de destination (Dev Hub dans ce tutoriel).

Créer une image de base incluant Salesforce DX

Cloud Build exécute votre compilation sous la forme d'un ensemble d'étapes, où chaque étape s'exécute dans un conteneur Docker. Vous compilez une image de conteneur Docker de base incluant la CLI Salesforce, et Cloud Build utilise les commandes de CLI Salesforce pour exécuter la tâche.

  1. Dans Cloud Shell, créez un Dockerfile pour l'image à compiler :

    cat <<EOF > Dockerfile
    FROM debian:buster
    RUN apt-get update && \
    apt-get install -y wget xz-utils
    RUN wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz && \
    mkdir sfdx && \
    tar xJf sfdx-linux-amd64.tar.xz -C sfdx --strip-components 1 && \
    ./sfdx/install
    ENTRYPOINT [ "sfdx" ]
    EOF
    
  2. Exportez le nom de l'image Docker vers une variable d'environnement nommée SFDX_BASE_IMAGE :

    export SFDX_BASE_IMAGE="gcr.io/${DEVSHELL_PROJECT_ID}/salesforcedx-base-image:1"
    
  3. Créez votre conteneur avec Cloud Build, puis publiez l'image dans Container Registry :

    gcloud builds submit --tag ${SFDX_BASE_IMAGE}
    

Configurer la tâche Cloud Build

Pour définir une tâche Cloud Build, modifiez le fichier cloudbuild.yaml.

  1. Dans Cloud Shell, créez un fichier cloudbuild.yaml pour définir les étapes de la tâche à exécuter lorsque Cloud Build déploie du code dans votre organisation Salesforce Dev Hub :

    cat <<EOF > cloudbuild.yaml
    steps:
    - name: gcr.io/cloud-builders/gsutil
      args: ['cp', 'gs://\${_BUCKET_NAME}/salesforce.key', 'salesforce.key']
    - name: "${SFDX_BASE_IMAGE}"
      args:
      - force:auth:jwt:grant
      - --setdefaultusername
      - -u
      - \${_SF_USERNAME}
      - -f
      - ./salesforce.key
      - -i
      - \${_CONSUMER_KEY}
    - name: "${SFDX_BASE_IMAGE}"
      args: ['force:source:deploy', '-p', './force-app/']
    substitutions:
      _BUCKET_NAME: __BUCKET_NAME__
      _SF_USERNAME: __USERNAME__
      _CONSUMER_KEY: __CONSUMER_KEY__
    EOF
    

    Ce fichier configure Cloud Build pour effectuer les opérations suivantes :

    1. Télécharger le fichier salesforce.key permettant à Cloud Build de s'authentifier auprès de l'organisation Dev Hub.
    2. Démarrer un conteneur Docker sur lequel la CLI Salesforce est installée, puis se connecter à l'organisation Dev Hub à l'aide d'une autorisation JWT. Cloud Build utilise des paramètres de configuration tels que la clé client et le nom d'utilisateur Salesforce figurant dans la définition du déclencheur Cloud Build.
    3. Déployer le code transmis par le développeur à l'organisation Dev Hub ou à un autre bac à sable de destination dans les pipelines CI/CD de production.
  2. Créez un autre fichier nommé cloudbuild_pr.yaml pour définir les étapes de la tâche à exécuter lorsque Cloud Build déploie le code à partir d'une demande d'extraction vers une organisation de travail ou un bac à sable Salesforce temporaire à des fins de test :

    cat <<EOF > cloudbuild_pr.yaml
    steps:
    - name: gcr.io/cloud-builders/gsutil
      args: ['cp', 'gs://\${_BUCKET_NAME}/salesforce.key', 'salesforce.key']
    - name: "${SFDX_BASE_IMAGE}"
      args:
      - force:auth:jwt:grant
      - -u
      - \${_SF_USERNAME}
      - -f
      - ./salesforce.key
      - -i
      - \${_CONSUMER_KEY}
    - name: "${SFDX_BASE_IMAGE}"
      args:
      - force:org:create
      - --setdefaultusername
      - --definitionfile
      - config/project-scratch-def.json
      - --targetdevhubusername
      - \${_SF_USERNAME}
      - --setalias
      - testing org
    - name: "${SFDX_BASE_IMAGE}"
      args: ['force:source:push']
    - name: "${SFDX_BASE_IMAGE}"
      args: ['force:apex:test:run', '--resultformat', 'tap', '--codecoverage']
    - name: "${SFDX_BASE_IMAGE}"
      args: ['force:org:delete', '--noprompt']
    substitutions:
      _BUCKET_NAME: __BUCKET_NAME__
      _SF_USERNAME: __USERNAME__
      _CONSUMER_KEY: __CONSUMER_KEY__
    EOF
    

    Ce fichier configure Cloud Build pour effectuer les opérations suivantes :

    1. Télécharger le fichier salesforce.key permettant à Cloud Build de s'authentifier auprès de l'organisation Dev Hub.
    2. Démarrer un conteneur Docker sur lequel la CLI Salesforce DX est installée, puis se connecter à l'organisation Dev Hub à l'aide d'une autorisation JWT. Cloud Build utilise des paramètres de configuration tels que la clé client et le nom d'utilisateur Salesforce figurant dans la définition du déclencheur Cloud Build.
    3. Créer une organisation test afin de déployer le code du développeur pour les tests automatisés.
    4. Exécuter les textes Apex dans l'organisation test.
    5. Générer le résultat texte Apex, qui est disponible dans le récapitulatif de la demande d'extraction GitHub.
    6. Supprimer l'organisation test temporaire.

Transférer votre dépôt vers GitHub

  1. Dans Cloud Shell, ajoutez le nouveau fichier cloudbuild yaml et le Dockerfile au dépôt, puis transférez les fichiers dans la branche principale du dépôt DEV_REPO_NAME. Lorsque vous y êtes invité, connectez-vous à GitHub.

    git add .
    git commit -m "Added cloud build configuration"
    git push github main
    
  2. Créez une branche de release à partir de laquelle les développeurs peuvent extraire du code ou vers laquelle ils peuvent en transférer. Pour ce tutoriel, nommez la branche release-sample.

    git checkout -b release-sample
    
  3. Transférez la branche vers GitHub :

    git push github release-sample
    

Connecter votre dépôt GitHub à Cloud Build

  1. Accédez à la page Application Cloud Build sur la place de marché GitHub.
  2. Faites défiler la page, puis cliquez sur Setup with Google Cloud Build (Configurer avec Google Cloud Build). Si vous y êtes invité, connectez-vous à GitHub.
  3. Connectez votre dépôt à Cloud Build :
    1. Sélectionnez Sélectionner uniquement les dépôts.
    2. Dans la liste Select repositories (Sélectionner les dépôts), sélectionnez le dépôt.
  4. Cliquez sur Installer.
  5. Connectez-vous à Google Cloud.

    La page Autorisation s'affiche. Vous êtes alors invité à autoriser l'application Google Cloud Build à se connecter à Google Cloud.

  6. Cliquez sur Autoriser Google Cloud Build par GoogleCloudBuild.

    Vous êtes redirigé vers Google Cloud Console.

  7. Sélectionnez votre projet Google Cloud.

  8. Acceptez les conditions d'utilisation, puis cliquez sur Suivant.

  9. Sur la page Sélectionner un dépôt, sélectionnez le dépôt GitHub DEV_REPO_NAME.

  10. Cliquez sur Connecter un dépôt.

  11. Cliquez sur Créer un déclencheur push.

Mettre à jour la définition du déclencheur Cloud Build

Vous définissez les détails du nouveau déclencheur qui a été créé lorsque vous avez cliqué sur Créer un déclencheur push dans la section précédente.

  1. Dans Google Cloud Console, ouvrez la page Déclencheurs Cloud Build.

    Accéder à la page "Déclencheurs Cloud Build"

  2. Cliquez sur Menu pour le nouveau déclencheur, puis sur Modifier.

  3. Pour Nom, définissez pull-request-to-release-branch.

  4. Remplacez la description par Run unit tests when a pull request is created from a feature branch.

  5. Remplacez Événement par Demande d'extraction (application GitHub seulement).

  6. Pour Source, dans la zone de texte Branche de base, saisissez l'expression suivante :

    ^release.*
    
  7. Dans le champ Configuration, sélectionnez Fichier de configuration Cloud Build (yaml ou json) et saisissez cloudbuild_pr.yaml dans la zone de texte.

  8. Sous Variables de substitution, créez trois variables. Pour chaque variable, procédez comme suit :

    1. Cliquez sur Ajouter un élément.
    2. Définissez les champs Variable et Valeur comme indiqué dans le tableau suivant :

      Variable Valeur
      _BUCKET_NAME Nom du bucket Cloud Storage pour le fichier de clé Salesforce, au format suivant :

      salesforce-ref-PROJECT_ID

      Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
      _CONSUMER_KEY Clé client de l'application connectée créée dans l'organisation Salesforce Dev Hub.
      _SF_USERNAME Nom d'utilisateur Salesforce pour l'organisation Dev Hub.
  9. Cliquez sur Enregistrer.

    Ne fermez pas cette page. Vous allez travailler sur cette page dans le cadre de la procédure suivante.

Créer un deuxième déclencheur Cloud Build

L'étape suivante consiste à créer un autre déclencheur pour démarrer des tâches Cloud Build lorsque des commits sont effectués sur la branche de release. Ce déclencheur appelle une tâche Cloud Build pour appliquer les modifications à votre organisation Dev Hub. Dans votre pipeline DevOps, vous devez vous assurer que seuls le personnel et les processus autorisés peuvent valider des modifications apportées à la branche de release.

  1. Sur la page Déclencheurs Cloud Build, cliquez sur Créer un déclencheur pour créer un déclencheur.
  2. Pour Nom, définissez commits-to-release-branch.
  3. Pour Type de déclencheur, sélectionnez Déployer sur une branche.
  4. Dans la liste Dépôt, sélectionnez votre dépôt GitHub Salesforce.
  5. Dans la zone de texte Branche (expression régulière), saisissez l'expression suivante :

    ^release.*
    
  6. Dans le champ Configuration de la compilation, sélectionnez Fichier de configuration Cloud Build et saisissez cloudbuild.yaml.

  7. Sous Variables de substitution, créez trois variables. Pour chaque variable, procédez comme suit :

    1. Cliquez sur Ajouter un élément.
    2. Définissez les champs Variable et Valeur comme indiqué dans le tableau suivant.

      Variable Valeur
      _BUCKET_NAME Saisissez le nom du bucket pour le fichier de clé Salesforce, au format suivant :

      salesforce-ref-PROJECT_ID

      Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
      _CONSUMER_KEY Clé client de l'application connectée créée dans l'organisation Salesforce Dev Hub.
      _SF_USERNAME Nom d'utilisateur Salesforce pour l'organisation Dev Hub.
  8. Cliquez sur Enregistrer.

Ajouter des autorisations pour permettre à Cloud Build de lire les clés Salesforce

  • Dans Cloud Shell, ajoutez des autorisations à votre compte de service Cloud Build pour permettre à ce compte de lire les clés Salesforce à partir du bucket Cloud Storage que vous avez créé :

    gsutil iam ch serviceAccount:$GCP_PROJECT_NUMBER@cloudbuild.gserviceaccount.com:objectViewer \
        gs://salesforce-ref-${DEVSHELL_PROJECT_ID}
    

Configurer des pipelines pour les développeurs Salesforce

Les tâches décrites dans cette section sont destinées aux développeurs Salesforce.

Si vous avez effectué les étapes décrites précédemment dans ce tutoriel dans la section destinée aux administrateurs et aux responsables, veillez à utiliser un autre ensemble d'identifiants pour exécuter les étapes de cette section.

Les étapes d'installation de la CLI Salesforce DX peuvent varier en fonction du système d'exploitation que vous utilisez. Cette section décrit les étapes pour Debian Linux. Pour obtenir des instructions sur macOS et Windows, reportez-vous à la procédure d'installation de la CLI Salesforce dans la documentation Salesforce.

Configurer la CLI Salesforce DX

Dans cette section, vous allez installer la CLI Salesforce et configurer l'autorisation correspondante.

  1. Sur votre machine locale (pas dans Cloud Shell), accédez au répertoire d'accueil :

    cd $HOME
    
  2. Installez les outils xz-utils et wget :

    sudo apt-get install --assume-yes xz-utils wget
    
  3. Installez la CLI Salesforce :

    wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
    
  4. Créez un répertoire sfdx :

    mkdir sfdx
    
  5. Extrayez le fichier TAR téléchargé :

    tar xJf sfdx-linux-amd64.tar.xz -C sfdx --strip-components 1
    
  6. Installez la CLI :

    ./sfdx/install
    

    La CLI Salesforce est installée dans /usr/local/bin/sfdx.

  7. Vérifiez que la CLI est correctement configurée :

    sfdx
    

    Le résultat ressemble à ce qui suit :

    VERSION
    sfdx-cli/7.8.1-8f830784cc linux-x64 node-v10.15.3
    
    USAGE
    $ sfdx [COMMAND]
    
    COMMANDS
    commands  list all the commands
    force     tools for the Salesforce developer
    help      display help for sfdx
    plugins   add/remove/create CLI plug-ins
    update    update the sfdx CLI
    which     show which plugin a command is in
    
    TOPICS
    Run help for each topic below to view subcommands
    
    commands  list all the commands
    force     tools for the Salesforce developer
    plugins   add/remove/create CLI plug-ins
    

Connecter votre environnement de développement local à l'organisation Salesforce Dev Hub

  1. Depuis votre machine locale, connectez-vous à l'organisation Salesforce à l'aide d'identifiants associés à un rôle de développeur :

    sfdx force:auth:web:login --setalias YOUR_HUB_ORG
    

    Remplacez YOUR_HUB_ORG par un alias approprié pour votre organisation Dev Hub.

    Cette commande ouvre un navigateur Web sur votre machine locale. Vous ne pouvez donc pas l'exécuter sur une VM à laquelle vous êtes connecté.

Cloner le dépôt GitHub

  1. Clonez le dépôt GitHub créé par votre administrateur Salesforce :

    git clone DEV_REPO_NAME -o github
    
  2. Accédez au répertoire du dépôt cloné :

    cd DEV_REPO_NAME
    

Transférer le codebase et les métadonnées Salesforce vers une organisation test

Dans cette section, vous allez transférer le codebase et les métadonnées vers une organisation test afin qu'ils puissent subir des tests unitaires.

  1. Sur votre machine locale, exportez votre nom d'utilisateur Dev Hub vers une variable d'environnement nommée SALESFORCE_USERNAME :

    export SALESFORCE_USERNAME=YOUR_DEVHUB_USERNAME
    

    Remplacez YOUR_DEVHUB_USERNAME par le nom d'utilisateur que vous avez configuré précédemment.

  2. Créez une organisation test afin de tester le dépôt que vous avez cloné dans le cadre de ce tutoriel :

    sfdx force:org:create \
        --setdefaultusername \
        --definitionfile config/project-scratch-def.json \
        --targetdevhubusername ${SALESFORCE_USERNAME} \
        --setalias feature-test-scratch-org
    
  3. Déployez les métadonnées et le code dans l'organisation test :

    sfdx force:source:push
    
  4. Générez une URL pour l'organisation test et accédez-y dans une fenêtre de navigateur :

    sfdx force:org:open
    

En général, l'étape suivante du cycle de vie d'un projet consiste à exécuter des tests unitaires et à valider les fonctionnalités que vous avez développées. Vous n'effectuerez pas ces opérations dans le cadre ce tutoriel, car vous travaillez avec un exemple de code pré-validé.

Transférer votre code vers un dépôt de code source

  1. Sur votre machine locale, créez une branche nommée feature-1 :

    git checkout -b feature-1
    
  2. Transférez les modifications vers un dépôt de code source :

    git add .
    git commit -m "Feature 1 changes"
    git push github feature-1
    

    Pour ce tutoriel, vous utilisez GitHub comme outil de code source.

Tester le déploiement

Cette section décrit les tests que vous pouvez exécuter pour vérifier que les déclencheurs que vous avez créés fonctionnent correctement. Le dépôt créé par votre administrateur Salesforce contient un exemple de classe de test.

  1. Sur votre machine locale (pas dans Cloud Shell), créez une branche Git :

    git checkout -b feature-1
    
  2. À l'aide d'un éditeur de texte, ouvrez le fichier suivant :

    ./force-app/main/default/classes/SampleTest.cls
    
  3. Pour que le test échoue, dans l'instruction System.assertEquals, remplacez la valeur 101 par 102. Après avoir effectué la modification, enregistrez le fichier, mais gardez-le ouvert, car vous le modifierez par la suite dans cette procédure.

    @isTest
    public class SampleTest {
    static testmethod void testAddOne() {
        Test.startTest();
        System.assertEquals(Sample.addOne(100), 102); // Change to 102 from 101
        Test.stopTest();
      }
    }
    
  4. Ajoutez et validez la modification dans la branche de fonctionnalité :

    git add .
    git commit -m "Changed test case"
    git push github feature-1
    
  5. Créez une demande d'extraction pour fusionner votre code dans la branche de release d'exemple.

    Une nouvelle tâche Cloud Build est déclenchée. Cependant, la tâche échoue car le test unitaire échoue.

  6. Pour afficher l'état de la compilation, ouvrez la page Cloud Build.

    Accéder à la page Cloud Build

  7. Accédez à la section Historique de la page Cloud Build.

    Le journal de compilation suivant pour la tâche indique que l'assertion de test a échoué.

    Step #4: not ok 1 SampleTest.testAddOne
    Step #4: # System.AssertException: Assertion Failed: Expected: 101, Actual: 102
    Step #4: # Class.SampleTest.testAddOne: line 24, column 1
    Step #4: # Run "sfdx force:apex:test:report -i 7076300001gEzne --resultformat <format>" to retrieve test results in a different format.
    [. . .]
    Finished Step #4
    ERROR
    ERROR: build step 4 "gcr.io/serverless-devops-sf/salesforcedx-base-image:1" failed: step exited with non-zero status: 100
    
  8. Pour réussir le test, remplacez la valeur 102 par 101 dans le fichier ./force-app/main/default/classes/SampleTest.cls :

    @isTest
    public class SampleTest {
    static testmethod void testAddOne() {
        Test.startTest();
        System.assertEquals(Sample.addOne(100), 101); //Change back to 101 from 102
        Test.stopTest();
      }
    }
    
  9. Ajoutez et validez la modification dans la branche de fonctionnalité :

    git add .
    git commit -m "Changed test case to make it pass"
    git push github feature-1
    

    L'opération de commit déclenche une tâche Cloud Build.

  10. Une fois la tâche terminée, examinez la demande d'extraction dans GitHub et fusionnez-la dans la branche release-sample.

    Dans les workflows de production, l'autorisation de fusion des demandes d'extraction est généralement limitée aux administrateurs et aux responsables DevOps. Pour plus d'informations sur cette configuration, consultez la section sur la définition des capacités de fusion des demandes d'extraction sur le site GitHub.

  11. Dans Google Cloud Console, examinez la tâche Cloud Build qui se déclenche automatiquement lorsque vous fusionnez la demande d'extraction dans la branche de release d'exemple.

  12. Une fois la tâche terminée, connectez-vous à l'organisation Dev Hub. Vous pouvez vous connecter en tant que développeur ou en tant qu'administrateur.

    Les modifications apportées au code du développeur sont disponibles dans cette organisation Salesforce. Pour les voir, accédez à la page Configuration et consultez la section Classes Apex/de code personnalisées.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources Salesforce

Vous pouvez également supprimer l'organisation Salesforce Developer Edition et l'organisation test associée que vous avez créée pour ce tutoriel.

Désactiver l'organisation Developer Edition

  1. Accédez à l'organisation Salesforce Dev Hub.
  2. Dans la zone Quick Find (Recherche rapide) de configuration, saisissez Company, puis sélectionnez Company Information (Informations sur l'entreprise).
  3. Cliquez sur Company Information (Informations sur l'entreprise).
  4. Cliquez sur le bouton Deactivate Org (Désactiver l'organisation).

    Page Salesforce permettant de désactiver l'organisation.

Supprimer l'organisation test

  • Dans Cloud Shell, exécutez la commande suivante pour supprimer votre organisation test Salesforce :

    sfdx force:org:delete -u feature-test-scratch-org
    

Supprimer le dépôt GitHub

Accédez à GitHub et supprimez le dépôt que vous avez créé dans votre compte personnel pour ce tutoriel.

Étapes suivantes

Pour découvrir d'autres architectures de référence, schémas et bonnes pratiques, consultez le Centre d'architecture cloud.