Jenkins - 10 choses que tout le monde fait qu'il ne faut pas faire

Jenkins - 10 choses que tout le monde fait qu'il ne faut pas faire

Présentation faite à DevoxxFR le 20 Avril 2018

8254814a3136a30724cd428841f8e155?s=128

Adrien Lecharpentier

April 20, 2018
Tweet

Transcript

  1. BreizhCamp 2018 #breizhcamp 10 choses (que tout le monde fait)

    qu’il ne faut pas faire avec Jenkins Damien Duportal - @DamienDuportal Adrien Lecharpentier - @alecharp
  2. /nous Adrien - Chez CloudBees depuis 3 ans, s’occupe au

    support et fait des outils pour ses collègues et nos clients. Damien - Chez CloudBees depuis 2 ans, s’occupe de la formation, pour que vous soyez tous certifiés.
  3. BreizhCamp 2018 #breizhcamp

  4. #1 - Installation

  5. Utilisation de gestionnaire de paquet, ou Docker #1 - Installation

  6. #2 - Version

  7. ➔ Fixer la version ◆ apt madison / yum lockversion

    ◆ Docker tag / digest ➔ LTS en prod / Weekly en test #2 - Version
  8. #3 - Use ${JENKINS_HOME}

  9. ➔ Éviter le changement de dossier en dehors du WORKSPACE

    ◆ La structure peut changer ◆ Le job peut être renommé ➔ Dépend de l’agent #3 - Use ${JENKINS_HOME}
  10. #4 - Build sur master ?

  11. ➔ Utilisation d’agents : rm -rf ${EMPTY_VARIABLE}/* ➔ Création d’agent

    à la volée ◆ EC2, ◆ Kubernetes, ◆ JCloud. ➔ Nombre d’exécuteurs == nombre de coeurs CPUs #4 - Build sur agent !
  12. #5 - Utiliser Maven / Freestyle jobs

  13. #5 - Utiliser Maven / Freestyle jobs

  14. ➔ So 2014... ➔ Gestion de l'enchaînement complexe ➔ Transfert

    des binaires complexes ➔ Évolution de la configuration ? #5 - Utiliser Maven / Freestyle jobs
  15. ➔ Jenkinsfile ➔ Faites votre choix: ◆ Pipeline ◆ MultiBranch

    Pipeline ◆ Github / Bitbucket Organization Folder ➔ if / when / stash / unstash ➔ Declarative syntax ➔ shared-libraries #5 - Pipeline !!
  16. #6 - Garder tous les builds

  17. #6 - Garder les builds nécessaire

  18. #7 - Accès au workspace

  19. ➔ Utiliser archiveArtifact ➔ Jenkins n’est pas un serveur web

    (CSP tout ça tout ça) ◆ Ni un Maven Repository Manager ◆ Ni un NPM registry ➔ stash / unstash ◆ Passer le contenu entre les agents ◆ Disparaît à la fin d’un build ➔ JEP-202 - External Storage #7 - Archiver les fichiers sélectionnés
  20. #8 - ${JENKINS_HOME}

  21. #8 - ${JENKINS_HOME} ➔ ${JENKINS_HOME} sur un stockage partagé sur

    le réseau ◆ Snapshot, ◆ Disaster recovery, ◆ etc.
  22. #8 - ${JENKINS_HOME}, mark II ➔ ${JENKINS_HOME}/plugins/*/ ➔ ${JENKINS_HOME}/war

  23. #8 - ${JENKINS_HOME}, mark II ➔ Partage sur le réseau

    ◆ Snapshot, ◆ Disaster recovery ➔ Stockage local pour ◆ war en utilisant --webroot ◆ plugins utilisant --pluginroot
  24. #9 - Backup ?

  25. #9 - Backup ! ➔ Mettre Jenkins en quiet mode

    ➔ Tester les backups ◆ Utiliser les backups pour les tests d’upgrade par exemple ◆ Les sortir du serveur (S3, Dropbox, FTP, rsync, etc.) ➔ Timestamp du backup ➔ Fausse bonne idée: faire des deltas ◆ Ça oblige à garder tous les backups ◆ Mais vous ne backuperez pas vos backups
  26. ➔ Toute l’entreprise sur le même Jenkins ◆ Oui la

    compta l’utilise pour faire les paies ◆ 12 équipes qui ne doivent pas voir ce que les autres font ➔ 100K jobs sur une instance, y’a pas de mal.. #10 - One Jenkins to rule them all ?
  27. ➔ Pifomètre: < 500 jobs ➔ Moins de 4-5 équipes,

    ok ➔ Au delà, il faut séparer (“blast radius”) #10 - Diviser pour régner
  28. BONUS!!!

  29. ➔ Pourquoi, il fonctionne bien mon Jenkins 1.596 ➔ Je

    suis sur une LTS, la 1.609.1, c’est bon. #12 - Upgrades ?
  30. ➔ Mise à jour de LTS == correction de sécurité

    ◆ https://jenkins.io/security/ ➔ Idem pour les plugins ➔ Idem pour la JVM qui fait fonctionner Jenkins #12 - Upgrades !!
  31. Upgrade fail.. Je downgrade ! #12 - Upgrades, oups.. downgrade

    !
  32. ➔ Never, ever, ever downgrade ◆ Pas de rollback sur

    les changement de config ➔ Utiliser un backup #12 - Upgrades, oups.. backup !!
  33. Parce que le vert c’est bon pour la santé --

    Ma maman #13 - Green Ball
  34. #13 - Blue Ocean !!

  35. #13 - Blue Ocean !!

  36. #13 - Blue Ocean !!

  37. #13 - Blue Ocean !!

  38. #13 - Blue Ocean !!

  39. #14 - PluginManager ? Pas besoin..

  40. ➔ Quid des dépendances entre plugins ? ➔ Quid des

    versions de core minimale pour un plugin ? #14 - PluginManager ? Besoin !
  41. -Xmx256m -Xms128m -XX:PermGenSize=128m #15 - Jenkins est lent...

  42. https://www.cloudbees.com/blog/joining-big-leagues-tuning-jenkin s-gc-responsiveness-and-stability #15 - JVM parameters

  43. #16 - SSH: access denied ➔ L’administrateur de Jenkins n’est

    pas un ops ➔ L’administratrice de Jenkins n’a pas accès au serveur de Jenkins
  44. ➔ Toujours besoin de SSH pour la maintenance ◆ Diagnostic

    d’une OutOfMemoryError ◆ Déployer un backup ◆ Logs ◆ (Support?) #16 - SSH: ok
  45. ➔ Jenkins X (tout public) : https://goo.gl/rbZBNd ➔ Jenkins Essentials

    : https://goo.gl/o6A7mr ➔ Configuration-as-Code : https://goo.gl/5Bz29F #17 - New way to consume Jenkins
  46. #18 - Support

  47. #19 - Certifications ➔ Certification Jenkins: ◆ https://www.cloudbees.com/jenkins/jenkins-certification ➔ Oui

    c’est une initiative de CloudBees mais ◆ C’est pour Jenkins OSS (“Certified Jenkins Engineer”) ◆ On vends un training pour se préparer : ça ne fait pas de mal, vous apprendrez 2-3 trucs
  48. ➔ Participez à la communauté ◆ Ouvrir des tickets ◆

    Poser des questions (mailing list users, IRC) ◆ Voter sur le choix de LTS ◆ Participer à la doc sur jenkins.io ◆ Allez à votre JAM local (ou démarrez-le) ◆ Jenkins World aussi en France cette année ! ◆ Jenkins User Conference à Paris le 28 Juin ◆ https://jenkins.io/blog/2017/08/23/pull-requests-and-more/ #42 - It’s a plane… no it’s a bird… no it’s a community !!
  49. Merci !

  50. Crédits ➔ Blue Ocean : https://jenkins.io/blog/2016/05/26/introducing-blue-ocean/ ➔ Jenkins logos :

    ◆ butler : https://jenkins.io/images/logos/jenkins/jenkins.png ◆ fire : https://jenkins.io/images/logos/fire/fire.png ◆ hero : https://jenkins.io/images/logos/superhero/superhero.png • auteur : Masanobu Imai ◆ santa-claus: https://jenkins.io/images/logos/santa-claus/santa-claus.png • auteure : Ksenia Nenasheva ◆ Configuration As Code : • auteur : Ksenia Nenasheva ◆ magician: https://jenkins.io/images/logos/magician/magician.png • auteur : Ksenia Nenasheva ◆ Jenkins X : https://jenkins.io/images/logos/jenkins-x/jenkins-x.png • auteur : Joshua McDonald