
Notre invité, créateur d'outils pour développeurs chez Pantheon, explique comment automatiser les déploiements WordPress à l'aide de GitLab CI/CD.
Dans Je me consacre aux relations avec les développeurs, donc je cherche toujours de nouvelles façons d'aider les développeurs WordPress et Drupal à résoudre les problÚmes d'automatisation dans leurs flux de travail. Pour cela, j'aime expérimenter avec de nouveaux outils et les combiner pour un travail efficace.
Je vois souvent des développeurs éprouver des difficultés avec un serveur intermédiaire.
Ce n'est pas agréable d'attendre son tour pour utiliser le serveur intermédiaire ou d'envoyer des URL aux clients avec la mention : « Regardez ici, mais pas là pour l'instant ».
 â l'un des super outils de Pantheon â rĂ©solvent ce problĂšme, car ils permettent de crĂ©er des environnements pour des branches Git Ă la demande. Chaque environnement multidev a sa propre URL et sa base de donnĂ©es, ce qui permet aux dĂ©veloppeurs de travailler calmement, de vĂ©rifier la qualitĂ© et d'obtenir des approbations sans se gĂȘner.
Mais Pantheon n'a pas d'outils pour le contrÎle des versions ou l'intégration et le déploiement continus (CI/CD). Cependant, c'est une plateforme flexible qui peut intégrer n'importe quels outils.
J'ai également remarqué que pour le développement, les équipes utilisent différents outils, tandis que pour la construction et le déploiement, d'autres.
Par exemple, ils ont des outils différents pour le contrÎle des versions et pour le CI/CD. Il faut jongler et passer d'un outil à l'autre pour modifier le code et diagnostiquer les problÚmes.
Sur il existe un ensemble complet d'outils pour le développement : pour le contrÎle des versions, les tickets, les demandes de fusion, un pipeline CI/CD de premier ordre, un registre de conteneurs et tout ce genre de choses. Je n'ai pas encore trouvé d'applications qui offrent autant d'options pour gérer un flux de travail de développement.
J'adore l'automatisation, donc j'ai étudié comment connecter Pantheon à GitLab, afin que les commits sur la branche principale de GitLab soient déployés dans l'environnement principal sur Pantheon. De plus, les demandes de fusion sur GitLab peuvent créer et déployer du code dans les environnements multidev sur Pantheon.
Dans ce guide, je vais expliquer comment établir la connexion entre GitLab et Pantheon et optimiser le flux de travail WordPress et Drupal.
On peut, bien sûr, , mais nous allons tout faire manuellement pour examiner le et à l'avenir utiliser cet outil non seulement pour le déploiement.
Introduction
Pour ce post, il faut comprendre que Pantheon divise chaque site en trois éléments : le code, la base de données et les fichiers.
Le code comprend les fichiers CMS, tels que le noyau, les plugins et les thÚmes WordPress. Ces fichiers sont gérés dans , hébergé par Pantheon, ce qui signifie que nous pouvons déployer le code de GitLab vers Pantheon avec Git.
Les fichiers dans Pantheon sont des fichiers multimédias, c'est-à -dire des images pour le site. Ils sont généralement téléchargés par les utilisateurs, et Git les ignore.
, découvrez-en plus sur ou sur pantheon.io.
HypothĂšses
Mon projet sur Pantheon et GitLab s'appelle pantheon-gitlab-blog-demo. Le nom du projet doit ĂȘtre unique. Ici, nous allons travailler avec un site WordPress. On pourrait aussi utiliser Drupal, mais il faudrait modifier certaines choses.
Je vais utiliser , et vous pouvez travailler dans , si vous le souhaitez.
Créons un projet
Pour commencer, créons un (nous y reviendrons).
Maintenant . Ensuite, installons WordPress pour le tableau de bord du site.
Si vous avez envie de modifier quelque chose, par exemple supprimer ou ajouter des plugins, attendez. Le site n'est pas encore connecté à GitLab, et nous voulons que tous les changements de code passent par GitLab.
Une fois WordPress installé, retournons sur le tableau de bord du site Pantheon et changeons le mode de développement en Git.
Le premier commit sur GitLab
Maintenant, il faut transférer le code initial de WordPress du site Pantheon vers GitLab. Pour cela, clonons le code depuis le dépÎt Git du site Pantheon localement, puis envoyons-le vers le dépÎt GitLab.
Pour que ce soit plus simple et sĂ©curisĂ©, et n'ayons pas Ă saisir le mot de passe chaque fois que nous clonons le dĂ©pĂŽt Git de Pantheon. Par la mĂȘme occasion, ajoutons dĂ©jĂ .
Pour cela, clonons le site Pantheon localement en copiant la commande depuis le champ Cloner avec Git sur le tableau de bord du site.
Si vous avez besoin d'aide, consultez la documentation .
Maintenant, modifions git remote origin, pour indiquer GitLab au lieu de Pantheon. Cela peut se faire .
Passons au projet GitLab et copions l'URL du dépÎt depuis la liste déroulante Cloner sur la page des détails du projet. Choisissons l'option Cloner avec SSH, puisque nous avons déjà configuré la clé SSH.
Par dĂ©faut git remote pour la copie locale du dĂ©pĂŽt de code est origin.Cela peut ĂȘtre changĂ© avec git remote set-url origin [URL du dĂ©pĂŽt GitLab],oĂč vous entrez l'URL rĂ©elle Ă la place des crochets.
Enfin, exécutons git push origin master --force, pour envoyer le code WordPress depuis le site Pantheon vers GitLab.
Le paramĂštre âforce n'est nĂ©cessaire qu'une seule fois. Ensuite, dans les commandes
git pushil ne sera pas dans GitLab.
Configurons les informations d'identification et les variables
Vous vous souvenez comment nous avons ajoutĂ© localement une clĂ© SSH pour nous authentifier auprĂšs de Pantheon et GitLab ? Un jeton SSH peut ĂȘtre utilisĂ© pour l'authentification de GitLab et Pantheon.
GitLab dispose d'une excellente documentation. Regroupons-nous sur .
Nous allons maintenant effectuer les deux premiÚres étapes : créer une nouvelle paire de clés SSH localement avec ssh-keygen et ajouter la clé privée comme variable dans le projet.
Ensuite, nous définirons SSH_PRIVATE_KEY comment dans les paramÚtres du projet.
Lors des troisiÚme et quatriÚme étapes, nous créerons un fichier .gitlab-ci.yml avec ce contenu :
before_script:
# Voir https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"Ne commençons pas encore à valider le fichier .gitlab-ci.yml, il faudra encore y ajouter quelque chose.
Nous réalisons maintenant la cinquiÚme étape et ajoutons la clé publique créée à l'étape précédente aux services auxquels vous souhaitez accéder dans l'environnement de construction.
Dans notre cas, nous souhaitons accéder à Pantheon depuis GitLab. Suivons les instructions du document Pantheon sur et effectuons cette étape.
Rappelons-nous : la clé SSH privée est dans GitLab, la clé publique est dans Pantheon.
Configurons quelques variables d'environnement supplémentaires. La premiÚre s'appelle PANTHEON_SITE. Sa valeur est le nom du site Pantheon sur votre machine.
Le nom sur la machine est indiqué à la fin de la commande Cloner avec Git. Vous avez déjà cloné le site localement, donc ce sera le nom du répertoire du dépÎt local.
Ensuite, configurons la variable d'environnement PANTHEON_GIT_URL. C'est l'URL du dépÎt Git pour le site Pantheon, que nous avons déjà utilisée.
Nous entrons uniquement l'URL SSH du dépÎt, sans
git cloneet le nom du site sur la machine Ă la fin.
Ouf. C'est fait, maintenant nous pouvons terminer notre fichier .gitlab-ci.yml.
Créons une tùche de déploiement
Ce que nous allons faire au départ avec GitLab CI ressemble beaucoup à ce que nous avons fait auparavant avec les dépÎts Git. Mais cette fois, nous ajouterons le dépÎt Pantheon comme deuxiÚme source distante Git, puis nous enverrons le code de GitLab vers Pantheon.
Pour cela, nous configurerons deploy et deploy:dev, puisque nous allons déployer dans l'environnement de développement sur Pantheon. En conséquence, le fichier .gitlab-ci.yml ressemblant à ceci :
étapes:
- déployer
avant_script:
# Voir https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
déployer:dev:
étape: déployer
environnement:
nom: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
seulement:
- masterVariables SSH_PRIVATE_KEY, PANTHEON_SITE et PANTHEON_GIT_URL devraient sembler familiers â nous avons configurĂ© ces variables d'environnement prĂ©cĂ©demment. Avec ces variables, nous pourrons utiliser les valeurs dans le fichier .gitlab-ci.yml plusieurs fois, et les mettre Ă jour ne sera nĂ©cessaire qu'Ă un seul endroit.
Enfin, ajoutons, validons et envoyons le fichier .gitlab-ci.yml sur GitLab.
Vérifions le déploiement
Si nous avons tout bien fait, la tùche deploy:dev s'exécutera avec succÚs dans GitLab CI/CD et enverra le commit .gitlab-ci.yml vers Pantheon. Voyons cela.
Nous envoyons les branches des merge requests vers Pantheon
Ici, nous allons utiliser ma fonctionnalitĂ© prĂ©fĂ©rĂ©e de Pantheon â , oĂč il est possible de crĂ©er des environnements Pantheon supplĂ©mentaires pour les branches Git Ă la demande.
, donc cette section peut ne pas ĂȘtre rĂ©alisĂ©e. Mais si vous y avez accĂšs, vous pouvez considĂ©rablement amĂ©liorer les performances en configurant la crĂ©ation automatique d'environnements multidev sur Pantheon Ă partir des merge requests GitLab.
D'abord, créons une nouvelle branche Git localement avec git checkout -b multidev-support. Maintenant, modifions à nouveau quelque chose dans .gitlab-ci.yml.
J'aime inclure le numĂ©ro de la merge request dans le nom de l'environnement Pantheon. Par exemple, la premiĂšre merge request â mr-1, la deuxiĂšme â mr-2 et cetera.
La merge request change, donc nous devons dĂ©terminer dynamiquement les noms des branches Pantheon. Dans GitLab, c'est facile â nous pouvons utiliser .
Nous pouvons prendre $CI_MERGE_REQUEST_IID, pour spécifier le numéro de la merge request. Regroupons tout cela avec les variables d'environnement globales que nous avons mentionnées précédemment, et ajoutons une nouvelle tùche deploy:multidev à la fin du fichier. .gitlab-ci.yml.
déployer:multidev:
étape: déployer
environnement:
nom: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Récupérer la branche source de la merge request
- git checkout $CI_COMMIT_REF_NAME
# Ajouter le dépÎt git Pantheon comme un remote supplémentaire
- git remote add pantheon $PANTHEON_GIT_URL
# Pousser la branche source de la merge request vers Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
seulement:
- merge_requestsCela ressemblera à notre tùche deploy:dev, sauf que la branche est envoyée vers Pantheon, et non vers master.
Nous avons ajouté et validé le fichier mis à jour .gitlab-ci.yml, et maintenant, envoyons la nouvelle branche vers GitLab avec git push -u origin multidev-support.
Maintenant, créons une nouvelle demande de fusion depuis la branche multidev-support, en appuyant sur Créer une demande de fusion.
AprÚs avoir créé la demande de fusion, voyons comment la tùche CI/CD s'exécute deploy:multidev.
Regardez â une nouvelle branche a Ă©tĂ© envoyĂ©e Ă Pantheon. Mais si nous allons dans la section multidev sur le tableau de bord du site Pantheon, nous ne verrons pas lĂ le nouvel environnement
Jetons un Ćil Ă la section Git Branches.
Finalement, notre branche mr-1 a atteint Pantheon. Créons un environnement à partir de la branche mr-1.
Nous avons créé l'environnement multidev, maintenant retournons dans GitLab et jetons un Ćil Ă la section Operations > Environments. Nous verrons des enregistrements pour dev et mr-1.
C'est parce que nous avons ajouté un enregistrement environment avec le nom nom et url dans les tùches CI/CD. Si nous cliquons sur l'icÎne d'environnement ouvert, nous passerons à l'URL de l'environnement multidev sur Pantheon.
Automatisons la création de multidev
En fait, nous pourrions nous arrĂȘter ici et simplement ne pas oublier de crĂ©er un environnement multidev pour chaque demande de fusion, mais ce processus peut ĂȘtre automatisĂ©.
Pantheon dispose d'un outil en ligne de commande , oĂč nous pouvons travailler avec la plateforme de maniĂšre automatique. Dans Terminus, nous pouvons crĂ©er des environnements multidev directement depuis la ligne de commande â idĂ©al pour .
Nous avons besoin d'une nouvelle demande de fusion pour tester cela. Créons une nouvelle branche avec git checkout -b auto-multidev-creation.
Pour utiliser Terminus dans les tùches GitLab CI/CD, un jeton de machine est nécessaire pour s'authentifier auprÚs de Terminus et une image de conteneur avec Terminus.
, gardez-le en lieu sûr et ajoutez-le comme variable d'environnement globale dans GitLab avec le nom PANTHEON_MACHINE_TOKEN.
Si vous avez oubliĂ© comment ajouter des variables d'environnement dans GitLab, revenez Ă l'endroit oĂč nous avons dĂ©fini
PANTHEON_SITE.
Créons un Dockerfile avec Terminus
Si vous n'utilisez pas Docker ou que vous n'aimez pas trop les fichiers Dockerfile, prenez mon image registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest et passez cette section.
, oĂč vous pouvez assembler et hĂ©berger un Dockerfile pour notre projet. CrĂ©ons un fichier Dockerfile avec Terminus pour travailler avec Pantheon.
Terminus est un outil en ligne de commande basé sur PHP, donc commençons par une image PHP. J'installe Terminus via Composer, donc je vais prendre . Nous créons Dockerfile dans le répertoire local du dépÎt avec ce contenu :
# Use the official Composer image as a parent image
FROM composer:1.8
# Update/upgrade apk
RUN apk update
RUN apk upgrade
# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus
# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"Suivez les instructions pour construire et pousser les images Ă partir de la section Build and push images dans , pour construire l'image Ă partir de Dockerfile et l'envoyer dans GitLab.
Ouvrons la section Registry dans le projet GitLab. Si tout s'est bien passĂ©, notre image y sera. Notez le lien vers le tag de l'image â il est nĂ©cessaire pour le fichier .gitlab-ci.yml.
Section script dans la tùche deploy:multidev commence à se développer, alors déplaçons-le dans un fichier distinct. Créons un nouveau fichier private/multidev-deploy.sh:
#!/bin/bash
# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID
# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN
# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force
# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
# Stash a list of Pantheon multidev environments
PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"
while read -r multiDev; do
if [[ "${multiDev}" == "$1" ]]
then
return 0;
fi
done <<< "$PANTHEON_MULTIDEV_LIST"
return 1;
}
# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
# Create it with Terminus
echo "No multidev for $PANTHEON_ENV found, creating one..."
terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fiLe script se trouve dans un répertoire privé et . Nous avons un script pour notre logique multidev. Mettons maintenant à jour la section deploy:multidev fichiers .gitlab-ci.yml, pour que cela ressemble à ceci :
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Exécutez le script de déploiement multidev
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsNous devons nous assurer que nos tùches s'exécutent dans l'image personnalisée créée, alors ajoutons la définition image avec l'URL du registre dans .gitlab-ci.yml. Au final, nous avons obtenu ce fichier .gitlab-ci.yml:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# Voir https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Exécutez le script de déploiement multidev
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsAjoutons, engageons et envoyons private/multidev-deploy.sh et .gitlab-ci.yml. Maintenant, retournons sur GitLab et attendons que la tùche CI/CD soit exécutée. Patientez : le multidev peut se créer pendant plusieurs minutes.
Ensuite, allons consulter la liste des multidev sur Pantheon. Oh miracle ! L'environnement multidev mr-2 est déjà là .
Conclusion
Mon équipe a trouvé beaucoup plus de plaisir lorsque nous avons commencé à ouvrir des demandes de fusion et à créer des environnements de maniÚre automatique.
Avec les puissants outils de GitLab et Pantheon, vous pouvez connecter GitLab Ă Pantheon automatiquement.
Puisque nous utilisons GitLab CI/CD, notre flux de travail a encore beaucoup de potentiel pour se développer. Voici quelques idées pour commencer :
- Ajoutez une étape de construction.
- Ajoutez des tests automatisés.
- Ajoutez une tĂąche pour garantir le respect des normes de code.
- Ajoutez .
Dites-nous ce que vous pensez de GitLab, Pantheon et de l'automatisation.
P.S. Saviez-vous que Terminus, l'outil en ligne de commande de Pantheon, ?
Nous avons travaillĂ© dur chez Pantheon sur la version 2 de notre avec le support de GitLab. Si vous ne souhaitez pas vous occuper de la configuration pour chaque projet, essayez ce plugin et aidez-nous Ă tester la bĂȘta v2. Pour l'Ă©quipe Terminus build:project:create il suffit d'un jeton Pantheon et d'un jeton GitLab. Cela dĂ©ploiera l'un des exemples de projet avec Composer et des tests automatisĂ©s, crĂ©era un nouveau projet dans GitLab, un nouveau site Pantheon et les liera via des variables d'environnement et des clĂ©s SSH.
Ă propos de l'auteur
Andrew Taylor crée des outils pour les développeurs chez .
Source : habr.com
