Mettre en œuvre la diffusion continue avec Travis CI et App Engine

Les tests constituent un aspect important de la création de logiciels. Afin de garantir l'exécution de tests unitaires pour chaque version d'un projet, de nombreuses organisations d'ingénierie ont adopté la pratique de l'intégration continue (CI, Continuous Integration), qui implique l'utilisation d'outils comme Jenkins ou Travis CI, afin de garantir que tout nouveau code fait l'objet de tests menés de manière automatique et cohérente pour détecter les éventuelles erreurs. La diffusion continue (CD) va encore plus loin en garantissant le déploiement de chaque version dans un environnement de production, suivi de tests d'intégration dans cet environnement. Vous pouvez exécuter des tests d'intégration à l'aide d'un service CI/CD sur Google Cloud pour déployer votre application dans le cadre du processus de compilation.

Bien que cet article traite de Travis CI, la plupart des points évoqués s’appliquent à d’autres outils de CI, tels que Jenkins. Travis s'intègre à GitHub, exécute des tests de manière isolée et surtout, ne vous demande pas de gérer votre propre infrastructure lors de l'exécution sur Google Cloud.

À propos de ce tutoriel

Ce tutoriel présente une application Python Flask qui s'exécute sur App Engine et interagit avec l'API Google Livres. L'application démontre comment Travis CI peut déployer et exécuter des tests de bout en bout dans un environnement de préproduction dans le cadre du processus de test, déclenché par la commande git push. Le schéma suivant présente une vue d'ensemble de ce processus :

Travis CI exécute des tests en local entre des déploiements GitHub et Google Cloud

Travis CI est compatible avec les déploiements dans les environnements standard ou flexible App Engine, avec l'aide de fournisseurs de services de déploiement. Lorsque vous faites appel à ces fournisseurs, certaines étapes de la configuration de base sont identiques, mais le fichier de configuration est simplifié. Dans ce tutoriel, qui vous fait découvrir l'utilité de ces fournisseurs, Travis CI télécharge le SDK Cloud, lequel peut également être utilisé à d'autres fins que le déploiement, par exemple pour l'exécution d'émulateurs locaux pour vos tests unitaires. Ce tutoriel utilise le fournisseur de services de déploiement App Engine. Reportez-vous à la documentation de Travis CI pour en savoir plus sur les autres fournisseurs.

Ce tutoriel crée des identifiants de compte de service et des clés API que vous ne devez utiliser que pour ce tutoriel. Pour plus de clarté, les clés chiffrées sont importées dans GitHub. Il s'agit d'un anti-modèle de sécurité à éviter dans les environnements de production.

Objectifs

  • Configurer Cloud Shell pour une utilisation avec GitHub
  • Configurer les comptes GitHub et Travis CI
  • Dupliquer l'exemple du dépôt de code et l'activer dans Travis
  • Créer une application App Engine et des identifiants pour Travis CI
  • Installer les outils de ligne de commande Travis
  • Mettre à jour l'exemple de code de votre projet et chiffrer les codes secrets à l'aide de Travis
  • Transférer le nouveau code dans GitHub et demander à Travis CI de le tester automatiquement sur App Engine

Coûts

Ce tutoriel utilise les composants facturables suivants de Google Cloud :

  • App Engine

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

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 Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activer les API Compute Engine, Google Books, and App Engine.

    Activer les API

  5. Créez des comptes GitHub et Travis CI.

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

Configurer Cloud Shell pour votre compte GitHub

Durant la majeure partie de ce tutoriel, vous utiliserez Cloud Shell, y compris lors de la validation du code vers un dépôt GitHub. GitHub n'autorise les commits que si des connexions SSH sont utilisées. Par conséquent, Cloud Shell doit être configuré avec des clés SSH.

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell.

    Accéder à Cloud Shell

  2. Générez une nouvelle clé SSH.

  3. Ajoutez la nouvelle clé SSH à votre compte GitHub.

  4. Assurez-vous que la clé SSH peut communiquer avec GitHub.

Configurer Travis CI avec votre compte GitHub

  1. Sur la page Travis CI, connectez-vous avec votre compte GitHub.
  2. Sur la page Sign in to GitHub to continue to Travis CI (Se connecter à GitHub pour continuer sur Travis CI), saisissez vos identifiants GitHub, puis cliquez sur Sign In (Se connecter).
  3. Cliquez sur Authorize travis-pro (Autoriser travis-pro).
  4. Sur la page GitHub Apps Integration (Intégration d'applications GitHub), cliquez sur Activate (Activer).
  5. Cliquez sur Approve & Install (Approuver et installer).

Dupliquer l'exemple de dépôt de code

La duplication du dépôt dans GitHub permet de remplacer les identifiants de l'exemple de projet par ceux de votre propre projet.

  1. Accédez à l'exemple de dépôt de code, puis cliquez sur Fork (Dupliquer).

    Exemple de dépôt de code dans GitHub

  2. Dans Cloud Shell, configurez la commande git config locale.

    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    
  3. Clonez l'exemple de code. Remplacez [YOUR-GITHUB-USERNAME] par votre nom d'utilisateur.

    git clone git@github.com:[YOUR-GITHUB-USERNAME]/continuous-deployment-demo.git
    

Vérifier votre copie dans Travis CI

  • Sur le site Web Travis CI, cliquez sur votre nom d'utilisateur dans le coin supérieur droit pour ouvrir les paramètres de votre compte.

    Dans l'onglet Repositories (Dépôts), le dépôt continuous-deployment-demo est répertorié.

    Dépôts dans Travis CI

    Désormais, chaque fois que vous envoyez un commit vers ce dépôt, Travis CI exécute les tests configurés et fournit un rapport détaillé des résultats.

Installer les outils de ligne de commande Travis

  • Dans Cloud Shell, installez le client Travis.

    sudo gem install travis
    

Créer une application App Engine

  • Dans Cloud Shell, créez votre application App Engine. Remplacez [REGION] par votre région Google Cloud.

    gcloud app create --region=[REGION]
    

Créer des identifiants

Pour déployer l'application sur votre projet Google Cloud, vous devez créer deux types d'identifiants :

  • Des identifiants de compte de service permettant au SDK Cloud de s'authentifier avec le projet Google Cloud.
  • Une clé API publique que l'application App Engine utilise pour communiquer avec l'API Livres.

Créer un compte de service

  1. Dans Cloud Console, accédez à la page "Comptes de service IAM".

    Accéder à la page des comptes de service IAM

  2. Cliquez sur Créer un compte de service.

  3. Saisissez un nom de compte de service, tel que continuous-integration-test.

  4. Cliquez sur Créer.

  5. Dans le menu Rôle, sélectionnez App Engine > Administrateur App Engine.

  6. Cliquez sur + Ajouter un autre rôle, puis sélectionnez Stockage > Administrateur de l'espace de stockage.

  7. Cliquez sur Continuer.

  8. Cliquez sur Créer une clé.

  9. Sous Type de clé, sélectionnez JSON.

  10. Cliquez sur Créer. Cloud Console télécharge un nouveau fichier JSON sur votre ordinateur. Le nom de ce fichier commence par votre ID de projet.

  11. Pour importer ce fichier dans Cloud Shell, cliquez sur More (Plus), puis sélectionnez Upload file (Importer un fichier).

    Bouton d'importation dans Cloud Shell

  12. Déplacez et renommez ce fichier à la racine du dépôt GitHub.

    mv ~/<your_credentials_filename>.json ~/continuous-deployment-demo/client-secret.json
    

Créer la clé API Livres

  1. Dans Google Cloud Console, ouvrez la page "Identifiants de l'API".

    Accéder à la page Identifiants

  2. Accédez à Create credentials (Créer des identifiants) > API key (Clé API).

    Page

  3. Une clé est automatiquement créée. Copiez la clé API, puis cliquez sur Fermer.

  4. Dans Cloud Shell, ajoutez la nouvelle clé API au fichier api_key.py. Remplacez [YOUR_API_KEY] par la clé API que vous venez de copier.

    export API_KEY=[YOUR_API_KEY]
    cd ~/continuous-deployment-demo
    echo "key = '${API_KEY}'" > api_key.py
    

Chiffrer les identifiants à utiliser avec Travis CI

Ces identifiants sont ajoutés à un dépôt GitHub public et doivent donc être chiffrés.

Travis CI ne peut déchiffrer qu'un seul fichier. Créez une archive tar contenant les identifiants requis, chiffrez l'archive localement, ajoutez l'archive chiffrée au dépôt de l'application, puis configurez Travis pour qu'il déchiffre les identifiants lors du processus de déploiement. Pour en savoir plus, consultez la page sur le chiffrement des fichiers pour Travis CI.

  1. Dans Cloud Shell, créez un fichier d'archive tar contenant les identifiants nécessaires :

    tar -czf credentials.tar.gz client-secret.json api_key.py
    
  2. À l'aide des outils de ligne de commande Travis CI, connectez-vous à Travis CI :

    travis login --pro
    
  3. Lorsque vous êtes invité à terminer l'installation de l'interface système, saisissez Y, puis renseignez vos identifiants GitHub.

  4. Chiffrez l'archive contenant les identifiants :

    travis encrypt-file credentials.tar.gz --pro
    
  5. Lorsque vous êtes invité à écraser le fichier existant, saisissez yes.

  6. Copiez la ligne de résultat commençant par openssl aes-256-cbc dans le presse-papiers.

    Résultats de la console commençant par

  7. Configurez Travis CI pour qu'il déchiffre les identifiants en mettant à jour .travis.yml à l'aide de sed. Remplacez [YOUR_COMMAND_OUTPUT] par les résultats de la console que vous avez copiés à l'étape précédente.

    sed -i 's/DECRYPT_COMMAND/[YOUR_COMMAND_OUTPUT]/g' .travis.yml
    
  8. Modifiez le fichier .travis.yml et le fichier e2e_test.py en fonction du nom de votre projet :

    sed -i "s/continuous-deployment-python/${DEVSHELL_PROJECT_ID}/g" .travis.yml
    sed -i "s/continuous-deployment-python/${DEVSHELL_PROJECT_ID}/g" e2e_test.py
    
  9. Ajoutez l'archive chiffrée contenant les identifiants au dépôt :

    git add credentials.tar.gz.enc .travis.yml e2e_test.py
    git commit -m "Adds encrypted credentials for Travis and updates project name"
    

Envoyer des commits vers GitHub et effectuer des tests avec Travis CI

Maintenant que vous avez configuré l'exemple d'application pour Travis CI et activé Travis CI sur la copie du projet dans GitHub, vous pouvez utiliser la dernière version du code pour suivre un cycle de compilation et de test.

git push origin master

Lors de l'exécution du test, vous pouvez consulter les résultats de compilation en temps réel à l'aide du tableau de bord de Travis. Si les tests et le déploiement sur App Engine aboutissent, votre processus CI/CD fonctionne correctement. Le processus est défini par le fichier .travis.yml. Pour en savoir plus sur le fichier .travis.yml, consultez la documentation de Travis CI.

Tableau de bord de Travis avec résultats du test

Autres résultats

Nettoyer

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud Platform :

Vous pouvez supprimer le projet ou arrêter App Engine.

Supprimer le projet

  1. Dans Cloud Console, 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.

Étapes suivantes