Hallo, guten Tag!
Ich möchte über meine Erfahrungen mit der Einrichtung der Integration von GitLab und AppCenter über BitBucket berichten.
Die Notwendigkeit einer solchen Integration entstand während der Konfiguration des automatischen Starts von UI-Tests für ein plattformübergreifendes Projekt auf Xamarin. Eine detaillierte Anleitung folgt im nächsten Abschnitt!
* Über die Automatisierung von UI-Tests in plattformübergreifenden Umgebungen werde ich einen separaten Artikel schreiben, wenn das Publikum interessiert ist.
Ich habe nur ein ähnliches Material gefunden. . Daher könnte mein Artikel jemandem helfen.
Aufgabe: Automatischen Start von UI-Tests auf AppCenter einrichten, während unser Team GitLab als Versionskontrollsystem verwendet.
Problem ist, dass AppCenter nicht direkt mit GitLab integriert werden kann. Eine der Lösungen war, einen Umweg über BitBucket zu wählen.
Schritte
1. Erstellen Sie ein leeres Repository auf BitBucket
Ich sehe keinen Bedarf, dies näher zu beschreiben 🙂
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 Datei .gitlab-ci.yml).
Zuerst fügen wir die Befehle in den Abschnitt 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 richtige Stage ein:
- git push --mirror https://username:password@bitbucket.org/username/projectname.gitIn meinem Fall sieht die Datei so aus:
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 auf BitBucket angekommen sind.
* Wie sich gezeigt hat, ist die Einrichtung von SSH-Schlüsseln nicht erforderlich. Aber zur Sicherheit werde ich den Algorithmus zur Konfiguration der Verbindung über SSH unten angeben.
Verbindung über SSH
Zuerst müssen Sie einen SSH-Schlüssel generieren. Darüber gibt es viele Artikel. Sie können sich als Beispiel ansehen. .
Die generierten Schlüssel sehen ungefähr so aus:

Dann muss der geheime Schlüssel als Variable in GitLab hinzugefügt werden. Dazu gehen wir zu Einstellungen > CI/CD > Umgebungsvariablen. Wir fügen den gesamten Inhalt der Datei hinzu, in der Sie den geheimen Schlüssel gespeichert haben. Wir nennen die Variable SSH_PRIVATE_KEY. Diese Datei hat im Gegensatz zur Datei mit dem öffentlichen Schlüssel keine Erweiterung.
* Ausgezeichnet, dann müssen wir den öffentlichen Schlüssel auf BitBucket hinzufügen. Dazu öffnen wir das Repository und gehen zu Einstellungen > Zugriffsschlüssel.

Hier klicken wir auf „Schlüssel hinzufügen“ und fügen den Inhalt der Datei mit dem öffentlichen Schlüssel ein (Datei mit der Erweiterung .pub).

Hier klicken wir auf Add Key und fügen den Inhalt der Datei mit dem öffentlichen Schlüssel (Datei mit der Endung .pub) ein.
Der nächste Schritt besteht darin, die Schlüssel im gitlab-runner zu verwenden. Verwenden Sie diese Befehle, geben Sie jedoch anstelle der Sterne Ihre eigenen Daten ein.
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
Erstellen Sie eine neue Anwendung im AppCenter.

Geben Sie die Sprache/Plattform an.

Gehen Sie dann zum Abschnitt Build der gerade erstellten Anwendung. Wählen Sie dort BitBucket und das im Schritt 1 erstellte Repository aus.
Super, jetzt müssen wir den Build konfigurieren. Dafür suchen wir das Zahnrad-Icon.

Im Prinzip ist alles selbsterklärend. Wählen Sie das Projekt und die Konfiguration aus. Wenn nötig, aktivieren Sie den Testlauf nach dem Build. Diese werden automatisch gestartet.
Im Prinzip war es das. Es klingt nicht kompliziert, aber natürlich wird nicht alles glatt verlaufen. Deshalb beschreibe ich einige Fehler, mit denen ich während meiner Arbeit konfrontiert wurde:
'ssh-keygen' wird nicht als interner oder externer Befehl erkannt.
Das passiert, weil der Pfad zu ssh-keygen.exe nicht in den Umgebungsvariablen hinzugefügt wurde.
Es gibt zwei Optionen: Fügen Sie C:Program FilesGitusrbin zu den Umgebungsvariablen hinzu (wirkt nach einem Neustart des Computers) 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 > Zugriffsmanagement > OAuth.

Klicken Sie auf Widerrufen, um das Konto zu trennen.

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

Wenn das alte Konto getrennt ist, verbinden Sie AppCenter erneut. Jetzt mit dem richtigen 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 FilesGitusrbinssh-agent.exe angeben oder diesen Pfad in die Systemvariablen auf dem Computer einfü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 gearbeitet habe. Es wurde durch das Löschen des Cache behoben.
Quelle: habr.com
