Installation et configuration de la CI/CD Looker

Cette page explique comment installer et configurer les composants nécessaires pour implémenter un workflow d'intégration et de livraison continue dans Looker.

Ces instructions utilisent un système à trois niveaux comprenant le développement, le contrôle qualité et la production. Toutefois, les mêmes principes peuvent s'appliquer à un système à deux ou quatre niveaux.

Ces instructions supposent également que vous utilisez GitHub comme fournisseur Git. Vous pouvez utiliser d'autres fournisseurs Git pour créer un workflow CI/CD. Toutefois, vous devez posséder l'expertise nécessaire pour modifier ces instructions pour votre fournisseur.

Suivez les instructions de la section qui vous concerne:

Prérequis

Environnement Linux

Ce processus utilise des outils appelés Gazer et Spectacles, qui sont conçus pour fonctionner avec les systèmes d'exploitation de type Unix. Chaque développeur LookML doit avoir accès à la ligne de commande dans un environnement Linux ou macOS où vous prévoyez d'exécuter votre workflow CI/CD.

Si vous utilisez Windows, vous pouvez utiliser Gazer et Spectacles dans le sous-système Windows pour Linux (WSL) de Microsoft. WSL vous permet d'exécuter différentes distributions Linux. Si vous n'avez pas de système d'exploitation Linux préféré, la dernière version d'Ubuntu Linux est un bon choix en raison de sa large compatibilité.

Ces instructions fournissent des exemples pour les systèmes Linux et peuvent nécessiter des modifications si vous utilisez macOS ou WSL.

Une instance Looker par niveau

Pour activer cette configuration, vous aurez besoin d'une instance Looker pour chaque niveau de votre système. Par exemple, un système comportant une phase de développement, une phase d'assurance qualité et une phase de production nécessitera trois instances distinctes. Les instances peuvent être hébergées par Google ou par le client.

Noms de connexion identiques

Les connexions de base de données doivent porter le même nom dans chaque instance Looker, quel que soit le niveau qu'elles représentent. Par exemple, une connexion sales doit porter ce nom dans toutes les instances, et non sales_dev ou sales_qa.

Les connexions peuvent pointer vers la même base de données ou vers différentes bases de données. Toutefois, s'ils pointent vers la même base de données, des schémas de travail différents doivent être définis afin que les tables dérivées persistantes de l'instance de développement ou de contrôle qualité n'interfèrent pas avec la production.

Par exemple, si la même base de données est utilisée pour les trois instances, elles peuvent être configurées comme suit:

Production QA Développement
Nom de la connexion sales sales sales
Database (Base de données) sales_db sales_db sales_db
Schéma Scratch prod_sales_scratch qa_sales_scratch dev_sales_scratch

Si une base de données unique est utilisée pour les trois instances, elles peuvent être configurées comme suit:

Production QA Développement
Nom de la connexion sales sales sales
Database (Base de données) sales_db_prod sales_db_qa sales_db_dev
Schéma Scratch sales_scratch sales_scratch sales_scratch

Dépôt Git

Un seul référentiel Git sera utilisé pour chaque projet dans les trois niveaux. L'instance de développement suivra la branche main, tandis que les instances de contrôle qualité et de production pointeront généralement vers des balises Git (décrites plus en détail ultérieurement).

Étapes de configuration initiale uniquement

Les étapes de cette section ne doivent être effectuées qu'une seule fois par une personne disposant des autorisations d'administrateur Looker, ainsi que des autorisations d'administrateur sur son fournisseur git.

Identifiants Git

L'environnement Linux de chaque développeur doit se connecter au même dépôt que celui que vous utilisez pour gérer votre LookML. Il s'agit probablement d'un dépôt externe hébergé dans un service tel que GitHub. Vous aurez besoin d'un compte auprès de ce service disposant des identifiants appropriés pour configurer le dépôt. Vous pouvez utiliser ce compte pour configurer une clé SSH afin d'autoriser votre environnement Linux à se connecter automatiquement à ce service.

Pour GitHub, suivez les instructions de la section Ajouter une clé SSH à votre compte GitHub.

Créer et configurer un dépôt de serveur Git

Pour que le workflow CI/CD fonctionne, LookML doit être stocké dans un dépôt Git et associé à un projet Looker. Dans les paramètres du projet, Nom de la branche de production Git doit être défini sur main et Activer le mode de déploiement avancé doit être activé.

Si vous n'avez pas encore effectué les étapes suivantes, suivez ces instructions pour GitHub:

Créer un dépôt

  1. Dans l'interface utilisateur GitHub, appuyez sur le bouton + en haut à droite, puis sélectionnez New repository (Nouveau dépôt).
  2. Sélectionnez le propriétaire (probablement votre organisation) et saisissez un REPOSITORY_NAME.
  3. Indiquez si vous souhaitez rendre le dépôt public ou privé (les dépôts privés nécessitent un abonnement GitHub payant) et cochez la case pour l'initialiser avec un fichier README.
  4. Appuyez sur le bouton Créer un dépôt.
  5. Appuyez sur le bouton vert <> Code et copiez l'URL SSH. Elle ressemble à ceci: git@github.com:org_name/REPOSITORY_NAME.git.
  6. Dans Looker, créez un projet.
  7. Activez le mode développement, sélectionnez les paramètres du projet dans la barre latérale de gauche, puis Configurer Git.
  8. Collez l'URL du dépôt (git@github.com:org_name/REPOSITORY_NAME.git dans cet exemple), puis sélectionnez Continue (Continuer).
  9. Copiez la clé de déploiement, puis revenez à l'interface utilisateur GitHub de ce dépôt.
  10. Sélectionnez Settings (Paramètres), puis Deploy keys (Déployer des clés).
  11. Cliquez sur le bouton Ajouter une clé de déploiement, puis collez la clé de déploiement dans le champ Clé.
  12. Ajoutez un titre tel que Looker-REPOSITORY_NAME, cochez la case Autoriser l'accès en écriture, puis appuyez sur le bouton Ajouter une clé.
  13. Revenez dans Looker et sélectionnez Tester et finaliser la configuration.
  14. Sélectionnez à nouveau les paramètres du projet dans la barre latérale de gauche. Remplacez le paramètre Nom de la branche de production Git par main.
  15. Sélectionnez Enable Advanced Deploy Mode (Activer le mode de déploiement avancé), puis Save Project Configuration (Enregistrer la configuration du projet).

Sous l'icône des paramètres du projet, sur la gauche, vous devriez voir une icône de déploiement pour Deployment Manager.

Utiliser un dépôt existant

  1. Accédez au dépôt GitHub qui stocke votre LookML.
  2. Appuyez sur le bouton vert <> Code et copiez l'URL SSH. Elle se présente comme suit: git@github.com:org_name/REPOSITORY_NAME.git.
  3. Dans Looker, créez un projet.
  4. Activez le mode développement, puis sélectionnez l'élément "Paramètres du projet" dans la barre latérale de gauche, puis Configurer Git.
  5. Collez l'URL du dépôt (git@github.com:org_name/REPOSITORY_NAME.git dans cet exemple), puis sélectionnez Continue (Continuer).
  6. Copiez la clé de déploiement, puis revenez à l'interface utilisateur GitHub de ce dépôt.
  7. Sélectionnez Settings (Paramètres), puis Deploy keys (Déployer des clés).
  8. Cliquez sur le bouton Ajouter une clé de déploiement, puis collez la clé de déploiement dans le champ Clé.
  9. Ajoutez un titre tel que Looker-REPOSITORY_NAME, cochez la case Autoriser l'accès en écriture, puis appuyez sur le bouton Ajouter une clé.
  10. Revenez dans Looker et sélectionnez Tester et finaliser la configuration.
  11. Sélectionnez à nouveau les paramètres du projet dans la barre latérale de gauche. Remplacez le paramètre Nom de la branche de production Git par main.
  12. Sélectionnez Enable Advanced Deploy Mode (Activer le mode de déploiement avancé), puis Save Project Configuration (Enregistrer la configuration du projet).

Sous l'icône des paramètres du projet, sur la gauche, vous devriez voir une icône de déploiement pour Deployment Manager.

Créer des actions GitHub

Il est utile de créer plusieurs actions GitHub afin que diverses vérifications soient effectuées automatiquement chaque fois que des modifications sont apportées à LookML. Pour ajouter ces actions, vous devez pouvoir modifier votre dépôt Git dans votre environnement Linux. Si ce n'est pas déjà fait, suivez les instructions de configuration de Git.

Pour ajouter les actions GitHub, accédez au répertoire de votre dépôt dans l'environnement Linux et ajoutez le sous-répertoire .github/workflows. Une fois configurées, ces actions peuvent être exécutées manuellement depuis la page Actions de l'interface utilisateur GitHub.

Look-At-Me-Sideways (LAMS)

LAMS est un outil de linting Open Source qui inspecte votre code LookML à la recherche d'erreurs et de mauvaises pratiques. Ajoutez un fichier nommé lams.yml au répertoire .github/workflows avec le contenu suivant:

name: LAMS

on:
  pull_request:
    branches: [ main ]
  push:
  workflow_dispatch:

jobs:
  lams_job:
    runs-on: ubuntu-latest
    name: LAMS LookML Linter Job
    steps:
    - name: Checkout your LookML
      uses: actions/checkout@v1
    - name: Setup Node
      uses: actions/setup-node@v1
      with:
        node-version: '16.x'
    - name: Install LAMS
      run: npm install -g @looker/look-at-me-sideways@3
    - name: Run LAMS
      run: lams --reporting=no

Chaque fois qu'un commit est envoyé vers GitHub ou qu'une demande d'extraction est ouverte pour fusionner du code avec la branche main, LAMS s'exécute.

Veuillez publier

Release Please est un outil Open Source qui ajoute automatiquement les numéros de version appropriés aux versions.

Ajoutez un fichier nommé release-please.yml au répertoire .github/workflows avec le contenu suivant:

name: release-please

on:
  push:
    branches:
      - main
  workflow_dispatch:

permissions:
  contents: write
  pull-requests: write

jobs:
  release-please:
    runs-on: ubuntu-latest
    steps:
      - uses: google-github-actions/release-please-action@v3
        with:
          release-type: simple
          package-name: sales_project

Commits standards

Cette action GitHub garantit qu'une demande d'extraction est ouverte avec un titre conforme à la norme de commit conventionnel.

Ajoutez un fichier nommé lint_pr_title.yml au répertoire .github/workflows avec le contenu suivant:

name: "Lint Pull Request Title"

on:
  pull_request_target:
    types:
      - opened
      - edited
      - synchronize

jobs:
  main:
    name: Validate PR title
      runs-on: ubuntu-latest
      steps:
        - uses: amannn/action-semantic-pull-request@v5
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Transférer les modifications vers GitHub

Enfin, utilisez les commandes suivantes pour valider ces modifications d'action GitHub et les envoyer à GitHub:

git add .github/workflows/
git commit -m "chore: Added github actions"
git push

Protéger la branche main

Dans l'interface utilisateur GitHub, vous devez activer la protection des branches pour la branche main afin que les développeurs ordinaires ne puissent pas transférer directement de modifications vers cette branche. Au lieu de cela, ils effectuent des modifications dans une autre branche, puis ouvrent une demande d'extraction. Un autre développeur peut examiner la demande d'extraction avant qu'elle ne soit approuvée et fusionnée avec main.

Pour configurer la protection des branches, accédez à l'interface utilisateur GitHub du dépôt, sélectionnez Settings (Paramètres), puis Branches (Branches), puis appuyez sur le bouton Add branch protection rule (Ajouter une règle de protection des branches) :

Interface utilisateur GitHub pour ajouter une protection de branche.

Saisissez main dans le champ Modèle de nom de branche, puis cochez les options suivantes:

  • Exiger une demande d'extraction avant la fusion
  • Exiger des approbations
  • Ignorer les approbations de requêtes pull obsolètes lorsque de nouveaux commits sont poussés

UI GitHub pour définir les options de protection des branches

Enfin, appuyez sur le bouton Créer en bas de la page.

Lorsqu'une demande d'extraction est créée, les actions GitHub configurées précédemment dans ces instructions s'exécutent. Une fois qu'ils ont été exécutés pour la première fois, ils peuvent également être sélectionnés dans cette UI afin qu'ils doivent réussir avant que la demande de tirage puisse être fusionnée avec main.

Configurer les demandes d'extraction

Dans Looker, vous pouvez exiger l'utilisation de demandes d'extraction et demander à Looker d'en ouvrir pour le compte du développeur. Ce paramètre ne doit être configuré que pour l'instance de développement. Les instances de test et de production utiliseront le mode de déploiement avancé pour obtenir leurs mises à jour.

Pour ce faire, accédez à la page Configuration du projet pour chaque projet, puis sélectionnez Demandes d'extraction requises sous l'en-tête Intégration GitHub.

Appuyez sur le bouton pour définir un secret de webhook, copiez la chaîne aléatoire générée, puis appuyez sur le bouton Enregistrer la configuration du projet.

Dans l'interface utilisateur GitHub de votre dépôt, sélectionnez Settings (Paramètres), puis Webhooks (Webhooks). Appuyez sur le bouton Add webhook (Ajouter un Webhook) en haut à droite:

  • Dans le champ URL de la charge utile, saisissez https://LOOKER_HOST_NAME/webhooks/projects/PROJECT_NAME/deploy.
  • Dans le champ Secret, collez le secret que vous avez enregistré dans Looker.
  • Pour la question Quels événements souhaitez-vous déclencher avec ce webhook ?, sélectionnez M'autoriser à sélectionner des événements individuels.

UI GitHub pour la configuration des webhooks.

Assurez-vous que les options Pull requests (Demandes d'extraction) et Pushes (Transferts) sont sélectionnées:

Cases à cocher GitHub pour les demandes d&#39;extraction et les transferts.

Enfin, appuyez sur le bouton Add webhook (Ajouter un Webhook) en bas de la page.

Procédure de configuration pour chaque développeur Looker

Toutes les étapes d'installation suivantes doivent être effectuées dans votre environnement Linux.

Installer Ruby

Le langage de programmation Ruby doit être installé pour exécuter Gazer. Toute version de Ruby postérieure à 2.7.7 fonctionne avec Gazer, mais nous vous recommandons d'utiliser Ruby 3.x.x. Pour installer Ruby sur Linux Ubuntu, exécutez les commandes suivantes:

sudo apt update
sudo apt install ruby

Vérifiez que Ruby est correctement installé en exécutant ruby -v. Vous devriez obtenir une réponse semblable à celle-ci:

ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

Ces commandes fonctionnent également sur Debian Linux, Linux Mint et plusieurs autres distributions Linux qui utilisent le gestionnaire de paquets Aptitude. Vous devrez peut-être rechercher des commandes qui fonctionnent sur d'autres distributions Linux ou des commandes à installer sur macOS. Pour en savoir plus, consultez Installer Ruby.

Installer Gazer

Gazer est un projet Open Source créé par des employés Google pour naviguer et gérer des espaces, des looks et des tableaux de bord à l'aide d'un outil de ligne de commande.

Une fois Ruby installé, vous pouvez utiliser l'outil Gem de Ruby pour installer Gazer:

gem install gazer

Vérifiez que Gazer est installé à l'aide de la commande gzr version. Vous devriez obtenir une réponse semblable à celle-ci:

v0.3.12

Installer Spectacles

Spectacles est un outil tiers utilisé pour tester LookML. Spectacles propose une version payante et une version Open Source. Pour en savoir plus sur l'installation, consultez la page de démarrage.

Installer Git

Vous pouvez installer le logiciel de contrôle des versions Git sur Linux Ubuntu à l'aide de la commande suivante:

sudo apt update
sudo apt install git

Vérifiez que l'installation a réussi à l'aide de la commande git --version. Vous devriez obtenir une réponse semblable à celle-ci:

git version 2.42.0.609.gbb76f46606

Ces commandes fonctionnent également sur Debian Linux, Linux Mint et plusieurs autres distributions Linux qui utilisent le gestionnaire de paquets Aptitude. Vous devrez peut-être rechercher des commandes qui fonctionnent sur d'autres distributions Linux. Pour obtenir des instructions sur Fedora et macOS, par exemple, consultez Premiers pas : installer Git.

Configurer Git

Git dans votre environnement Linux doit être configuré pour interagir avec le dépôt Git dans lequel votre LookML est stocké. Ces instructions ont été rédigées pour les dépôts Git LookML stockés sur GitHub.

Nom et adresse e-mail

GitHub (et la plupart des autres implémentations Git) doivent connaître votre nom et votre adresse e-mail pour pouvoir enregistrer votre activité. Configurez votre nom et votre adresse e-mail dans Git en exécutant les commandes suivantes:

git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "EMAIL_ADDRESS"

Identifiants Git

Lors de la configuration initiale du CI/CD, des identifiants Git ont été créés. La clé privée SSH générée doit être configurée dans un fichier $HOME/.ssh/config. Pour créer le fichier, utilisez les commandes suivantes:

touch $HOME/.ssh/config
chmod 600 $HOME/.ssh/config

Insérez le texte suivant dans le fichier $HOME/.ssh/config:

Host github.com
  User git
  IdentityFile ~/.ssh/KEY_NAME
  ControlMaster auto
  ControlPath ~/.ssh/ctrl-%r@%h:%p
  ControlPersist yes

Remplacez KEY_NAME par le nom du fichier de clé privée que vous avez généré en suivant les instructions de la section Ajouter une clé SSH à votre compte GitHub. Le fichier de clé privée porte le même nom que le fichier de clé publique, mais sans l'extension .pub. Par exemple, si vous avez utilisé la clé publique trouvée dans le fichier id_ed25519.pub, la clé privée sera nommée id_ed25519.

Configurer votre dépôt Git local

Une fois votre dépôt LookML configuré, vous devez en créer une copie dans votre environnement Linux. Pour ce faire, exécutez la commande suivante:

git clone GIT_URL

Par exemple, la commande peut se présenter comme suit:

git clone git@github.com:my_org_name/sales_project.git

Le dépôt LookML est alors copié dans un sous-répertoire, par exemple sales_project. Utilisez la commande cd SUB_DIRECTORY pour accéder au dépôt. Dans cet exemple, la commande est cd sales_project.

Une fois dans le répertoire de votre dépôt, vous pouvez utiliser les commandes suivantes:

Commande Objectif
git checkout BRANCH_NAME Permet de changer de branche. Dans la plupart des cas, la branche principale est appelée main. Toutefois, dans les systèmes plus anciens, elle peut être appelée master.
git fetch Permet de récupérer les dernières modifications sur le serveur.
git pull Permet d'appliquer les modifications aux fichiers locaux extraits. git pull effectue implicitement une git fetch.
git tag Permet de créer un tag significatif pour une révision spécifique.
git push Permet de transférer les modifications locales vers le serveur.

Configurer Gazer

Pour utiliser Gazer, vous avez besoin d'identifiants d'API pour chacune des instances de développement, de test et de production. Pour savoir comment créer des identifiants d'API, consultez la page Paramètres administrateur - Utilisateurs. Les identifiants de l'API peuvent déjà avoir été créés par la personne qui a initialement configuré le workflow CI/CD. Dans ce cas, vous pouvez utiliser les identifiants existants. Il n'est pas nécessaire de générer de nouveaux identifiants pour chaque personne.

Stockez vos identifiants d'API dans un fichier .netrc avec des autorisations minimales dans votre répertoire d'accueil. Vous pouvez créer un fichier vide avec les autorisations appropriées à l'aide des commandes suivantes:

touch $HOME/.netrc
chmod 600 $HOME/.netrc

Ajoutez des entrées comme celles-ci au fichier, mais utilisez vos propres noms d'hôte de serveur Looker pour machine, l'API client_id pour la connexion et l'API client_secret pour le mot de passe. Exemple :

machine dev.example.looker.com
  login 80ka7nl6lj87ftmn
  password u7kw3mj5h2trfz0

machine qa.example.looker.com
  login fi3qtv5at5crvd1q
  password bdxtaeghnzyz0wm

machine example.looker.com
  login k7lr6yv57wvzy9p2
  password wcvr5qjd2isbs2s

Pour vérifier que cela fonctionne, exécutez une commande Gazer simple sur chaque serveur, par exemple:

gzr user me --host dev.example.looker.com

Vous devriez obtenir un résultat semblable à celui-ci:

+----+---------------+---------+----------+------------------+--------------+
|  id|email          |last_name|first_name|personal_folder_id|home_folder_id|
+----+---------------+---------+----------+------------------+--------------+
|2345|jsm@example.com|Smith    |John      |              2161|           708|
+----+---------------+---------+----------+------------------+--------------+

Si la commande précédente ne fonctionne pas, vous devrez peut-être ajouter --port 443 à la fin de la commande gzr, comme suit:

gzr user me --host dev.example.looker.com --port 443

Configurer Spectacles

Spectacles utilise les mêmes API client_id et client_secret que Gazer. Dans votre répertoire Spectacles, créez un fichier pour chaque niveau nommé config-TIER.yaml, par exemple config-dev.yaml. Ajoutez le contenu suivant aux fichiers en fonction de l'instance Looker de ce niveau, par exemple:

config-dev.yaml

base_url: https://dev.example.looker.com/
client_id: 80ka7nl6lj87ftmn
client_secret: u7kw3mj5h2trfz0

config-qa.yaml

base_url: https://qa.example.looker.com/
client_id: fi3qtv5at5crvd1q
client_secret: bdxtaeghnzyz0wm

config-prod.yaml

base_url: https://example.looker.com/
client_id: k7lr6yv57wvzy9p2
client_secret: wcvr5qjd2isbs2s

Vous pouvez tester chaque fichier en exécutant la commande suivante et en remplaçant chaque nom de fichier:

$ spectacles connect --config-file config-dev.yaml

Vous devriez obtenir une réponse semblable à celle-ci:

Connected to Looker version 23.18.60 using Looker API 4.0