Continuous Integration och Deployment

Continuous Integration och Deployment

(CI/CD)

Man and CI CD

CI/CD är en process för att automatisera bygg, test och leverans av mjukvara. Det hjälper till att snabbt och pålitligt leverera nya funktioner. Här går vi igenom hur du ställer in en CI/CD-pipeline med GitHub Actions för att automatisera testning och deployment av en enkel Python-applikation.

Vad är CI/CD?

  • Continuous Integration (CI): Automatiskt testa och bygga kod vid varje commit för att identifiera buggar tidigt.
  • Continuous Deployment (CD): Automatisera leveransen av nya versioner till produktion.
KomponentBeskrivning
CIAutomatiserar testning och byggprocesser.
CDDistribuerar byggda applikationer till användarna.

Steg 1: Förbered din applikation

Filstruktur

En enkel Python-applikation kan se ut så här:

ci_cd_app/
├── app.py # Applikationens huvudfil
├── test_app.py # Testfall
├── requirements.txt # Lista över beroenden
└── .github/
└── workflows/
└── ci_cd.yml # GitHub Actions konfiguration

Flask-app: app.py

from flask import Flaskapp = Flask(__name__)@app.route('/')def home(): return "Hello, CI/CD!"if __name__ == '__main__': app.run()Code language: JavaScript (javascript)

Steg 2: Testa applikationen lokalt

Testfall: test_app.py

import unittestfrom app import appclass TestApp(unittest.TestCase): def test_home(self): tester = app.test_client() response = tester.get('/') self.assertEqual(response.status_code, 200) self.assertEqual(response.data.decode('utf-8'), "Hello, CI/CD!")if __name__ == '__main__': unittest.main()

Kör testet:

python -m unittest test_app.pyCode language: CSS (css)

Output:

plaintext

———————————————————————-
Ran 1 test in 0.001s

OK

Steg 3: Skapa en GitHub Actions-konfiguration

Skapa filen .github/workflows/ci_cd.yml:

yaml

name: CI/CD Pipeline

on:
push:
branches:
– main
pull_request:
branches:
– main

jobs:
build-and-test:
runs-on: ubuntu-latest

steps:
– name: Checkout code
uses: actions/checkout@v3

– name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ‘3.9’

– name: Install dependencies
run: |
python -m pip install –upgrade pip
pip install -r requirements.txt

– name: Run tests
run: |
python -m unittest discover

deploy:
runs-on: ubuntu-latest
needs: build-and-test
steps:
– name: Deploy to server
env:
SERVER: ${{ secrets.SERVER }}
USER: ${{ secrets.USER }}
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
run: |
ssh -i $PRIVATE_KEY $USER@$SERVER “cd /path/to/app && git pull && systemctl restart app”

Steg 4: Lägg till requirements.txt

Lista dina beroenden:

flask
unittest

Steg 5: Konfigurera GitHub Secrets

  1. Gå till ditt GitHub-repository.
  2. Navigera till Settings > Secrets and variables > Actions.
  3. Lägg till följande hemligheter:
    • SERVER: Din servers IP eller domän.
    • USER: Användarnamn för servern.
    • PRIVATE_KEY: Din SSH-nyckel.

Steg 6: Push och verifiera CI/CD

Lägg till och committa dina ändringar:

sh

git add .
git commit -m "Set up CI/CD pipeline"Code language: JavaScript (javascript)
git push origin main

Navigera till Actions-fliken på GitHub för att se din pipeline köras.

Sammanfattande kod

Flask-app: app.py

from flask import Flaskapp = Flask(__name__)@app.route('/')def home(): return "Hello, CI/CD!"if __name__ == '__main__': app.run()Code language: JavaScript (javascript)

Testfall: test_app.py

import unittestfrom app import appclass TestApp(unittest.TestCase): def test_home(self): tester = app.test_client() response = tester.get('/') self.assertEqual(response.status_code, 200) self.assertEqual(response.data.decode('utf-8'), "Hello, CI/CD!")if __name__ == '__main__': unittest.main()

GitHub Actions-konfiguration: .github/workflows/ci_cd.yml

yaml

name: CI/CD Pipeline

on:
push:
branches:
– main
pull_request:
branches:
– main

jobs:
build-and-test:
runs-on: ubuntu-latest

steps:
– name: Checkout code
uses: actions/checkout@v3

– name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ‘3.9’

– name: Install dependencies
run: |
python -m pip install –upgrade pip
pip install -r requirements.txt

– name: Run tests
run: |
python -m unittest discover

deploy:
runs-on: ubuntu-latest
needs: build-and-test
steps:
– name: Deploy to server
env:
SERVER: ${{ secrets.SERVER }}
USER: ${{ secrets.USER }}
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
run: |
ssh -i $PRIVATE_KEY $USER@$SERVER “cd /path/to/app && git pull && systemctl restart app”

Tips och vanliga fallgropar

Tips

  • Håll testfall enkla och omfattande.
  • Använd GitHub Secrets för att hantera känsliga data.
  • Testa pipelines lokalt innan du deployar.

Vanliga fallgropar

  • Fel i test: Kontrollera att alla testfall körs korrekt innan push.
  • Beroenden saknas: Säkerställ att alla beroenden finns i requirements.txt.
  • Felaktig serverkonfiguration: Verifiera att servern har korrekt SSH-åtkomst och rättigheter.

Andra säkerhetsåtgärder

  • HTTPS: Använd Flask-SSLify eller annan metod för att tvinga HTTPS.
  • Säkerhetsuppdateringar: Håll dina Python-paket uppdaterade för att undvika sårbarheter.
  • Felhantering: Implementera en central felhanterare för att fånga upp och logga alla oväntade fel.

Sammanfattning

Den här guiden visar hur du kan ställa in en CI/CD-pipeline för en Flask-app med GitHub Actions. Pipelines automatiserar testning och deployment, vilket sparar tid och minskar risken för fel. Börja smått och bygg gradvis mer robusta pipelines för att hantera komplexare projekt.

Leave a Reply

Your email address will not be published. Required fields are marked *