Passer un wordpress dans un git

Le but de cette procédure est de pouvoir suivre plus facilement les changements apportés à wordpress et d’utiliser les outils usuels de déploiement.

Le dépôt nous permet aussi de tester en amont les mises à jour wordpress et des extensions.

 

Initialiser le dépôt git

$ cd wordpress
$ git init

Ajouter un .gitignore

La configuration ne va pas être enregistrée dans le git, on ignore donc le fichier de config.

$ cat .gitignore
wp-config.php

 

Ajouter tous les fichiers de wordpress

$ git add -A

Enregistrer le commit

$ git commit -m "initial commit"

 

Configurer le dépôt

$ git remote add origin git@gitou.com:charlybr/wordpress.git

Soumettre le code sur le dépôt distant

$ git push -u origin master

Git : enregistrer les fichiers modifiés et supprimés dans le dépôt

J’ai quelques projets sous WordPress qui sont dans un dépôt git privé. Le système de mise à jour WordPress fait que certains fichiers de l’instance de prod sont modifiés localement.

Pour m’informer quand cela arrive, une cron m’envoie par email de tels changements. Pour committer automatiquement ou non ces fichiers, voici les commandes git que j’utilise :

$ git add -u
$ git commit -a -m "update wordpress"
  • git add -u : permet d’ajouter tous les fichiers déjà référencés dans le git (modifications ou suppressions)
  • git commit -a : commit les modifications dans le dépôt

Git : installer gitlab sur Ubuntu 14.04

Gitlab est un outil de gestion de dépôts git, review, tickets, activités, etc.. Gitlab possède une version « communauté » que vous pouvez installer sur votre propre serveur.

L’installation sur Ubuntu est assez aisée. Le seul souci que j’ai rencontré concerne les ports bindés par les différents services car je l’ai installé sur un serveur contenant déjà un certain nombre de services. La procédure standard est disponible sur le site de gitlab.

Le serveur utilisé contenait déjà les services suivants :

  • nginx qui utilise les ports 80 et 443
  • apache qui utilise le port 8080

Les ports par défaut utilisés par gitlab sont le 80 pour nginx et 8080 pour unicorn. Pour les changer il faut se rendre dans le fichier /etc/gitlab/gitlab.rb :

external_url 'http://git.domain.com:81'
[...]
unicorn['port'] = 82

external_url va permettre de changer le port par défaut de nginx et le second paramètres parle de lui-même…

Pour prendre en compte les nouveaux paramètres :

gitlab-ctl reconfigure
gitlab-ctl restart

Vous pouvez maintenant vous connecter sur http://git.domain.com:81 pour accéder à votre nouvelle instance gitlab.

Bash : exécuter une commande et tester le contenu de retour

J’ai créé une cron pour vérifier si des changements locaux existent sur des dépôts git.

A priori, il ne devrait pas y en avoir sur des instances en prod mais la théorie reste la théorie, il arrive souvent que des modifications soient apportées en direct sur l’instance, surtout pour des projets persos.

Le but de la commande est d’exécuter un git status -s dans un dépôt et de m’envoyer par email les changements présents. Comme il s’agit d’une tâche cron, le contenu de l’email correspond à la sortie standard. L’autre besoin est d’ajouter un peu de contexte au résultat de la commande en indiquant dans quel dépôt nous nous trouvons.

#!/bin/bash

OUTPUT=$(cd /var/www/tools && git status -s)
if [ -n "${OUTPUT}" ]; then
        echo "git changes in /var/www/tools"
        echo "${OUTPUT}"
        echo
fi

Un email reçu ressemblera à :

----- 8< -----
git changes in /var/www/tools
?? TEST
----- 8< -----

Git: initialiser un dépôt avec un projet existant

Parce que l’on a tous des projets existants qui ne font pas partis d’un dépôt et que vous voulez organiser ça proprement.

Sachant que vous avez initialisé votre projet sur le serveur git, voici la procédure à suivre :

 

$ cd /var/www/projet

$ git init
Dépôt Git existant réinitialisé dans /var/www/projet/.git/

$ git add .

$ git commit -m 'Initial commit'

$ git remote add origin git@github.com:compte/projet.git

$ git push -u origin master

Counting objects: 1541, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (1513/1513), done.
Writing objects: 100% (1541/1541), 8.80 MiB | 5.20 MiB/s, done.
Total 1541 (delta 128), reused 0 (delta 0)
To git@github.com:compte/projet.git
* [new branch] master -> master
La branche master est paramétrée pour suivre la branche distante master depuis origin.

Vous pouvez maintenant utiliser normalement votre dépôt avec git pull / git push.

$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Depuis github.com:compte/projet
   500c171..c69856b  master     -> origin/master
Mise à jour 500c171..c69856b
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)
$ vim README.md

$ git add README.md

$ git commit -m "update README.md"
[master 9ea5202] update README.md
 1 file changed, 3 insertions(+)

$ git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 320 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To git@github.com:compte/projet.git
   c69856b..9ea5202  master -> master

Git : Utiliser une clé ssh spécifique

Lorsque l’on travaille avec Github, on ne peut pas ajouter la même clé ssh sur plusieurs dépôts. Il faut alors générer plusieurs clés et indiquer à git en ligne de commande quelle clé utiliser pour l’opération.

Disons que votre clé liée à votre dépôt se trouve dans .ssh/id_dsa_github_deploy 

Configurer alors ssh de la manière suivante dans .ssh/config :

Host gitops
Hostname github.com
User git
IdentityFile ~/.ssh/id_dsa_github_deploy
IdentitiesOnly yes

Alors qu’habituellement vous utilisez la commande suivante pour cloner votre dépôt :

$ git clone git@github.com:acme/ops.git

Maintenant, utilisez la commande suivante :

git clone gitops:acme/ops.git

 

Git: changer le dépôt principal de son projet (remote origin)

Si vous avez besoin de transférer votre projet sur un nouveau repository vierge, voici les instructions à suivre.

La configuration actuelle :

$ git remote -v
origin  git@github.com:CharlyBr/projet.git (fetch)
origin  git@github.com:CharlyBr/projet.git (push)

Tout d’abord, supprimer l’origine actuelle.

git remote rm origin

Ajouter le nouveau dépôt :

$ git remote add origin git@github.com:CharlyBr/gros.git

Mettre à jour le code sur le dépôt distant :

git fetch
git branch --set-upstream-to=origin/master master
git push -u origin master