CI/CD Pipelines med innebygd sikkerhet
Hva er CI/CD?
Continuous Integration (CI) betyr at kodeendringer fra flere utviklere regelmessig integreres i et felles repository. Hver endring blir bygget og testet automatisk for å oppdage feil tidlig.
Continuous Delivery (CD) bygger videre på CI ved at de vellykkede testede endringene automatisk distribueres til et staging- eller produksjonsmiljø – gjerne med manuell bekreftelse for siste steg, eller helt automatisk i en continuous deployment løsning.
Dette gjør at applikasjoner raskt kan oppdateres og rulles ut med minimal nedetid og høy kvalitet.
CI/CD i DevSecOps
I en DevSecOps-strategi integreres sikkerhetstiltak direkte i CI/CD-pipelinen. Dette betyr at før kode rulles ut:
- Automatiske tester (unit-, integrasjons- og systemtester) verifiserer funksjonalitet.
- Sikkerhetsskanning (SAST – statisk kodeanalyse, DAST – dynamisk testing) oppdager sårbarheter tidlig.
- Container-scanning sikrer at Docker-images ikke inneholder kjente sårbarheter.
Ved å inkludere disse stegene i CI/CD-pipelinen, blir sikkerhet en naturlig del av utviklingsprosessen – noe som reduserer risiko og gir en robust produksjonsflyt.
Eksempel: GitHub Actions Pipeline
Nedenfor ser du et eksempel på en GitHub Actions workflow som:
- Checkout av koden
- Setter opp et Python-miljø
- Kjører tester med
pytest
- Skanner koden med
Bandit
(SAST) - Bygger et Docker-image
- Skanner Docker-image med
Trivy
name: CI Pipeline
on: [push, pull_request]
jobs:
build-test-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v3
with:
python-version: '3.9'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests with pytest
run: pytest
- name: Run SAST with Bandit
run: bandit -r .
- name: Build Docker image
run: docker build -t my-app:latest .
- name: Scan Docker image with Trivy
run: trivy image --exit-code 1 my-app:latest
I denne workflowen stopper pipelinen dersom enten Bandit eller Trivy oppdager kritiske sårbarheter. Dette sikrer at kun kode som oppfyller sikkerhetskravene, rulles ut.
Alternativ: Installere og bruke Jenkins
Jenkins er et populært verktøy for å automatisere bygg- og deploy-prosesser. Nedenfor er en steg-for-steg-guide for å installere Jenkins på Ubuntu:
-
Oppdater pakkelisten og installer OpenJDK:
sudo apt-get update && sudo apt-get install openjdk-11-jdk
-
Legg til Jenkins-repo-nøkkel:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
-
Legg til Jenkins-repositoriet:
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins
-
Start og aktiver Jenkins:
sudo systemctl enable jenkins sudo systemctl start jenkins
-
Åpne nettleseren og naviger til
http://<server-ip>:8080
for å fullføre konfigurasjonen.
Jenkins kan konfigureres for å integrere med Git, kjøre tester, utføre sikkerhetsskanninger, og deployere applikasjonen – alt som en del av en CI/CD pipeline.
CI/CD som en del av DevSecOps
CI/CD er den motoren som driver moderne utvikling. Når CI/CD er integrert med:
- Infrastructure as Code – infrastrukturen deployeres og konfigureres automatisk.
- Container-teknologi (Docker) – applikasjoner bygges som containere som rulles ut i et orkestrert miljø (f.eks. Kubernetes).
- Sikkerhetsskanning – automatiske tester og skanninger fanger opp sårbarheter tidlig.
Skaper CI/CD en sømløs og sikker arbeidsflyt som reduserer manuelle feil, forbedrer samarbeid og sikrer rask og stabil deploy av kode. Dette er kjernen i DevSecOps.