2017-05-26 1 views
0

Zunächst einmal bin ich neu in CI und GitLab, also kann ich etwas sagen, das keinen Sinn ergibt. Wenn es passiert, entschuldige ich mich und bitte um weitere Informationen.Verwenden einer externen Datenbank beim Ausführen einer Pipeline in GitLab

Ich habe ein Projekt (Laravel), das auf GitLab gehostet wird und ich verwende ihre CI, um die Tests durchzuführen. Momentan verwenden meine Tests keine Datenbank und alles funktioniert gut.

Ich bin jetzt in der Situation, wo ich einige Tests mit Daten durchführen muss. Das Problem, mit dem ich konfrontiert bin, ist, dass ich drei Datenbanken habe: Eine ist die, die von meiner Anwendung verwaltet wird, und zwei sind ältere Datenbanken.

Die von der Anwendung verwaltet wird jedes Mal neu erstellt, wenn die Pipeline ausgeführt wird, es ist verfügbar (für die Tests), und ich verwende Fabriken für die Daten. Also, keine Probleme hier.

Die anderen beiden sind jedoch Legacy, wie ich bereits sagte, und ich habe keine Kontrolle über sie, außer in der Lage zu sein, die Daten zu lesen.

Mein Test, einige davon, benötigen Daten aus diesen Datenbanken, aber ich weiß nicht, wie ich die gitlab-ci YAML-Datei schreiben soll, um die Datenbanken auf einem anderen Server (dem UAT-Server) zu verwenden.

Ich hoffe, dass jemand helfen kann.

+0

Aber was genau ist das Problem? Sie zeigen Ihre Tests nur auf die Datenbank und sie verwendet sie. Geht es also eher darum, eine sichere Verbindung einzurichten?Vielleicht, wie Sie eine Verbindung zu einer Datenbank herstellen, die lokal in Ihrem lokalen Netzwerk ausgeführt wird? Wie werden die Daten aus älteren Datenbanken ausgegeben und in CI neu erstellt? –

+0

Um auf die Datenbanken zeigen zu können, müssen Benutzername und Passwort in der YAML-Datei enthalten sein, was mir aus Sicherheitsgründen nicht gefällt (sie wären klar). Ich würde es erwägen, wenn ich den Zugang irgendwie einschränken könnte (ich mache es bereits in der IP-Adresse für meine Website), aber ich kann mir keinen Weg vorstellen, um es für CI zu erreichen. Die Datenbanken jedes Mal neu zu erstellen scheint teuer zu sein und ich müsste den Speicherauszug irgendwo speichern, was ich aus Sicherheitsgründen nicht mag. – giuliot

+0

Die erste kann mit https://docs.gitlab.com/ee/ci/variables/#secret-variables gelöst werden, vielleicht ein VPN, um eine sichere Verbindung aufzubauen. Oder richten Sie einfach einen dedizierten Runner im selben LAN wie die älteren Datenbanken ein. Aber es scheint, dass Ihr Problem eher Ihre Bedenken bezüglich der Sicherheit als die CI-Konfiguration sind. –

Antwort

0

Ich beantworte meine eigene Frage nach einem Austausch mit @ jakub-kania und ein wenig mehr Forschung.

Was ich getan habe, ist ein SSH-Tunnel zwischen dem Gitlab-Runner und dem Server, auf dem die DB gehostet wird, zu erstellen und geheime GitLab-Variablen zu verwenden, um den Benutzernamen und das Passwort für die DB zu speichern.

Also, das müssen Sie tun.

  1. ein privates/öffentliches Schlüsselpaar erstellen. Es spielt keine Rolle, wo du sie an verschiedenen Orten kopieren willst.

  2. Erstellen Sie einen neuen Benutzer auf dem Server, auf dem die DB gehostet wird. Dies ist nicht unbedingt erforderlich, Sie könnten einen vorhandenen Benutzer verwenden, aber es ist einfacher zu sichern (Sie können es mit den Optionen --disabled-password und --disabled-login erstellen).

  3. Fügen Sie den öffentlichen Schlüssel, den Sie zuvor erstellt haben, in die Datei authorized_keys des neuen Benutzers ein.

  4. Folgen Sie den Anweisungen auf dieser Seite https://docs.gitlab.com/ee/ci/ssh_keys/README.html#ssh-keys-when-using-the-docker-executor.

  5. Erstellen Sie zwei geheime Variablen für den DB-Benutzernamen und das Kennwort, genannt BLOG_DB_USERNAME und BLOG_DB_PASSWORD.

  6. Konfigurieren Sie Ihre Anwendung, um den Benutzernamen und das Kennwort zu verwenden, die in der geheimen Variablen gespeichert sind. In meinem Fall habe ich eine Laravel app, so fügte ich auch folgende Skript Abschnitt meiner .gitlab-ci.yml Datei

    - echo >> .env 
    - echo "BLOG_DB_USERNAME=$BLOG_DB_USERNAME" >> .env 
    - echo "BLOG_DB_PASSWORD=$BLOG_DB_PASSWORD" >> .env 
    

Ich hoffe, das hilft jemand anderes.

Verwandte Themen