Figer les versions

Bonjour,

Je travaille actuellement à l’amélioration de la CI (dans Gitlab) d’un grand nombre de projets et je m’aperçois de temps en temps que certains projets n’ont pas figé les versions des images ou des dépendances. Je comprends que lors du développement, on veuille utiliser la dernière version mais lorsque l’on arrive sur la branche master je ne voudrais plus voir de “latest”, "dev ou “*”.
Avez-vous rencontré le problème ?
Et surtout avez-vous trouvé des solutions afin de tester automatiquement que les versions sont bien figées sur certaines branches ?

Merci d’avance pour vos retours d’expérience

Je fais ainsi

build_tag:
    stage: build_tag
    when: on_success
    only:
      - tags
    image: docker:stable
    services:
      - docker:dind
    script:
      - docker login -u $REGISTRY_USER -p $REGISTRY_PASSWORD quay.io
      - docker build --network host -t monimage:$CI_COMMIT_TAG .
      - docker push monimage:$CI_COMMIT_TAG

Et pas de latest sur du tag.

Bonjour,

Je n’ai pas compris si tu parlais des images des dépendances ou des images que vous générez ?

En fait, je parle des images de base dans les dockerfile et des dépendances (symfony, nodejs …). Pas de celles que l’ont construit.

1 J'aime

Alors selon moi il faut que le developpeur travail dans un environnement le plus proche de la production.

Cela veux dire que même lorsque il developpe il doit figer ses versions. C’est une bonne pratique ecpliqué dans le détail ici : The Twelve-Factor App.

Je force tous les developpeurs avec qui je travail à figer leur versions, sinon on a des surprises.

Je n’ai pas trouvé de solution mais je suis sur qu’avec des linters cela améliore les choses.

2 J'aime

Je suis a côté du coup :slight_smile:

Y a hadolint pour les Dockerfile. Après pour symphony et compagnie, j’imagine qu’il existe d’autres solutions pour compléter :

$ hadolint Dockerfile
Dockerfile:1 DL3007 Using latest is prone to errors if the image will ever update. Pin the version explicitly to a release tag
Dockerfile:6 DL3018 Pin versions in apk add. Instead of apk add <package> use apk add <package>=<version>
$ echo $?
1

5 J'aime

Hello,

Pour les dépendences en nodejs & php, il y a le fichier édité par les dev (package.json ou composer.json), et le résulat des versions téléchargées est dans un fichier de “lock” associé (package-lock.json ou compose.lock). Ces derniers fichiers contiennent les versions effectives (numérotées).

Donc si le package-lock.json/compose.lock est versionné dans git et copier au build du docker, tu devrais avoir les même version. Je met du conditionnel car c’est ce qu’on m’a dit là où je bosse, mais je n’ai pas vérifié si c’était vrai.

1 J'aime