So erstellen Sie automatisch eine Subdomain für jede Pull-Anforderung

9

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

Abbood
quelle
1
Wie stellen Sie Ihre Software derzeit bereit? Welche CI- oder CD-Tools verwenden Sie? Wer ist Ihr DNS-Anbieter?
user2640621
Ja. Es gibt viele Möglichkeiten, diese Katze zu häuten - einschließlich, aber nicht beschränkt auf das Aktualisieren einer Hosts-Datei, aber wir müssten mehr über Ihre Umgebung wissen.
James Shewey
Antwort aktualisiert @ user2640621
Abbood

Antworten:

3

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?

dom_hutton
quelle
Ihre Antwort enthält viel Saft. Kannst du es ein bisschen aufschlüsseln? Zum Beispiel in den verschiedenen Abschnitten, die Sie erwähnt haben. Können Sie mir jeweils etwas geben, wenn sie es sind?
Abbood
Gibt es eine Beziehung zwischen dem Benutzer, der diese Antwort gepostet hat , und diesem Benutzer ? Ich wette, sie stammen vom selben "Benutzer" ... Wenn ja, lassen Sie bitte beide Konten zusammenführen ...
Pierre.Vriens
1

Dieses Setup funktionierte perfekt für mich mit aws code deploy:

Geben Sie hier die Bildbeschreibung ein

Abbood
quelle