Hallo, guten Tag!
Ich möchte über meine Erfahrungen mit der Integration von GitLab und AppCenter über BitBucket berichten.
Die Notwendigkeit einer solchen Integration entstand während der Einrichtung der automatischen Ausführung von UI-Tests für ein plattformübergreifendes Projekt in Xamarin. Eine detaillierte Anleitung findet Ihr unten!
* Über die Automatisierung von UI-Tests unter plattformübergreifenden Bedingungen werde ich einen separaten Artikel schreiben, wenn das Publikum interessiert ist.
Ich habe nur ein ähnliches Material gefunden. Deshalb könnte mein Artikel jemandem helfen.
ZielDas Ziel war, die automatische Ausführung von UI-Tests auf AppCenter einzurichten, während unser Team GitLab als Versionskontrollsystem verwendet.
Das Problem Das Problem war, dass AppCenter nicht direkt mit GitLab integriert ist. Als eine der Lösungen wurde der Umweg über BitBucket gewählt.
Schritte
1. Erstellen Sie ein leeres Repository auf BitBucket.
Ich sehe keine Notwendigkeit, dies näher zu erläutern 🙂
2. GitLab konfigurieren
Wir müssen sicherstellen, dass bei einem Push/Merge in das Repository die Änderungen auch auf BitBucket hochgeladen werden. Dazu fügen wir einen Runner hinzu (oder bearbeiten die bestehende .gitlab-ci.yml-Datei).
Zuerst fügen wir die Befehle in den Bereich before_scripts ein:
- git config --global user.email "user@email"
- git config --global user.name "username"Dann fügen wir den folgenden Befehl in die gewünschte Phase ein:
- git push --mirror https://username:password@bitbucket.org/username/projectname.gitIn meinem Fall entstand eine solche Datei
before_script:
- git config --global user.email "user@email"
- git config --global user.name "username"
stages:
- mirror
mirror:
stage: mirror
script:
- git push --mirror https://****:*****@bitbucket.org/****/testapp.gitWir starten den Build und überprüfen, ob unsere Änderungen/Dateien in BitBucket angekommen sind.
* Wie die Praxis gezeigt hat, ist die Einrichtung von SSH-Keys nicht zwingend erforderlich. Dennoch führe ich für alle Fälle den Algorithmus zur Verbindung über SSH unten an.
Verbindung über SSH
Zuerst muss ein SSH-Key generiert werden. Dazu gibt es zahlreiche Artikel. Zum Beispiel können Sie sich diesen anschauen. .
Die generierten Schlüssel sehen ungefähr so aus:

Weiter privater Schlüssel muss als Variable in GitLab hinzugefügt werden. Gehen Sie dazu zu Einstellungen > CI/CD > Umgebungsvariablen. Fügen Sie den gesamten Inhalt der Datei hinzu, in der Sie den privaten Schlüssel gespeichert haben. Nennen wir die Variable SSH_PRIVATE_KEY.
* diese Datei hat im Gegensatz zur Datei mit dem öffentlichen Schlüssel keine Erweiterung

Super, jetzt müssen wir den öffentlichen Schlüssel in BitBucket hinzufügen. Gehen Sie dazu zu Ihrem Repository, wählen Sie Einstellungen > Zugriffsschlüssel.

Hier klicken wir auf Schlüssel hinzufügen und fügen den Inhalt der Datei mit dem öffentlichen Schlüssel (Datei mit der Erweiterung .pub) ein.
Der nächste Schritt besteht darin, Schlüssel in gitlab-runner zu verwenden. Nutzen Sie diese Befehle, aber ersetzen Sie die Sterne durch Ihre Daten.
image: timbru31/node-alpine-git:latest
stages:
- mirror
before_script:
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- git config --global user.email "*****@***"
- git config --global user.name "****"
- ssh -T git@bitbucket.org
mirror:
stage: mirror
script:
- git push --mirror https://****:****@bitbucket.org/*****/*.git3. AppCenter einrichten
Wir erstellen eine neue Anwendung im AppCenter.

Wir geben die Sprache/Plattform an.

Nun gehen wir in den Bereich Build der gerade erstellten Anwendung. Dort wählen wir BitBucket und das im Schritt 1 erstellte Repository aus.
Prima, jetzt müssen wir den Build konfigurieren. Dazu suchen wir das Zahnradsymbol.

Im Grunde genommen ist alles intuitiv verständlich. Wir wählen das Projekt und die Konfiguration aus. Bei Bedarf aktivieren wir die Durchführung von Tests nach dem Build. Diese werden automatisch gestartet.
Im Wesentlichen war das alles. Es klingt nicht schwierig, aber natürlich wird es nicht ganz reibungslos verlaufen. Daher werde ich einige Fehler beschreiben, mit denen ich während der Arbeit konfrontiert wurde:
'ssh-keygen' wird nicht als interner oder externer Befehl erkannt.
Dies liegt daran, dass der Pfad zu ssh-keygen.exe nicht in die Umgebungsvariablen hinzugefügt wurde.
Es gibt zwei Möglichkeiten: Fügen Sie C:\Program Files\Git\usr\bin zu den Umgebungsvariablen hinzu (wirksam nach einem Neustart des Rechners) oder starten Sie die Konsole aus diesem Verzeichnis.
Hat sich AppCenter mit dem falschen BitBucket-Konto verbunden?
Um das Problem zu lösen, müssen Sie das BitBucket-Konto von AppCenter trennen. Melden Sie sich beim falschen BitBucket-Konto an und gehen Sie zu Ihrem Benutzerprofil.

Gehen Sie dann zu Einstellungen > Zugriff verwalten > OAuth.

Klicken Sie auf Widerrufen, um das Konto zu trennen.

Anschließend müssen Sie sich mit dem richtigen BitBucket-Konto anmelden.
* Im schlimmsten Fall sollten Sie auch den Browser-Cache leeren.
Jetzt gehen Sie zu AppCenter. Gehen Sie zum Abschnitt Build und klicken Sie auf BitBucket-Konto trennen.

Wenn das alte Konto getrennt ist, binden Sie AppCenter erneut an das richtige Konto.
‘eval’ wird nicht als interner oder externer Befehl erkannt.
Verwenden Sie stattdessen den Befehl
- eval $(ssh-agent -s)Den Befehl:
- ssh-agentIn einigen Fällen müssen Sie entweder den vollständigen Pfad zu C:\Program Files\Git\usr\bin\ssh-agent.exe angeben oder diesen Pfad zu den Systemvariablen auf dem Rechner hinzufügen, auf dem der Runner ausgeführt wird.
AppCenter Build versucht, einen Build für das Projekt aus einem veralteten BitBucket-Repository zu starten.
In meinem Fall trat das Problem auf, weil ich mit mehreren Konten arbeitete. Es ließ sich durch das Leeren des Caches lösen.
Quelle: habr.com
