Hintergrund
Ich habe ein Team von untechnischen QAs, die für jede Pull-Anfrage (PR), die von meinem Backend-Team erstellt wird, Tests auf iOS / Android-Apps durchführen müssen.
Frage
Folgendes möchte ich tun: Jedes Mal, wenn ein Backend-Techniker eine PR auf Bitbucket erstellt, möchte ich, dass ein Skript den Code dieses PR-Git-Zweigs automatisch in einer Subdomain unseres Entwicklungsservers bereitstellt, die dem erstellten JIRA-Problem entspricht.
Angenommen, das Jira-Problem, dass die PR-Adressen BAC-421 sind, und sobald der Techniker eine PR erstellt, stellt das Skript den in AWS EC2 erstellten Code bereit, damit die Qualitätssicherung ihre Apps auf www.bac421.mydevdomain verweisen kann. com
Was ist der beste Weg, dies zu tun? Ich bin ein technischer Entwickler.
Update - Umgebungsspezifikationen
Hier ist eine Aufschlüsselung unserer Umgebung - das Backend verwendet Laravel 5.3 - es wird auf AWS EC2 bereitgestellt - wir verwenden Forge für die automatische Bereitstellung (nichts Besonderes. Wir führen nur dieses Skript aus:
cd /home/forge/default
git fetch --tags
git pull origin master
git describe
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
echo "" | sudo -S service php7.1-fpm reload
if [ -f artisan ]
then
php artisan migrate --force
php artisan config:cache
php artisan queue:restart
fi
dass wir ausführen, sobald wir dev mit dem Master-Zweig zusammenführen) - außerdem verwenden wir keine CI / CD-Tools, obwohl ich offen für Empfehlungen bin - DNS-Anbieter ist GoDaddy - unser Anwendungsserver ist nginx - unsere Datenbank befindet sich in einem separate RDS-Instanz
quelle
Antworten:
Wir machen das bei der Arbeit.
Wir haben einen kleinen Server, nennen wir ihn den Empfänger, er ist das Ziel der GitHub-Webhook-Ereignisse . Es wird eine kleine Anwendung ausgeführt, die die Nutzdaten analysiert und eine Logik für das weitere Vorgehen enthält, z. B. das Erstellen eines neuen Servers auf dem Infrastrukturanbieter, das Aktualisieren des Lastenausgleichs, das Bereitstellen auf einem vorhandenen Server, das Zerstören des Servers usw. Dies kann eine herkömmliche Webanwendung sein eine API oder eine serverlose Anwendung einrichten, ganz nach Ihren Wünschen.
Der Empfänger ist relativ einfach zu handhaben. Die anderen erforderlichen unterstützenden Systeme sind ein Ansatz für die Konfigurationsverwaltung / -bereitstellung (wie verfügt der Server über die zum Ausführen der Anwendung erforderlichen Pakete) und die Verwaltung von Geheimnissen (wie erhält der Server Zugriff? vertrauliche Informationen) und Routing (wie werden die Subdomains aktualisiert und an den richtigen Server weitergeleitet).
Es könnte sich lohnen, ein AMI mit den erforderlichen konfigurierten Diensten vorzubereiten , eine CloudFormation- Vorlage mit der Logik zur Bereitstellung der Infrastruktur und CodeDeploy könnten Bereitstellungen für Sie übernehmen.
Konfigurationsmanagement
Dies liegt ganz bei Ihnen und Ihrem Team. Sie können eine Vielzahl von Tools verwenden oder sich einfach auf Shell-Skripte verlassen. An welchem Punkt in den Servern Lifecycle Sie gelten die Änderungen ist es, was in der AMI - Design diskutiert ist Artikel I verbunden.
Secrets Management
Dies ist ein herausforderndes Thema, das mit den vorliegenden Informationen behandelt werden muss. Der Kürze halber überlasse ich dies Ihnen und Ihrem Team.
Routing
Es gibt einige Möglichkeiten, wie Sie mit dem Routing umgehen können. Der von AWS angebotene Application Load Balancer (nicht zu verwechseln mit dem ELB / NLB) unterstützt das hostbasierte Routing . Alternativ können Sie einen Reverse-Proxy wie NGINX oder HAProxy verwenden. Wenn Sie eine neue Umgebung bereitstellen, müssen Sie dieses Routing (idealerweise automatisch) aktualisieren, unabhängig davon, welchen Ansatz Sie wählen.
Vergessen Sie nicht zu überlegen, wie Sie mit der Datenbank- / Persistenzschicht und den Bereitstellungen ohne Ausfallzeiten umgehen. Die Frage, die bei der Persistenzschicht gestellt werden muss, ist, ob das Team eine Datenbank gemeinsam nutzt und wie diese mit Dingen wie Migrationen interagiert. In Bezug auf Bereitstellungen ohne Ausfallzeiten sollte CodeDeploy dies für Sie gut handhaben. Außerdem haben Sie eine einzelne mobile Anwendung erwähnt, die auf verschiedene Umgebungen verweist. Wie werden Sie diese Anwendungen auf die Umgebungen verweisen?
quelle
Dieses Setup funktionierte perfekt für mich mit aws code deploy:
quelle