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