Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes |
technique:docker:picasoft:update [2020/10/07 19:32] – qduchemi | technique:docker:picasoft:update [2021/10/16 18:15] – qduchemi |
---|
{{indexmenu_n>35}} | {{indexmenu_n>35}} |
# Mettre à jour un service ou sa configuration | # Mettre à jour un service ou sa configuration |
| |
| <bootnote warning> |
| Prérequis : les articles de [[technique:docker:general:start|cette section]]. |
| </bootnote> |
| |
<bootnote>Ces explications ne valent que pour un service qui est déjà en production et que l'on souhaite mettre à jour.</bootnote> | <bootnote>Ces explications ne valent que pour un service qui est déjà en production et que l'on souhaite mettre à jour.</bootnote> |
| |
| Tous les fichiers permettant de paramétrer les conteneurs Docker et les services sont versionnés sur le dépôt [dockerfiles](https://gitlab.utc.fr/picasoft/dockerfiles) (voir [[technique:docker:picasoft:dockerfiles|gestion des services]]). |
| |
On peut vouloir mettre à jour : | On peut vouloir mettre à jour : |
* Le service (*e.g.* changer un numéro de version dans le Dockerfile), | |
* La configuration (éditer un fichier quelconque), | * Le service (*e.g.* passer d'une version X à une version Y), |
| * La configuration du service (*e.g.* changer un paramètre dans un fichier `config.json`), |
* La configuration des volumes (*e.g.* changer le point de montage du Docker Compose), | * La configuration des volumes (*e.g.* changer le point de montage du Docker Compose), |
* etc. | * etc. |
| |
Dans tous les cas, les modifications apportées à n'importe quel fichier de ce dépôt **doivent être poussées sur ce dépôt**. | <bootnote warning>Toute modification apportées à n'importe quel fichier versionné **doit être poussée sur le dépôt**.</bootnote> |
Vous pouvez effectuer les modifications sur votre machine ou sur une machine de Picasoft, du moment qu'elles sont synchronisées avec le dépôt. | Vous pouvez effectuer les modifications sur votre machine ou sur une machine de Picasoft, du moment qu'elles sont synchronisées avec le dépôt. |
| |
## Comment mettre à jour un service ? | ## Comment mettre à jour un service ? |
| |
Il est pertinent de créer une branche avant chaque mise à jour où vous n'êtes pas sûr des modifications, et ne de fusionner dans `master` que lorsque les tests ont été effectués. | Il pourrait être pertinent de créer une branche avant chaque mise à jour où vous n'êtes pas sûr des modifications, et ne de fusionner dans `master` que lorsque les tests ont été effectués. |
| |
| <bootnote critical> |
| Les instructions spécifiques de mise à jour de chaque service se trouvent dans le README de chaque dossier. Pensez à y jeter un coup d'oeil. |
| </bootnote> |
| |
### Mise à jour de la configuration | ### Mise à jour de la configuration |
| |
On appelle configuration tout ce qui ne nécessite pas de reconstruire une image : | On appelle **configuration** tout ce qui ne nécessite pas de reconstruire l'image Docker, par exemple : |
* Modification du `docker-compose.yml` (environnement, point de montage, tag d'une image officielle...) | |
* Modification d'un fichier de configuration | * Modification du `docker-compose.yml` (environnement, point de montage, changement du tag d'une image officielle...). Par exemple, Wekan est mis à jour uniquement en changeant le [numéro de version dans le fichier Compose](https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-wekan/docker-compose.yml), car il utilise une image déjà construite. |
* Modification d'une page web d'accueil | * Modification d'un fichier de configuration monté dans le conteneur. Par exemple, Etherpad utilise un fichier [settings.json](https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-etherpad/settings.json) qui est monté dans l'image à chaque démarrage. |
* etc. | * etc. |
| |
Il suffit de mettre à jour les fichiers souhaitées, éventuellement de signaler les changements à l'équipe ou en commentaire, puis de synchroniser avec le dépôt. | Il suffit de mettre à jour les fichiers souhaités, éventuellement de signaler les changements à l'équipe ou en commentaire, puis de pousser les modifications sur le dépôt. |
| |
Si vous mettez à jour le tag d'une image officielle (*e.g* `postgres:10` → `postgres:12`), lisez au préalable la documentation de mise à jour ! Certaines nécessitent des interventions manuelles, et le README du service le précise en général. | Si vous mettez à jour le tag d'une image officielle (*e.g* `postgres:10` → `postgres:12`), lisez au préalable la documentation de mise à jour ! Certaines nécessitent des interventions manuelles, et le `README` du service le précise en général. |
| |
Toute image indiquée dans le fichier Compose **doit avoir un tag** (*e.g* `postgres:12` et pas `postgres`). N'utilisez jamais un tag vide (équivalent à `latest`). | Toute image indiquée dans le fichier Compose **doit avoir un tag** (*e.g* `postgres:12` et pas `postgres`). N'utilisez jamais un tag vide (équivalent à `latest`). |
### Mise à jour d'une image maison | ### Mise à jour d'une image maison |
| |
Apportez vos modifications au Dockerfile (ajout d'un paquet...). Vous pouvez travailler en local et tester l'image sur votre machine si vous voulez. | Certaines modifications nécessitent de reconstruire l'image, par exemple : |
| |
| * Changement d'un numéro de version dans une archive téléchargée dans le `Dockerfile`. Par exemple, Mattermost indique le numéro de version de la *release* à téléchargement [directement dans le Dockerfile](https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-mattermost/Dockerfile). |
| * Ajout d'un paquet. Par exemple, on pourrait avoir besoin de rajouter un module PHP pour une nouvelle extension [directement dans le Dockerfile](https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-dokuwiki/Dockerfile). |
| * Changement d'un script d'initialisation copié dans le Dockerfile. Par exemple, le [script d'initialisation de Plume](https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-plume/entrypoint.sh) effectue diverses opérations que l'on pourrait vouloir compléter, et ce script est copié [directement dans le Dockerfile](https://gitlab.utc.fr/picasoft/projets/dockerfiles/-/blob/master/pica-plume/Dockerfile). |
| * etc. |
| |
| Vous pouvez travailler en local et tester l'image sur votre machine si vous voulez. Il y a quelques modifications supplémentaires à apporter. Comme on construit une nouvelle version de l'image, il faut modifier le tag dans le fichier Compose pour que l'image construite soit différenciée des précédentes. |
| |
| * Si on met à jour un service (version X → version Y), on passera le tag du fichier Compose de X à Y. |
| * Si on met juste à jour un fichier "maison" ou une configuration intégrée dans l'image, mais qu'on ne change pas la version du logiciel, on pourra ajouter au tag quelque chose comme `-Z`, de sorte que le tag deviennent `registry.picasoft.net/pica-<service>:vX-Z`. |
| |
Si le code du service à copier dans l'image est intégré au dépôt par un submodule, on lancera la commande suivante pour le mettre à jour à la dernière version. Voir la documentation des submodules pour utiliser un tag ou une branche spécifique. | Dans tous les cas, on modifiera ou on créera le fichier `CHANGELOG.md` pour décrire les modifications apportées à l'image. |
``` | ## Que faire ensuite ? |
git submodule update --recursive --remote <dossier du service> | |
``` | |
| |
Synchronisez ensuite le tout avec le dépôt (`git commit`, `git push...`). | Une fois arrivé à ce stade, votre nouvelle version du service est prête à être déployée depuis n'importe quelle machine de Picasoft. La prochaine étape est [[technique:docker:picasoft:test|de tester la modification]] que vous avez apportée, sauf si elle est vraiment minime (exemple : changement marginal d'un paramètre de configuration). |