Ich wollte die Entwicklung mit GitHub Flow üben, dh die Entwicklung mit einer einfachen Pull-Request-Operation, die Verkäufe umfasst, und habe eine solche Umgebung erstellt. Zu dieser Zeit habe ich eine Webanwendung erstellt und veröffentlicht, die einige fehlende Funktionen ergänzt, sodass ich verschiedene Geschichten darüber schreiben werde. (Es geht nicht darum, ob Sie diese Web-App tatsächlich verwenden können, sondern darum, die Entwicklung mit einem ähnlichen Ablauf zu verbessern.)
https://github.com/uniaim-event-team/pullre-kun
Die Verwendung und Funktionen dieser Web-App sind vorerst in README.md beschrieben, aber in diesem Artikel werde ich sie der Reihe nach schreiben, einschließlich einer kleinen Hintergrundgeschichte. Wir suchen Anerkennung für Issue-Support und andere zusätzliche Entwicklungen.
Bisher gab es die folgenden Probleme bei der zusätzlichen Entwicklung bestehender Webanwendungen (Dienste).
Um solche Probleme zu lösen, haben wir die Operation mit dem folgenden Ablauf betrachtet.
Im Vergleich zu einem typischen ähnlichen Workflow ist etwas stärker, dass der Ticketregistrant sogar ein Testszenario schreibt. Es gab viele Zweifel daran, aber ich dachte, es wäre möglich, wenn es in den folgenden Punkten technisch möglich oder unmöglich wäre, also entschied ich mich, es mit Zuversicht anzunehmen.
――Bei egal wie viel ein Verkäufer ist, wenn er es Kunden zur Verfügung stellt, sollte auf Anfrage die minimale Bedienungserklärung des Verwaltungsbildschirms möglich sein. ――Es ist natürlicher zu bestätigen, dass die Endbenutzer und andere Benutzer des Systems es ohne Kenntnis der Technologie zufriedenstellend verwenden können. ――Bei der Auflistung der zu diesem Zeitpunkt zu bestätigenden Artikel sollte es möglich sein, ohne technisches Wissen zu simulieren, was tatsächlich vor dem Kunden getan wird, auch wenn die Verkaufsseite keinen Standpunkt wie die Abdeckung hat. ..
Natürlich denke ich jedoch, dass es für die Person, die die Anforderungen / Anforderungen gestellt hat, unmöglich ist, einen umfassenden Test zu schreiben. Wenn es also einen notwendigen gibt, wird die Entwicklungsseite ihn erhöhen. Es ist schwierig zu identifizieren, von welchen Bedingungen das System abhängt, wann die Anforderungen / Anforderungen ausgestellt werden, und es ist schwierig, einen Test zu schreiben, der sie im technischen Sinne abdeckt. Ich entschied, dass es schwierig war.
Bei der Einführung dieses Ablaufs gab es einige technische Probleme, die jedoch in den folgenden Abschnitten allgemein zusammengefasst wurden.
――In welcher Umgebung überprüft der Ticketregistrant?
Bei einer Änderung, bei der ein Element in eine Tabelle eingefügt wird, muss beispielsweise auf das in der Pull-Anforderung definierte Schema verwiesen werden. Es gibt eine Möglichkeit zum Testen in der Entwicklerumgebung. Da die Entwicklungsarbeit des Entwicklers jedoch fortgesetzt wird, wird häufig davon ausgegangen, dass sie während des Tests nicht verwendet werden kann. Es ist auch möglich, dass es aufgrund des Einflusses einer anderen Reparatur, die nicht gut für einander ist, nicht richtig funktioniert. Erstens gibt es auch das Problem, dass das Testen mit einer Quelle, die einige andere Änderungen enthält, kein Test für reinen Pull-Anforderungsinhalt ist.
Wenn es dann darum geht, manuell eine Verifizierungsumgebung dafür zu erstellen, ist es ein wenig schwierig, jedes Mal manuell eine Verifizierungsumgebung dafür zu erstellen, wenn eine Person täglich viele Pull-Anforderungen stellt.
Es gibt so etwas wie netlify, wenn die Änderung nur mit JS durchgeführt werden kann, aber es gibt viele Probleme bei der Vorbereitung des Schemas und des Datasets, und im Fall des Zielprojekts ist die Serverseite Python, sodass sie für eine Weile nicht angewendet werden konnte.
Im Prinzip kann es mit Docker gelöst werden, und es gab eine Geschichte, in der es vor mindestens drei Jahren darum ging, dasselbe mit Docker zu tun! Mechanismus, der die mit der Festschreibungs-ID bereitgestellte Umgebung automatisch erstellt, wenn eine Pull-Anforderung ausgegeben wird, um die Überprüfung zum Zeitpunkt der Überprüfung / vor dem Zusammenführen zu vereinfachen
Ursprünglich habe ich einen automatischen Test geschrieben und er hat mit CircleCI funktioniert, daher funktioniert er bis zu einem gewissen Grad mit Docker, aber einige Verarbeitungen funktionieren nicht gut, wenn nur Docker erstellt wird (insbesondere ist HTML PDF mit wkhtml). Während der Konvertierung in konnte ich das Teil mit xvfb nicht sofort in die Mitte des Dockers stellen ... es läuft nicht einmal in CircleCI), ich mache einen Docker dafür Es ist nervig und ich bin hier.
Die Richtlinie lautet wie folgt.
--Erstellen Sie im Voraus viele Überprüfungsinstanzen, stellen Sie den Load Balancer und den DNS ein, bereiten Sie ihn für den normalen Zugriff vor, wenn der Serverprozess gestartet wird, und deaktivieren Sie dann die Instanz. --DB beschließt, Aurora ** einschließlich der Entwicklungsumgebung ** freizugeben und diese Aurora zu erstellen
Der Teil, der die Pull-Anforderung ohne die Vorarbeit verarbeitet, wird von der Webanwendung unterstützt.
Das Systemkonfigurationsabbild lautet wie folgt. Die Controller-Instanz führt die Web-App aus, und die Staging-Instanzen führen regelmäßig einen Stapelprozess aus, um den Serverprozess zu starten.
Es ist erst ein paar Wochen her, seit ich den Betrieb aufgenommen habe, und es gibt einige Teile, die sich aufgrund des Einflusses der neuen Korona vom Normalzustand unterscheiden, aber vorerst dachte ich, dass der Test auf dem tatsächlichen Bildschirm erheblich einfacher wurde. Als Entwicklungsprüfer ist es für mich sehr einfach, zu überprüfen, was ich zum Auschecken in meiner Umgebung verwendet habe, das Schema zu korrigieren und zu testen, während ich etwas tue, ohne meine Umgebung zu berühren. Ich denke auch, dass es ein großer Schritt nach vorne ist, es einfacher zu machen, Nicht-Entwickler vor der Veröffentlichung einzubeziehen.
Dies entspricht der Beschreibung in README.md. Fast fast Google Übersetzung.
Erstellen Sie eine EC2-Instanz. Und erlauben Sie Port 5250 einem von ihnen. Eine wird als "Controller-Instanz" bezeichnet. Andere werden als "Staging-Instanzen" bezeichnet.
Erstellen Sie eine IAM-Richtlinie, die die folgenden Aktionen zulässt:
「ec2:DescribeInstances」 「ec2:StartInstances」 「ec2:StopInstances」
Die Richtlinienressource ist die von Ihnen erstellte Instanz. (Hinweis: "Instanzen beschreiben" gilt für alle Ressourcen.) Fügen Sie dann die Richtlinie dem Benutzer / der Rolle hinzu und speichern Sie den Zugriff und die geheimen Schlüssel.
Installieren Sie git auf der gesamten Instanz. Hinweis: Wenn Sie Amazon Linux2 verwenden
$ sudo yum install git
Legen Sie die Anwendung als Staging-Server fest.
Installieren Sie python3 auf der gesamten Instanz. Hinweis: Wenn Sie Amazon Linux2 verwenden
$ sudo yum install python3
Installieren Sie mysql-client auf der gesamten Instanz. Hinweis: Wenn Sie Amazon Linux2 verwenden
$ sudo yum install mysql
Führen Sie eine MySQL-ähnliche Datenbank aus oder installieren Sie sie.
Klone Purle-Kun.
install "requirements"
Installieren Sie die Anforderungen (Inhalt der Anforderungen.txt).
Die Controller-Instanz verfügt über eine Basisauthentifizierung. Sie müssen ein Kennwort-Token (Hash) erstellen und in app.ini speichern.
Erstellen Sie eine app.ini-Datei. Das Beispiel ist app.ini.default. Stellen Sie es dann für die gesamte Instanz bereit.
Fügen Sie der Crontab von ** Controller Server ** die folgende Zeile hinzu.
* * * * * cd /home/ec2-user/pullre-kun; python3 update_pull.py
Fügen Sie die folgende Zeile zu crontabs auf ** Staging Server ** hinzu.
* * * * * cd /home/ec2-user/pullre-kun; python3 client.py
Führen Sie den folgenden Befehl auf dem ** Controller-Server ** aus.
$ cd ~/pullre-kun
$ python3 init.py
Führen Sie den folgenden Befehl auf dem ** Controller-Server ** aus.
$ cd ~/pullre-kun
$ nohup python3 app.py&
Besuchen Sie "https: // <Ihre-Domäne> / Server / Liste", um den gesamten Server anzuzeigen. Klicken Sie dann auf die Schaltfläche Staging-Server registrieren. Gehen Sie dann zu "https: // <Ihre-Domäne> / master / server" und aktualisieren Sie das Datenbankschema für jeden Datensatz.
Gehen Sie zu "https: // <Ihre-Domäne> / master / git_hub_users" und registrieren Sie Ihre Benutzer. "Login" ist das Github-Benutzer-Login und db_schema ist das ursprüngliche Schema des Klons.
Mit dem obigen Verfahren wird die Überprüfungsumgebung automatisch gestartet, wenn eine Pull-Anforderung vorliegt.
Insgesamt handelt es sich um Flask + SQLAlchemy, es ist jedoch so konfiguriert, dass CherryPy als Server verwendet wird. Wenn es viel Hoffnung gibt, kann ich bald einen Kommentar schreiben. (Die Verwendung von Allzweck-WTForm, das dem Modell von SQL Alchemy entspricht, ist etwas Besonderes.) (Bitte kommentieren Sie diesen Artikel oder erstellen Sie ein Problem auf GitHub und fügen Sie +1 hinzu.)
Recommended Posts