GitHotfix23 » Historique » Version 7
Daniel Dehennin, 06/06/2013 17:23
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 | 5 | 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 | 6 | Daniel Dehennin | * « *@$PROD_VERSION@* » : numéro de version du paquet diffusé |
13 | 1 | Daniel Dehennin | * « *@$NEW_VERSION@* » : nouveau numéro de version comprenant le correctif |
14 | 1 | Daniel Dehennin | |
15 | 1 | Daniel Dehennin | h2. Déterminer la version à corriger |
16 | 1 | Daniel Dehennin | |
17 | 1 | Daniel Dehennin | <pre> |
18 | 1 | Daniel Dehennin | root@server:~# dpkg -l $PAQUET |
19 | 1 | Daniel Dehennin | ii $PAQUET ${PROD_VERSION} <arch> <description> |
20 | 1 | Daniel Dehennin | </pre> |
21 | 1 | Daniel Dehennin | |
22 | 1 | Daniel Dehennin | La version est ${PROD_VERSION}. |
23 | 1 | Daniel Dehennin | |
24 | 1 | Daniel Dehennin | h2. Déterminer le commit de la branche source |
25 | 1 | Daniel Dehennin | |
26 | 1 | Daniel Dehennin | Le source qui a servi à la compilation du paquet debian est accessible par le tag « *@debian/${PROD_VERSION}@* ». |
27 | 1 | Daniel Dehennin | |
28 | 1 | Daniel Dehennin | Ce tag pointe sur un commit de la branche de packaging « *@$PKG@* ». |
29 | 1 | Daniel Dehennin | |
30 | 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. |
31 | 1 | Daniel Dehennin | |
32 | 1 | Daniel Dehennin | Cela peut être fait à la main en parcourant le log de « *@debian/${PROD_VERSION}@* » : |
33 | 1 | Daniel Dehennin | |
34 | 1 | Daniel Dehennin | <pre> |
35 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git log debian/${PROD_VERSION} |
36 | 1 | Daniel Dehennin | </pre> |
37 | 1 | Daniel Dehennin | |
38 | 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@* » : |
39 | 1 | Daniel Dehennin | |
40 | 1 | Daniel Dehennin | <pre> |
41 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git merge-base debian/${PROD_VERSION} $SRC |
42 | 1 | Daniel Dehennin | $COMMIT_ID |
43 | 1 | Daniel Dehennin | </pre> |
44 | 1 | Daniel Dehennin | |
45 | 1 | Daniel Dehennin | L’identifiant du commit est noté « *@$COMMIT_ID@* ». |
46 | 1 | Daniel Dehennin | |
47 | 1 | Daniel Dehennin | h2. Créer une branche pour le hotfix |
48 | 1 | Daniel Dehennin | |
49 | 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@* » : |
50 | 1 | Daniel Dehennin | |
51 | 1 | Daniel Dehennin | <pre> |
52 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git checkout -b hotfix/$ISSUE $COMMIT_ID |
53 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (hotfix/$ISSUE)$ |
54 | 1 | Daniel Dehennin | </pre> |
55 | 1 | Daniel Dehennin | |
56 | 1 | Daniel Dehennin | h2. Corriger le bug |
57 | 1 | Daniel Dehennin | |
58 | 1 | Daniel Dehennin | Et ne rien faire d’autre que corriger le bug afin de limiter au maximum les problèmes. |
59 | 1 | Daniel Dehennin | |
60 | 1 | Daniel Dehennin | Normalement il ne devrait y avoir qu’un seul commit. |
61 | 1 | Daniel Dehennin | |
62 | 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. |
63 | 1 | Daniel Dehennin | |
64 | 1 | Daniel Dehennin | h2. Créer une branche pour empaqueter le correctif |
65 | 1 | Daniel Dehennin | |
66 | 1 | Daniel Dehennin | Il faut créer une nouvelle branche basée sur le paquet à corriger (représenté par le tag « *@debian/${PROD_VERSION}@* ») : |
67 | 1 | Daniel Dehennin | |
68 | 1 | Daniel Dehennin | <pre> |
69 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (master)$ git checkout -b pkg/hotfix/$ISSUE debian/${PROD_VERSION} |
70 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ |
71 | 1 | Daniel Dehennin | </pre> |
72 | 1 | Daniel Dehennin | |
73 | 1 | Daniel Dehennin | h2. Intégrer le correctif |
74 | 1 | Daniel Dehennin | |
75 | 1 | Daniel Dehennin | <pre> |
76 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git merge --no-ff hotfix/$ISSUE |
77 | 1 | Daniel Dehennin | </pre> |
78 | 1 | Daniel Dehennin | |
79 | 1 | Daniel Dehennin | h2. Mettre à jour debian/changelog |
80 | 1 | Daniel Dehennin | |
81 | 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@* ». |
82 | 1 | Daniel Dehennin | |
83 | 1 | Daniel Dehennin | Nous allons détailler étape par étape afin de vérifier avant de publier une bêtise ;-) |
84 | 1 | Daniel Dehennin | |
85 | 1 | Daniel Dehennin | h3. Déterminer le nouveau numéro de version |
86 | 1 | Daniel Dehennin | |
87 | 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@* » |
88 | 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@* » |
89 | 1 | Daniel Dehennin | |
90 | 1 | Daniel Dehennin | La nouvelle version est notée « *@$NEW_VERSION@* ». |
91 | 1 | Daniel Dehennin | |
92 | 1 | Daniel Dehennin | h3. Vérifier les informations de log |
93 | 1 | Daniel Dehennin | |
94 | 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 |
95 | 1 | Daniel Dehennin | « *@debian/changelog@* » : |
96 | 1 | Daniel Dehennin | |
97 | 1 | Daniel Dehennin | <pre> |
98 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git log --format='[%h] %s' ${COMMIT_ID}..hotfix/$ISSUE |
99 | 1 | Daniel Dehennin | </pre> |
100 | 1 | Daniel Dehennin | |
101 | 1 | Daniel Dehennin | h3. Modifier debian/changelog |
102 | 1 | Daniel Dehennin | |
103 | 1 | Daniel Dehennin | De façon automatique avec l’utilitaire « *@dch@* », il s’agit d’utiliser correctement les informations recueillies jusqu’à présent : |
104 | 1 | Daniel Dehennin | |
105 | 1 | Daniel Dehennin | <pre> |
106 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ dch --no-auto-nmu --multimaint --multimaint-merge \ |
107 | 1 | Daniel Dehennin | --distribution=eole-2.3-updates \ |
108 | 1 | Daniel Dehennin | -v $NEW_VERSION -- \ |
109 | 1 | Daniel Dehennin | $(git log --format='[%h] %s' ${COMMIT_ID}..hotfix/$ISSUE) |
110 | 1 | Daniel Dehennin | </pre> |
111 | 1 | Daniel Dehennin | |
112 | 1 | Daniel Dehennin | h3. Commit |
113 | 1 | Daniel Dehennin | |
114 | 1 | Daniel Dehennin | <pre> |
115 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git add debian/changelog |
116 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git commit \ |
117 | 2 | Daniel Dehennin | -m "Nouveau paquet compilé par $DEV_NAME: $PAQUET ($NEW_VERSION) eole-2.3-updates depuis pkg/hotfix/$ISSUE" |
118 | 1 | Daniel Dehennin | </pre> |
119 | 1 | Daniel Dehennin | |
120 | 1 | Daniel Dehennin | h2. Compiler le paquet à la main sur les serveurs de build |
121 | 1 | Daniel Dehennin | |
122 | 1 | Daniel Dehennin | Demander à Joël Cuissinat ou Daniel Dehennin ;-) |
123 | 1 | Daniel Dehennin | |
124 | 1 | Daniel Dehennin | Cela permet de faire une validation en plus. |
125 | 1 | Daniel Dehennin | |
126 | 1 | Daniel Dehennin | <pre> |
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 | 7 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ ssh eole@lucid32 mkdir tmp/$PAQUET/ |
131 | 7 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ scp ${PAQUET}-2.3.tar.gz eole@lucid32:tmp/$PAQUET/ |
132 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ ssh eole@lucid32 |
133 | 7 | Daniel Dehennin | eole@lucid32:~$ cd tmp/$PAQUET/ && tar -xzvf ${PAQUET}-2.3.tar.gz |
134 | 7 | Daniel Dehennin | eole@lucid32:~/tmp/$PAQUET$ cd ${PAQUET}-2.3 |
135 | 7 | Daniel Dehennin | eole@lucid32:~/tmp/$PAQUET/${PAQUET}-2.3$ dpkg-buildpackage -rfakeroot |
136 | 1 | Daniel Dehennin | </pre> |
137 | 1 | Daniel Dehennin | |
138 | 1 | Daniel Dehennin | h2. Publier le paquet sur le dépôt debian |
139 | 1 | Daniel Dehennin | |
140 | 1 | Daniel Dehennin | Demander à Joël Cuissinat ou Daniel Dehennin ;-) |
141 | 1 | Daniel Dehennin | |
142 | 1 | Daniel Dehennin | Ils le feront directement depuis le serveur de build |
143 | 1 | Daniel Dehennin | |
144 | 1 | Daniel Dehennin | <pre> |
145 | 1 | Daniel Dehennin | eole@lucid32:~/tmp/${PAQUET}-2.3$ dput eole ../${PAQUET}_2.3*.changes |
146 | 1 | Daniel Dehennin | </pre> |
147 | 1 | Daniel Dehennin | |
148 | 1 | Daniel Dehennin | h2. Faire tester le correctif présent sur *@test-eoleng.ac-dijon.fr@* |
149 | 1 | Daniel Dehennin | |
150 | 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@*. |
151 | 1 | Daniel Dehennin | |
152 | 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. |
153 | 1 | Daniel Dehennin | |
154 | 1 | Daniel Dehennin | h2. Éviter les régressions |
155 | 1 | Daniel Dehennin | |
156 | 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 |
157 | 1 | Daniel Dehennin | |
158 | 1 | Daniel Dehennin | h3. Intégrer à « *@$SRC@* » |
159 | 1 | Daniel Dehennin | |
160 | 1 | Daniel Dehennin | <pre> |
161 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET (pkg/hotfix/$ISSUE)$ git checkout $SRC |
162 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ git merge --no-ff hotfix/$ISSUE |
163 | 1 | Daniel Dehennin | </pre> |
164 | 1 | Daniel Dehennin | |
165 | 1 | Daniel Dehennin | h3. Publier le tag du nouveau paquet |
166 | 1 | Daniel Dehennin | |
167 | 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 |
168 | 1 | Daniel Dehennin | de la branche source@* ». |
169 | 1 | Daniel Dehennin | |
170 | 1 | Daniel Dehennin | Pour cela nous créons un tag signé par GPG : |
171 | 1 | Daniel Dehennin | |
172 | 1 | Daniel Dehennin | <pre> |
173 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ git tag -s \ |
174 | 1 | Daniel Dehennin | -m "Debian release $NEW_VERSION" \ |
175 | 1 | Daniel Dehennin | debian/$NEW_VERSION \ |
176 | 1 | Daniel Dehennin | pkg/hotfix/$ISSUE |
177 | 1 | Daniel Dehennin | </pre> |
178 | 1 | Daniel Dehennin | |
179 | 1 | Daniel Dehennin | Et on le publie sur le dépôt git central : |
180 | 1 | Daniel Dehennin | |
181 | 1 | Daniel Dehennin | <pre> |
182 | 1 | Daniel Dehennin | moi@work:~/src/$PAQUET ($SRC)$ git push dev-eole debian/$NEW_VERSION |
183 | 1 | Daniel Dehennin | </pre> |
184 | 1 | Daniel Dehennin | |
185 | 1 | Daniel Dehennin | h2. Nettoyage |
186 | 1 | Daniel Dehennin | |
187 | 1 | Daniel Dehennin | On peut maintenant : |
188 | 1 | Daniel Dehennin | |
189 | 1 | Daniel Dehennin | * Supprimer la branche « *@hotfix/$ISSUE@* » car elle est intégrée à « *@$SRC@* » ; |
190 | 1 | Daniel Dehennin | * Supprimer la branche « *@pkg/hotfix/$ISSUE@* » car le prochain paquet intégrera le correctif via la branche « *@$SRC@* ». |