GitHotfix23 » Historique » Version 3
Daniel Dehennin, 06/06/2013 12:06
Définition de $DEV_NAME
| 1 | 1 | Daniel Dehennin | h1. Application d’un hotfix à passer en stable 2.3 |
|---|---|---|---|
| 2 | 1 | Daniel Dehennin | |
| 3 | 1 | Daniel Dehennin | h2. Prérequis |
| 4 | 1 | Daniel Dehennin | |
| 5 | 1 | Daniel Dehennin | * Le paquet est à distribuer dans eole-2.3-updates |
| 6 | 3 | Daniel Dehennin | * « *@DEV_NAME@* » : le prénom et nom du développeur qui fait la correction |
| 7 | 1 | Daniel Dehennin | * « *@$ISSUE@* » : numéro de la demande redmine |
| 8 | 1 | Daniel Dehennin | * « *@$PAQUET@* » : le nom du paquet (et du dépôt git) |
| 9 | 1 | Daniel Dehennin | * « *@$SRC@* » : la branche source |
| 10 | 1 | Daniel Dehennin | * « *@$PKG@* » : la branche de packaging |
| 11 | 1 | Daniel Dehennin | * « *@$COMMIT_ID@* » : l’identifiant du commit de la branche 2.3 depuis lequel on fait le correctif |
| 12 | 1 | Daniel Dehennin | * « *@$NEW_VERSION@* » : nouveau numéro de version comprenant le correctif |
| 13 | 1 | Daniel Dehennin | |
| 14 | 1 | Daniel Dehennin | h2. Déterminer la version à corriger |
| 15 | 1 | Daniel Dehennin | |
| 16 | 1 | Daniel Dehennin | <pre> |
| 17 | 1 | Daniel Dehennin | root@server:~# dpkg -l $PAQUET |
| 18 | 1 | Daniel Dehennin | ii $PAQUET ${PROD_VERSION} <arch> <description> |
| 19 | 1 | Daniel Dehennin | </pre> |
| 20 | 1 | Daniel Dehennin | |
| 21 | 1 | Daniel Dehennin | La version est ${PROD_VERSION}. |
| 22 | 1 | Daniel Dehennin | |
| 23 | 1 | Daniel Dehennin | h2. Déterminer le commit de la branche source |
| 24 | 1 | Daniel Dehennin | |
| 25 | 1 | Daniel Dehennin | Le source qui a servi à la compilation du paquet debian est accessible par le tag « *@debian/${PROD_VERSION}@* ». |
| 26 | 1 | Daniel Dehennin | |
| 27 | 1 | Daniel Dehennin | Ce tag pointe sur un commit de la branche de packaging « *@$PKG@* ». |
| 28 | 1 | Daniel Dehennin | |
| 29 | 1 | Daniel Dehennin | À partir de ce tag, il faut déterminer, en remontant l’historique, le premier commit de la branch source, c’est à dire le premier commit présent dans les deux branches. |
| 30 | 1 | Daniel Dehennin | |
| 31 | 1 | Daniel Dehennin | Cela peut être fait à la main en parcourant le log de « *@debian/${PROD_VERSION}@* » : |
| 32 | 1 | Daniel Dehennin | |
| 33 | 1 | Daniel Dehennin | <pre> |
| 34 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git log debian/${PROD_VERSION} |
| 35 | 1 | Daniel Dehennin | </pre> |
| 36 | 1 | Daniel Dehennin | |
| 37 | 1 | Daniel Dehennin | Il est possible de le faire de façon programmatique en déterminant quelle est la base de fusion entre le tag et la branche source avec la commande « *@git merge-base@* » : |
| 38 | 1 | Daniel Dehennin | |
| 39 | 1 | Daniel Dehennin | <pre> |
| 40 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git merge-base debian/${PROD_VERSION} $SRC |
| 41 | 1 | Daniel Dehennin | $COMMIT_ID |
| 42 | 1 | Daniel Dehennin | </pre> |
| 43 | 1 | Daniel Dehennin | |
| 44 | 1 | Daniel Dehennin | L’identifiant du commit est noté « *@$COMMIT_ID@* ». |
| 45 | 1 | Daniel Dehennin | |
| 46 | 1 | Daniel Dehennin | h2. Créer une branche pour le hotfix |
| 47 | 1 | Daniel Dehennin | |
| 48 | 1 | Daniel Dehennin | Il faut créer une nouvelle branche basée sur « *@$COMMIT_ID@* » afin de n’appliquer que la correction, nous lui donnons un nom en rapport avec une demande, par exemple avec la demande № « *@$ISSUE@* » : |
| 49 | 1 | Daniel Dehennin | |
| 50 | 1 | Daniel Dehennin | <pre> |
| 51 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git checkout -b hotfix/$ISSUE $COMMIT_ID |
| 52 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (hotfix/$ISSUE)$ |
| 53 | 1 | Daniel Dehennin | </pre> |
| 54 | 1 | Daniel Dehennin | |
| 55 | 1 | Daniel Dehennin | h2. Corriger le bug |
| 56 | 1 | Daniel Dehennin | |
| 57 | 1 | Daniel Dehennin | Et ne rien faire d’autre que corriger le bug afin de limiter au maximum les problèmes. |
| 58 | 1 | Daniel Dehennin | |
| 59 | 1 | Daniel Dehennin | Normalement il ne devrait y avoir qu’un seul commit. |
| 60 | 1 | Daniel Dehennin | |
| 61 | 1 | Daniel Dehennin | À voir au cas par cas, si une partie de la correction est à intégrer ailleurs alors cela peut-être fait en plusieurs commits. |
| 62 | 1 | Daniel Dehennin | |
| 63 | 1 | Daniel Dehennin | h2. Créer une branche pour empaqueter le correctif |
| 64 | 1 | Daniel Dehennin | |
| 65 | 1 | Daniel Dehennin | Il faut créer une nouvelle branche basée sur le paquet à corriger (représenté par le tag « *@debian/${PROD_VERSION}@* ») : |
| 66 | 1 | Daniel Dehennin | |
| 67 | 1 | Daniel Dehennin | <pre> |
| 68 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git checkout -b pkg/hotfix/$ISSUE debian/${PROD_VERSION} |
| 69 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ |
| 70 | 1 | Daniel Dehennin | </pre> |
| 71 | 1 | Daniel Dehennin | |
| 72 | 1 | Daniel Dehennin | h2. Intégrer le correctif |
| 73 | 1 | Daniel Dehennin | |
| 74 | 1 | Daniel Dehennin | <pre> |
| 75 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git merge --no-ff hotfix/$ISSUE |
| 76 | 1 | Daniel Dehennin | </pre> |
| 77 | 1 | Daniel Dehennin | |
| 78 | 1 | Daniel Dehennin | h2. Mettre à jour debian/changelog |
| 79 | 1 | Daniel Dehennin | |
| 80 | 1 | Daniel Dehennin | Cela peut-être fait en ajoutant une entrée à la main ou via l’utilitaire « *@dch@* » fourni par le paquet debian « *@devscripts@* ». |
| 81 | 1 | Daniel Dehennin | |
| 82 | 1 | Daniel Dehennin | Nous allons détailler étape par étape afin de vérifier avant de publier une bêtise ;-) |
| 83 | 1 | Daniel Dehennin | |
| 84 | 1 | Daniel Dehennin | h3. Déterminer le nouveau numéro de version |
| 85 | 1 | Daniel Dehennin | |
| 86 | 1 | Daniel Dehennin | * Si le précédent numéro n’était pas celui d’un correctif, ajouter le suffix « *@+1@* », par exemple, si « *@PROD_VERSION=2.3-eole76@* », cela donne: « *@2.3-eole76+1@* » |
| 87 | 1 | Daniel Dehennin | * Sinon, incrémenter le chiffre après le « *@+@* », par exemple, si « *@PROD_VERSION=2.3-eole76+2@* », cela donne: « *@2.3-eole76+3@* » |
| 88 | 1 | Daniel Dehennin | |
| 89 | 1 | Daniel Dehennin | La nouvelle version est notée « *@$NEW_VERSION@* ». |
| 90 | 1 | Daniel Dehennin | |
| 91 | 1 | Daniel Dehennin | h3. Vérifier les informations de log |
| 92 | 1 | Daniel Dehennin | |
| 93 | 1 | Daniel Dehennin | Il ne devrait y avoir qu’un commit de différence entre « *@$COMMIT_ID@* » et la branche de hotfix « *@hotfix/$ISSUE@* », (sauf cas exceptionnel), nous utilisons un format court utilisable comme ligne de |
| 94 | 1 | Daniel Dehennin | « *@debian/changelog@* » : |
| 95 | 1 | Daniel Dehennin | |
| 96 | 1 | Daniel Dehennin | <pre> |
| 97 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git log --format='[%h] %s' ${COMMIT_ID}..hotfix/$ISSUE |
| 98 | 1 | Daniel Dehennin | </pre> |
| 99 | 1 | Daniel Dehennin | |
| 100 | 1 | Daniel Dehennin | h3. Modifier debian/changelog |
| 101 | 1 | Daniel Dehennin | |
| 102 | 1 | Daniel Dehennin | De façon automatique avec l’utilitaire « *@dch@* », il s’agit d’utiliser correctement les informations recueillies jusqu’à présent : |
| 103 | 1 | Daniel Dehennin | |
| 104 | 1 | Daniel Dehennin | <pre> |
| 105 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ dch --no-auto-nmu --multimaint --multimaint-merge \ |
| 106 | 1 | Daniel Dehennin | --distribution=eole-2.3-updates \ |
| 107 | 1 | Daniel Dehennin | -v $NEW_VERSION -- \ |
| 108 | 1 | Daniel Dehennin | $(git log --format='[%h] %s' ${COMMIT_ID}..hotfix/$ISSUE) |
| 109 | 1 | Daniel Dehennin | </pre> |
| 110 | 1 | Daniel Dehennin | |
| 111 | 1 | Daniel Dehennin | h3. Commit |
| 112 | 1 | Daniel Dehennin | |
| 113 | 1 | Daniel Dehennin | <pre> |
| 114 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git add debian/changelog |
| 115 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git commit \ |
| 116 | 2 | Daniel Dehennin | -m "Nouveau paquet compilé par $DEV_NAME: $PAQUET ($NEW_VERSION) eole-2.3-updates depuis pkg/hotfix/$ISSUE" |
| 117 | 1 | Daniel Dehennin | </pre> |
| 118 | 1 | Daniel Dehennin | |
| 119 | 1 | Daniel Dehennin | h2. Compiler le paquet à la main sur les serveurs de build |
| 120 | 1 | Daniel Dehennin | |
| 121 | 1 | Daniel Dehennin | Demander à Joël Cuissinat ou Daniel Dehennin ;-) |
| 122 | 1 | Daniel Dehennin | |
| 123 | 1 | Daniel Dehennin | Cela permet de faire une validation en plus. |
| 124 | 1 | Daniel Dehennin | |
| 125 | 1 | Daniel Dehennin | <pre> |
| 126 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ mkdir -p ~/tmp/${PAQUET}-2.3 |
| 127 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ git archive --prefix=${PAQUET}-2.3/ \ |
| 128 | 1 | Daniel Dehennin | -o ${PAQUET}-2.3.tar.gz \ |
| 129 | 1 | Daniel Dehennin | pkg/hotfix/$ISSUE |
| 130 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ scp ${PAQUET}-2.3.tar.gz eole@lucid32:tmp/ |
| 131 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ ssh eole@lucid32 |
| 132 | 1 | Daniel Dehennin | eole@lucid32:~$ cd tmp && tar -xzvf ${PAQUET}-2.3.tar.gz |
| 133 | 1 | Daniel Dehennin | eole@lucid32:~/tmp$ cd ${PAQUET}-2.3 |
| 134 | 1 | Daniel Dehennin | eole@lucid32:~/tmp/${PAQUET}-2.3$ dpkg-buildpackage -rfakeroot |
| 135 | 1 | Daniel Dehennin | </pre> |
| 136 | 1 | Daniel Dehennin | |
| 137 | 1 | Daniel Dehennin | h2. Publier le paquet sur le dépôt debian |
| 138 | 1 | Daniel Dehennin | |
| 139 | 1 | Daniel Dehennin | Demander à Joël Cuissinat ou Daniel Dehennin ;-) |
| 140 | 1 | Daniel Dehennin | |
| 141 | 1 | Daniel Dehennin | Ils le feront directement depuis le serveur de build |
| 142 | 1 | Daniel Dehennin | |
| 143 | 1 | Daniel Dehennin | <pre> |
| 144 | 1 | Daniel Dehennin | eole@lucid32:~/tmp/${PAQUET}-2.3$ dput eole ../${PAQUET}_2.3*.changes |
| 145 | 1 | Daniel Dehennin | </pre> |
| 146 | 1 | Daniel Dehennin | |
| 147 | 1 | Daniel Dehennin | h2. Faire tester le correctif présent sur *@test-eoleng.ac-dijon.fr@* |
| 148 | 1 | Daniel Dehennin | |
| 149 | 1 | Daniel Dehennin | Même si le paquet compilé est publié, il n’est pas lâché dans la nature directement, il y a un sas de sécurité avec *@test-eoleng.ac-dijon.fr@*. |
| 150 | 1 | Daniel Dehennin | |
| 151 | 1 | Daniel Dehennin | Une fois que l’utilisateur confirme que la chose est bien corrigée, le paquet sera envoyé sur les dépôts de production. |
| 152 | 1 | Daniel Dehennin | |
| 153 | 1 | Daniel Dehennin | h2. Éviter les régressions |
| 154 | 1 | Daniel Dehennin | |
| 155 | 1 | Daniel Dehennin | Il ne faut pas oublier d’intégrer les modifications à la branche $SRC afin que le prochain paquet aie lui aussi le correctif |
| 156 | 1 | Daniel Dehennin | |
| 157 | 1 | Daniel Dehennin | h3. Intégrer à « *@$SRC@* » |
| 158 | 1 | Daniel Dehennin | |
| 159 | 1 | Daniel Dehennin | <pre> |
| 160 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git checkout $SRC |
| 161 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ git merge --no-ff hotfix/$ISSUE |
| 162 | 1 | Daniel Dehennin | </pre> |
| 163 | 1 | Daniel Dehennin | |
| 164 | 1 | Daniel Dehennin | h3. Publier le tag du nouveau paquet |
| 165 | 1 | Daniel Dehennin | |
| 166 | 1 | Daniel Dehennin | Afin de garder une trace et de permettre une possible correction sur le paquet corrigé, il faut publier une référence qui sera utilisable dans la phase 2 de cette documentation « *@Déterminer le commit |
| 167 | 1 | Daniel Dehennin | de la branche source@* ». |
| 168 | 1 | Daniel Dehennin | |
| 169 | 1 | Daniel Dehennin | Pour cela nous créons un tag signé par GPG : |
| 170 | 1 | Daniel Dehennin | |
| 171 | 1 | Daniel Dehennin | <pre> |
| 172 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ git tag -s \ |
| 173 | 1 | Daniel Dehennin | -m "Debian release $NEW_VERSION" \ |
| 174 | 1 | Daniel Dehennin | debian/$NEW_VERSION \ |
| 175 | 1 | Daniel Dehennin | pkg/hotfix/$ISSUE |
| 176 | 1 | Daniel Dehennin | </pre> |
| 177 | 1 | Daniel Dehennin | |
| 178 | 1 | Daniel Dehennin | Et on le publie sur le dépôt git central : |
| 179 | 1 | Daniel Dehennin | |
| 180 | 1 | Daniel Dehennin | <pre> |
| 181 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ git push dev-eole debian/$NEW_VERSION |
| 182 | 1 | Daniel Dehennin | </pre> |
| 183 | 1 | Daniel Dehennin | |
| 184 | 1 | Daniel Dehennin | h2. Nettoyage |
| 185 | 1 | Daniel Dehennin | |
| 186 | 1 | Daniel Dehennin | On peut maintenant : |
| 187 | 1 | Daniel Dehennin | |
| 188 | 1 | Daniel Dehennin | * Supprimer la branche « *@hotfix/$ISSUE@* » car elle est intégrée à « *@$SRC@* » ; |
| 189 | 1 | Daniel Dehennin | * Supprimer la branche « *@pkg/hotfix/$ISSUE@* » car le prochain paquet intégrera le correctif via la branche « *@$SRC@* ». |