CircleCI ist eine Plattform für kontinuierliche Integration und Bereitstellung (CI/CD). Gegründet im Jahr 2011 und bewertet mit 1,7 Milliarden Dollar im Jahr 2021, ist diese Lösung heute eine der beliebtesten CI/CD-Plattformen weltweit.
Mit CircleCI können Entwickler ihren Code schnell und zuverlässig erstellen, testen und bereitstellen. Heute bedient das Unternehmen Tausende von Organisationen weltweit, von Startups bis hin zu großen Unternehmen, indem es ihnen Flexibilität und Leistung bietet, die für alle Arten von Projekten geeignet sind.
Aber was ist eigentlich CI/CD?
CI/CD steht für „Continuous Integration / Continuous Delivery“ (kontinuierliche Integration / kontinuierliche Bereitstellung) und ist eine Entwicklungspraxis, die darauf abzielt, die Phasen des Lebenszyklus einer Anwendung zu automatisieren. Sie ermöglicht es, menschliche Fehler zu reduzieren, die Lieferzeiten zu beschleunigen und die Anwendungsqualität zu verbessern.
- Die kontinuierliche Integration (CI) bedeutet, dass der von verschiedenen Teammitgliedern geschriebene Code regelmäßig in ein zentrales Repository integriert wird. Jede Änderung wird automatisch getestet, um sicherzustellen, dass keine Fehler oder Inkompatibilitäten entstehen.
- Die kontinuierliche Bereitstellung (CD) automatisiert die Lieferung des validierten Codes ohne manuellen Eingriff.
Hauptfunktionen
CircleCI bietet eine breite Palette von Tools und Integrationen, die entwickelt wurden, um den Entwicklungsprozess zu automatisieren, zu optimieren und zu sichern und dabei eine effiziente kontinuierliche Lieferung zu gewährleisten.
Flexible Workflows
Es ermöglicht das Orchestrieren komplexer Pipelines mit bedingten Abhängigkeiten. Dies optimiert Tests und Bereitstellungen, was Zeit spart.
Parallelisierung von Builds
Teilt Aufgaben auf, um Tests und Builds zu beschleunigen und so die Verarbeitungszeit zu verkürzen.
Intelligentes Caching
Abhängigkeiten werden zwischengespeichert, um ihren erneuten Download zu vermeiden.
Sicherheit und Konformität
Verschlüsselung von Daten, feinkörnige Berechtigungen und Pipeline-Audits.
Kontinuierliche Tests und Berichterstattung
Integration mit Testtools und Erstellung detaillierter Berichte.
Überwachung und Einsichten
Analytische Dashboards zur Überwachung der Pipeline-Leistung.
Einrichtung von CircleCI
Die Erstkonfiguration ist einfach und schnell und kompatibel mit GitHub, GitLab oder Bitbucket.
1. Vor der Installation
- Zuallererst ist es notwendig, ein Konto auf einer kompatiblen Code-Verwaltungsplattform zu haben (GitHub, GitLab oder Bitbucket). Ebenso ein Konto bei CircleCI, das mit dem von dir verwendeten Repository verbunden ist.
- Es ist notwendig, eine Konfigurationsdatei config.yml in einem .circleci-Ordner im Stammverzeichnis des Repositories zu haben.
2. Projektanmeldung
Achte darauf, die angeforderten Berechtigungen von der CircleCI-Website zu erteilen, damit es auf deine Repositories zugreifen kann. Um ein neues Projekt hinzuzufügen, klicke auf „Projekt einrichten“, wie im unten gezeigten Screenshot:
Wähle eine Integrationsmethode aus, in diesem Beispiel handelt es sich um „Fast“.
Eine Konfigurationsdatei wird automatisch erstellt.
3. Die Konfigurationsdatei
In unserem Beispiel sieht die erstellte Konfigurationsdatei folgendermaßen aus:
version: 2.1 orbs: python: circleci/python@2.1.1 jobs: build-and-test: docker: - image: cimg/python:3.12 steps: - checkout - python/install-packages: pkg-manager: pip - run: name: Run tests command: pytest workflows: sample: jobs: - build-and-test
- Die erste Zeile betrifft die von CircleCI verwendete Schema-Version.
- Die orbs sind wiederverwendbare Pakete, die vorkonfigurierte CircleCI-Konfigurationen enthalten. Sie ermöglichen die schnelle Integration spezifischer Tools oder Sprachen, ohne die Konfiguration neu schreiben zu müssen.
- Die jobs sind Arbeitseinheiten. Sie enthalten eine Reihe von steps, die in einer spezifischen Umgebung ausgeführt werden. In diesem Fall beinhaltet der Job build-and-test ein Element docker, das die Ausführungsumgebung des Jobs definiert (hier handelt es sich um ein von CircleCI bereitgestelltes Docker-Image) und ein step-Element, das weiter unten beschrieben wird.
- Die Schritte (steps) definieren die auszuführenden Aktionen im Rahmen eines Jobs:
- checkout: Ruft den Quellcode aus dem Repository ab, um ihn in der CircleCI-Umgebung verfügbar zu machen.
- python/install-packages: Dieser Befehl installiert die erforderlichen Abhängigkeiten mit dem Paketmanager pip.
- run: Führt einen Befehl innerhalb des Jobs aus. Pytest wird hier verwendet, um Unit-Tests durchzuführen.
- Schließlich sind die workflows ein Satz von Jobs, die in einer definierten Reihenfolge ausgeführt werden:
- sample: Name des Workflows
- jobs: Liste der im Workflow auszuführenden Jobs
Gegebenenfalls können wir die folgenden Änderungen vornehmen:
- Um die erneute Installation der Pakete bei jeder Ausführung zu vermeiden (und somit die Build-Zeit zu verkürzen), kann ein Cache-Management implementiert werden:
- restore_cache:
keys:
- v1-dependencies-{{ checksum "requirements.txt" }}
- python/install-packages:
pkg-manager: pip
- save_cache:
key: v1-dependencies-{{ checksum "requirements.txt" }}
paths:
- ~/.cache/pip
So wird CircleCI versuchen, einen vorhandenen Cache basierend auf dem Hash der Datei requirements.txt wiederherzustellen. Wenn dieser verfügbar ist, wird er abgerufen, andernfalls wird er über pip installiert.
- Wenn die Anwendung in die Produktion geht, können wir nach erfolgreichem Test eine automatisierte Bereitstellung hinzufügen:
workflows:
version: 2
deploy:
jobs:
- build-and-test
- deploy:
requires:
- build-and-test
filters:
branches:
only: main
4. Cloud-Integration
aws-cli: circleci/aws-cli@4.1.1
Sowie ein job, der wie im folgenden Beispiel aussieht:
deploy-to-aws:
docker:
- image: cimg/python:3.12
steps:
- attach_workspace:
at: /home/circleci/project
- aws-cli/setup
- run:
name: Configure AWS credentials
command: |
aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set default.region $AWS_DEFAULT_REGION
- run:
name: Deploy application to S3
command: |
aws s3 cp /home/circleci/project/ s3://$AWS_S3_BUCKET_NAME --recursive
- run:
name: Clear AWS credentials (for security)
command: rm -f ~/.aws/credentials
Die vorhandenen Umgebungsvariablen (erkennbar am Zeichen $) müssen zuvor in den CircleCI-Einstellungen erstellt werden.
Best Practices für CI/CD
CircleCI empfiehlt mehrere Best Practices zur Optimierung von CI/CD-Pipelines.
Der CI/CD-Prozess sollte als essentiell für jedes Entwicklungsteam angesehen werden.
Manuelle Prozesse vermeiden, die die Entwicklung verlangsamen.
Konfigurationen wiederverwenden und Cache-Strategien implementieren.
Die Konfigurationen nicht duplizieren und bei jedem Build systematisch die Abhängigkeiten herunterladen.
Die CircleCI-Orbs verwenden, um wiederkehrende Aufgaben zu automatisieren.
Redundante Konfigurationen nicht manuell für jedes Projekt schreiben.
Die Pipelines sichern, indem private Umgebungsvariablen, mehrere Kontexte und administrative Kontrollen verwendet werden.
Sensible Informationen nicht in den Projektkonfigurationsdateien speichern.
Eine hohe Testabdeckung aufrechterhalten, indem Partner-Tools integriert werden (zum Beispiel Codecov, Cypress oder SonarCloud).
Code nicht ohne Tests oder ohne Überprüfung der Testabdeckung bereitstellen.
Automatisierte Benachrichtigungen mit Slack verwenden, um den Status der Pipelines zu verfolgen und schnell auf Fehler zu reagieren.
Keine Benachrichtigungen einrichten, was zu Verzögerungen bei der Erkennung von Problemen führen kann.
Beliebte Orbs wie Node, AWS-CLI und Python verwenden, um die Konfigurationen und die cloudbasierte Bereitstellung zu erleichtern.
Jedes Tool nicht manuell konfigurieren, um Fehler und Inkonsistenzen zu vermeiden.
Die Metriken der Pipelines analysieren, um Engpässe zu identifizieren und die Effizienz der Workflows zu verbessern.
Die Leistung der Pipelines überwachen, um die Bereitstellungen nicht zu verlangsamen.
Fazit
CircleCI ist eine leistungsstarke und flexible Lösung, die die Automatisierung und Optimierung von CI/CD-Prozessen ermöglicht.