[PYTHON] Wenn Sie ein Programm erstellen, das die Überprüfungsumgebung für Pull-Anforderungen automatisch startet / beendet, wird die Überprüfung fortgesetzt.

Artikelübersicht

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.)

Web-App-Repository

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.

Hintergrund

Gemeinsame Entwicklungsherausforderungen

Bisher gab es die folgenden Probleme bei der zusätzlichen Entwicklung bestehender Webanwendungen (Dienste).

Einführung des GitHub-Flusses (Fluss, der den externen Teil bereichert)

Um solche Probleme zu lösen, haben wir die Operation mit dem folgenden Ablauf betrachtet.

スクリーンショット 2020-03-29 16.20.09.png

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.

Herausforderungen bei der Einführung des Flusses

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.

Kann es nicht von Docker gelöst werden?

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.

Was ich tatsächlich getan habe

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.

スクリーンショット 2020-03-22 23.25.50.png

Ergebnisse des tatsächlichen Betriebs

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.

So installieren (einrichten) Sie eine Web-App

Dies entspricht der Beschreibung in README.md. Fast fast Google Übersetzung.

Erstellen Sie eine ec2-Instanz

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 IAM-Richtlinien und Benutzer

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.

Git installieren

Installieren Sie git auf der gesamten Instanz. Hinweis: Wenn Sie Amazon Linux2 verwenden

$ sudo yum install git

Einrichten einer Anwendung auf einem Staging-Server

Legen Sie die Anwendung als Staging-Server fest.

Installieren Sie python3

Installieren Sie python3 auf der gesamten Instanz. Hinweis: Wenn Sie Amazon Linux2 verwenden

$ sudo yum install python3

Installieren Sie den MySQL-Client

Installieren Sie mysql-client auf der gesamten Instanz. Hinweis: Wenn Sie Amazon Linux2 verwenden

$ sudo yum install mysql

Führen Sie eine Datenbank wie MySQL aus oder installieren Sie sie

Führen Sie eine MySQL-ähnliche Datenbank aus oder installieren Sie sie.

Ein Klon von Pullre-Kun

Klone Purle-Kun.

install "requirements"

Installieren Sie die Anforderungen (Inhalt der Anforderungen.txt).

Führen Sie get_basic_token.py aus

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

Erstellen Sie eine app.ini-Datei. Das Beispiel ist app.ini.default. Stellen Sie es dann für die gesamte Instanz bereit.

Bearbeiten Sie die Crontab auf dem Controller-Server

Fügen Sie der Crontab von ** Controller Server ** die folgende Zeile hinzu.

* * * * * cd /home/ec2-user/pullre-kun; python3 update_pull.py

Bearbeiten Sie die Crontab des Staging-Servers

Fügen Sie die folgende Zeile zu crontabs auf ** Staging Server ** hinzu.

* * * * * cd /home/ec2-user/pullre-kun; python3 client.py

Führen Sie init.py aus

Führen Sie den folgenden Befehl auf dem ** Controller-Server ** aus.

$ cd ~/pullre-kun
$ python3 init.py

Führen Sie die Pullre-Kun-Anwendung aus

Führen Sie den folgenden Befehl auf dem ** Controller-Server ** aus.

$ cd ~/pullre-kun
$ nohup python3 app.py&

Registrieren Sie den Server

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.

Benutzer registrieren

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.

Über andere technische Erklärungen

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

Wenn Sie ein Programm erstellen, das die Überprüfungsumgebung für Pull-Anforderungen automatisch startet / beendet, wird die Überprüfung fortgesetzt.
Programm zur Suche nach demselben Bild
[Django] Was tun, wenn das zu erstellende Modell viele Felder enthält?
[Ev3dev] Erstellen Sie ein Programm, das das LCD (Bildschirm) mit Python erfasst
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet