Options d’installation

MéthodeCommandeUsage
WARjava -jar jenkins.warDev local, test rapide
Package OSapt install jenkins / yum install jenkinsVM Linux en production
Dockerdocker run jenkins/jenkins:ltsIsolation, portabilité
Helm (K8s)helm install jenkins jenkins/jenkinsCloud-native, scale

Installation Docker (recommandé pour débuter)

docker run -d \
  --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  --restart unless-stopped \
  jenkins/jenkins:lts-jdk17

Premier démarrage :

# Récupérer le mot de passe initial
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

Installation sur Kubernetes avec Helm

helm repo add jenkins https://charts.jenkins.io
helm repo update
 
helm install jenkins jenkins/jenkins \
  --namespace jenkins \
  --create-namespace \
  --set controller.serviceType=LoadBalancer \
  --set persistence.enabled=true \
  --set persistence.size=20Gi \
  -f jenkins-values.yaml

jenkins-values.yaml minimal :

controller:
  numExecutors: 0        # Controller sans executors
  installPlugins:
    - kubernetes:latest
    - workflow-aggregator:latest
    - git:latest
    - credentials-binding:latest
    - blueocean:latest
  JCasC:
    defaultConfig: true

Jenkins Configuration as Code (JCasC)

JCasC permet de déclarer toute la configuration Jenkins dans un fichier YAML — reproductible et versionné.

# jenkins-casc.yaml
jenkins:
  systemMessage: "Jenkins géré par JCasC"
  numExecutors: 0
  securityRealm:
    local:
      allowsSignup: false
      users:
        - id: admin
          password: "${JENKINS_ADMIN_PASSWORD}"
  authorizationStrategy:
    roleBased:
      roles:
        global:
          - name: admin
            permissions:
              - "Overall/Administer"
            assignments:
              - admin
 
credentials:
  system:
    domainCredentials:
      - credentials:
          - usernamePassword:
              id: docker-registry
              username: "${DOCKER_USER}"
              password: "${DOCKER_PASSWORD}"
          - string:
              id: sonar-token
              secret: "${SONAR_TOKEN}"
 
unclassified:
  slackNotifier:
    teamDomain: monorg
    tokenCredentialId: slack-token

Indiquer l’emplacement du fichier :

# Variable d'environnement
CASC_JENKINS_CONFIG=/var/jenkins_home/casc_configs/jenkins-casc.yaml

Configuration de sécurité initiale

  1. Realm : définir la source d’authentification (local, LDAP, SAML, GitHub OAuth)
  2. Authorization : définir les droits (plugin Role Strategy recommandé)
  3. CSRF Protection : activée par défaut depuis Jenkins 2.x
  4. Agent → Controller Security : restreindre ce que les agents peuvent faire sur le Controller
Manage Jenkins → Security → Configure Global Security
  ├── Security Realm  : Jenkins' own user database / LDAP
  ├── Authorization   : Role-Based Strategy
  └── Agent Protocols : JNLPv4, désactiver les anciens

Maintenance courante

TâcheComment
Mise à jour des pluginsManage Jenkins → Plugins → Updates
Mise à jour de JenkinsRemplacer le WAR / apt upgrade jenkins / helm upgrade
SauvegardeSauvegarder JENKINS_HOME (jobs/, credentials.xml, config.xml, plugins/)
Nettoyage des buildsbuildDiscarder dans les pipelines ou Workspace Cleanup Plugin
MonitoringExposer les métriques via le plugin Prometheus Metrics → scraper avec Prometheus

En relation avec