Jenkins
Open-source automatiseringsserver der har defineret CI/CD i over et årti med tusindvis af plugins og fleksible pipelines.
Jenkins er den ældste og mest udbredte open-source CI/CD-server. Projektet startede som Hudson hos Sun Microsystems i 2004 og blev forked til Jenkins i 2011 efter Oracles overtagelse. I dag driver Jenkins automatiserede pipelines hos alt fra startups til Fortune 500-virksomheder, og pluginøkosystemet tæller over 1800 udvidelser.
Kernen i Jenkins er en master-agent-arkitektur. Master-noden orkestrerer jobs, mens agents (tidligere kaldt slaves) eksekverer build-trin på dedikerede maskiner. Det giver horisontal skalering: store organisationer kan have hundredvis af agents på Linux, Windows og macOS, der kører parallelle builds. En agent kan være en VM, en container eller en fysisk server.
Pipelines defineres i en Jenkinsfile, der lever sammen med kildekoden i repositoryet. Det er Pipeline-as-Code-princippet: pipeline-definitionen versionsstyres, reviewes og rulles tilbage som enhver anden kode. Jenkinsfile bruger en Groovy-baseret DSL med to syntakser. Declarative pipeline har en fast struktur med stages og steps og er nemmest at læse. Scripted pipeline giver fuld Groovy-kraft og er mere fleksibel til komplekse workflows.
En typisk Jenkins-pipeline består af stages som Checkout, Build, Test, Security Scan og Deploy. Hver stage kan køre parallelt eller sekventielt, og post-actions håndterer notifikationer og oprydning. Multibranch Pipelines opdager automatisk branches og pull requests i Git og opretter separate pipelines for hver. Det matcher GitHub Flow og GitLab Flow ud af boksen.
Plugin-økosystemet er Jenkins' største styrke og største svaghed. Fra Git-integration over Docker-builds til Kubernetes-deployment findes der plugins til alt. Men plugins er også den primære kilde til driftsproblemer: inkompatibiliteter mellem versioner, sikkerhedssårbarheder og forældede afhængigheder kræver løbende vedligeholdelse. Plugin Manager og Configuration as Code (JCasC) hjælper med at holde styr på konfigurationen.
Jenkins X og Jenkins Pipeline Library er nyere initiativer der modernerer platformen. Jenkins X er en cloud-native variant designet til Kubernetes med GitOps-workflow ud af boksen. Shared Libraries lader teams genbruge pipeline-kode på tværs af projekter, hvilket reducerer duplikation og standardiserer best practices. En typisk shared library indeholder hjælpefunktioner til build, test og deploy som projekterne bare kalder.
Sammenligning med moderne CI/CD-platforme er nuanceret. GitHub Actions, GitLab CI og CircleCI tilbyder bedre developer experience og lavere driftsbyrde, fordi platformen er fuldt managed. Jenkins kræver en server, vedligeholdelse og pluginstyring, men giver til gengæld total kontrol, on-premises drift og fleksibilitet til specielle workflows. Mange enterprises kører Jenkins specifikt fordi de ikke kan eller vil sende deres CI til en SaaS-platform.
Drift af Jenkins kræver opmærksomhed på flere fronter. Backup af JENKINS_HOME (jobs, konfiguration, plugins) er kritisk, da en korrupt master kan koste dage af genopretningsarbejde. Configuration as Code (JCasC) gør konfigurationen deklarativ via YAML og fjerner behovet for manuelle UI-klik. Containeriseret Jenkins via det officielle Docker-image kombineret med dynamiske agents i Kubernetes gør platformen mere elastisk og lettere at opgradere.
Best practices for moderne Jenkins-brug inkluderer at holde Jenkinsfile slank og delegere logik til shared libraries, bruge ephemeral agents (helst i Kubernetes) frem for langtidskørende statiske agents, kryptere alle credentials via Credentials Plugin eller HashiCorp Vault, og opdatere både Jenkins core og plugins regelmæssigt for at lukke sikkerhedshuller. Et velholdt Jenkins-setup kan stadig konkurrere med moderne SaaS-CI på funktionalitet, om end ikke altid på enkelhed.
GitHub Actions
CI/CD-platform integreret direkte i GitHub til automatisering af build, test og deployment.
Docker
Containerplatform der pakker applikationer med alle afhængigheder i isolerede, portable containere.
Continuous Integration (CI)
Automatisk integration af kodeændringer i et delt repository flere gange dagligt.