Das Konfigurieren und Verwalten von Umgebungen ist ein zentraler Bestandteil des CI/CD-Prozesses in GitLab. Umgebungen wie Entwicklung, Staging und Produktion ermöglichen es, Code schrittweise bereitzustellen und dabei sicherzustellen, dass er gründlich getestet und überprüft wird, bevor er für Endbenutzer bereitgestellt wird. In diesem Artikel werden die wichtigsten Konzepte und Best Practices zur Verwaltung von Umgebungen, dynamischen Umgebungen und Review Apps in GitLab CI/CD vorgestellt.
Umgebungen sind spezifische Konfigurationen, in denen Anwendungen bereitgestellt oder getestet werden. Die häufigsten Umgebungen sind:
GitLab CI/CD erlaubt es, Jobs für verschiedene Umgebungen zu definieren, um so sicherzustellen, dass der Code die notwendigen Phasen der Entwicklung und des Tests durchläuft, bevor er in die Produktion gelangt.
.gitlab-ci.yml
Umgebungen werden in der .gitlab-ci.yml
-Datei über den
Abschnitt environment
definiert. Ein Job, der in einer
bestimmten Umgebung ausgeführt wird, kann folgendermaßen konfiguriert
werden:
stages:
- build
- test
- deploy
deploy-to-production:
stage: deploy
script:
- echo "Deploying to production environment"
environment:
name: production
url: https://production.example.com
In diesem Beispiel wird der Job deploy-to-production
in
der Produktionsumgebung ausgeführt. Die URL der Produktionsumgebung wird
ebenfalls definiert und ist in der GitLab-Benutzeroberfläche
sichtbar.
GitLab CI/CD unterstützt sowohl automatisierte als auch manuelle Deployments. Dies bietet Flexibilität bei der Verwaltung von Codebereitstellungen, je nachdem, ob ein sofortiges oder kontrolliertes Deployment gewünscht ist.
Automatisierte Deployments erfolgen, sobald bestimmte Bedingungen erfüllt sind, wie etwa das erfolgreiche Bestehen von Tests.
deploy-staging:
stage: deploy
script:
- echo "Deploying to staging"
environment:
name: staging
when: on_success
In diesem Beispiel wird das Deployment automatisch durchgeführt, wenn die vorhergehenden Phasen erfolgreich waren.
Manuelle Deployments erfordern eine explizite Freigabe durch einen Benutzer, was besonders in Produktionsumgebungen wichtig ist, um zusätzliche Kontrolle zu gewährleisten.
deploy-production:
stage: deploy
script:
- echo "Deploying to production"
environment:
name: production
when: manual
Der Job deploy-production
wird nur dann ausgeführt, wenn
er manuell ausgelöst wird. Dies ist nützlich für Produktionsumgebungen,
in denen eine zusätzliche Kontrolle über die Freigabe erforderlich
ist.
Dynamische Umgebungen sind temporäre Umgebungen, die automatisch basierend auf bestimmten Ereignissen wie Branches oder Merge Requests erstellt werden. Diese Umgebungen sind besonders nützlich, um Änderungen in einer isolierten Umgebung zu testen, ohne die Hauptumgebung zu beeinflussen. Dynamische Umgebungen bieten Flexibilität und sind ideal für agile Entwicklungsteams, die schnellen Zugriff auf realistische Testumgebungen benötigen.
Merkmale dynamischer Umgebungen: - Isolierte Testumgebung: Jede dynamische Umgebung ist eine abgeschottete Umgebung, die nur für die spezifischen Änderungen gilt, die in einem Branch oder Merge Request enthalten sind. - Automatisierte Bereitstellung und Zerstörung: Dynamische Umgebungen werden automatisch erstellt, sobald ein Branch erstellt oder ein Merge Request geöffnet wird, und sie werden nach der Überprüfung oder dem Merge automatisch entfernt. - Automatische Benennung: GitLab kann den Namen dynamischer Umgebungen automatisch basierend auf Branch-Namen oder Merge Requests generieren.
Beispiel für die Definition einer dynamischen Umgebung:
deploy_review:
stage: deploy
script:
- ./deploy.sh
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_COMMIT_REF_SLUG.example.com
only:
- branches
- merge_requests
In diesem Beispiel wird für jede Änderung in einem Branch oder Merge Request eine eigene dynamische Umgebung erzeugt, die basierend auf dem Branch-Namen automatisch benannt wird. Die dynamische Umgebung ist über eine URL erreichbar, die ebenfalls dynamisch generiert wird.
Review Apps sind eine spezifische Implementierung dynamischer Umgebungen. Sie ermöglichen es, die Änderungen eines Merge Requests in einer separaten Umgebung zu überprüfen. Entwickler und Reviewer können den aktuellen Stand der Änderungen testen, bevor sie in die Haupt- oder Produktionsumgebung integriert werden.
Vorteile von Review Apps: - Schnelleres Feedback: Änderungen können in einer realistischen Umgebung überprüft werden, was schnelleres und präziseres Feedback ermöglicht. - Automatisierte Bereitstellung: Review Apps werden automatisch erstellt, sobald ein Merge Request erstellt oder aktualisiert wird. - Verbesserte Zusammenarbeit: Alle Beteiligten können die Review App nutzen, um Änderungen zu testen und Feedback zu geben, bevor sie final gemergt werden.
Beispiel für die Einrichtung einer Review App:
review_app:
stage: deploy
script:
- ./deploy_review_app.sh
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://review.$CI_COMMIT_REF_SLUG.example.com
only:
- merge_requests
In diesem Beispiel wird eine Review App erstellt, die auf einem Merge Request basiert. Die App ist über eine dynamisch generierte URL erreichbar und bietet eine Umgebung, in der die Änderungen des Merge Requests überprüft werden können.
Mit dem rules
-Schlüsselwort kann gesteuert werden, wann
bestimmte Jobs in bestimmten Umgebungen ausgeführt werden. Dies
ermöglicht es, Jobs beispielsweise nur für spezielle Branches oder unter
bestimmten Bedingungen laufen zu lassen.
deploy-production:
stage: deploy
script:
- echo "Deploying to production"
environment:
name: production
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
In diesem Beispiel wird der deploy-production
Job nur
ausgeführt, wenn der aktuelle Branch der main
-Branch
ist.
GitLab bietet die Möglichkeit, URLs für jede Umgebung zu definieren, sodass Benutzer direkt auf die bereitgestellten Anwendungen zugreifen können. Dies ist besonders nützlich, um sicherzustellen, dass Reviewer oder Tester auf die entsprechenden Umgebungen zugreifen können.
staging:
stage: deploy
script:
- ./deploy.sh staging
environment:
name: staging
url: https://staging.example.com
Dynamische Umgebungen und Review Apps eignen sich besonders für Teams, die schnellen Zugriff auf isolierte Testumgebungen benötigen, um Änderungen effizient zu testen. Best Practices umfassen:
Weitere Informationen zur Verwaltung von Umgebungen in GitLab finden sich in der offiziellen Dokumentation.