Wie richte ich TeamCity CI so ein, dass es Xamarin-Komponenten entpackt?

8

In Visual Studio funktioniert alles und ein Komponentenverzeichnis wird mit den entsprechenden DLLs erstellt. TeamCity kann die DLLs der Android-Supportbibliothek jedoch nicht abrufen, da der Auslöser für die Wiederherstellung ein Xamarin VS-Plug-in ist, das beim Laden der Lösung ausgeführt wird. Das Äquivalent zur Wiederherstellung von Nuget-Paketen für Xamarin ist xamarin-component . Ich habe die Xamarin-Komponente.exe in meinem C: \ Windows-Verzeichnis abgelegt. Um TeamCity zu konfigurieren, habe ich einen Befehlszeilen-Build-Schritt mit

vorangestellt %Vor%

TeamCity läuft als NT Authority \ System. Also mit PsExec,

%Vor%

Wenn ich dann 'xamarin-component login' ausführen

%Vor%

Wenn ich zu meiner Lösung in cmd gehe und die Wiederherstellung versuche, bekomme ich einen Versuch, die Komponente herunterzuladen, und dann einen Json-Parsing-Fehler. Dies ist der gleiche Fehler, den ich in TeamCity erhalte.

Ich erhalte den Fehler, wenn ich "Administrator" verwende (der die Anmeldeinformationen in C: \ Users \ Administrator speichert. Früher, als ich mein persönliches Konto verwendet habe, hat es funktioniert. Sobald ich jedoch das C: \ Users \ löschte tim \ AppData \ Local \ Xamarin \ Cache \ Components, das gleiche Problem tauchte auf: Fiddler zeigt, dass wir JSon nicht zurückbekommen (wie wir es tun, wenn wir ein ungültiges Token eingeben), und wir erhalten eine 302-Weiterleitung, die besagt, dass Objekt hierher verschoben wurde Und hier ist das Xamarin Anmeldeseite - offensichtlich nicht Json.

Versucht.  1. Setzen Sie COOKIE_JAR_PATH auf C: \ Users \ tim.xamarin-credentials - xpkg übernimmt denselben Fehler  2. Kopieren Sie .xamarin-Credentials von Config \ system32 nach D: \, setzen Sie COOKIE_JAR_PATH auf D: .xamarin-credentials - xpkg übernimmt denselben Fehler  3. Verschieben Sie die .xamarin-Anmeldeinformationen nach C: \, setzen Sie COOKIE_JAR_PATH - selbe Fehler  4. Melden Sie sich in NT Authority mit COOKIE_JAR_PATH erneut bei C an: .xamarin-credentials - selbe Fehler

Meine vorläufige Idee ist jetzt herauszufinden, wo die NT-Autorität xamarin-Komponente nach Cache sucht und die Dateien dort ablegt.

%Vor%

Die Version meiner Xamarin-Komponente ist 0,99 - für 100 versuchen wir mehr ...

    
tofutim 11.01.2014, 22:22
quelle

4 Antworten

3

Ich hatte Probleme, den Cookie-Jar tatsächlich korrekt aus dem Pfad von system32 zu laden. Ich denke, das ist ein Pfad Virtualisierungsproblem, das ich einfach nicht gut genug verstehe, um Kopf oder Zahl davon zu machen.

Ich habe eine Umgebungsvariable hinzugefügt, von der das Tool lesen wird (ich bin der Hauptautor von Xamarin :-), der den Cookie-Jar-Pfad angibt, aus dem gelesen werden soll, und das hat das Problem für andere mit TeamCity gelöst. Die Umgebungsvariable ist COOKIE_JAR_PATH .

Sie können es in den Umgebungseinstellungen von TeamCity so einstellen, dass es auf einen Cookie-Jar-Pfad außerhalb des System32-Profilverzeichnisses zeigt (ich glaube, ich habe es in meinem ursprünglichen Test im Stammverzeichnis des Laufwerks C: wirklich).

    
Bojan Rajkovic 31.01.2014 19:38
quelle
3

Als Hack habe ich den Cache-Ordner von

kopiert %Vor%

bis

%Vor%

Das hat die Kommunikation mit dem Xamarin Server umgangen.

Update. Ich vermute, dass es auf der Serverseite eine schlechte Verbindung oder ein falsches Setup sein könnte. Wenn die Wiederherstellung der Xamarin-Komponente aufgerufen wird, wird ein Aufruf an

gesendet %Vor%

was "Objekt hierher bewegt" zurückgibt, wo "hier" nirgends ist.

Wenn Sie Visual Studio starten, nachdem Sie den Ordner "Cache and Components" (neben der Lösung) gelöscht haben, ruft Xamarin

an %Vor%

, zu dem ein ähnlich aussehendes Objekt verschoben wurde, aber dieses Mal weist es Sie zu xamarin-components.s3.amazonaws.com /

%Vor%

Vielleicht hat sich etwas geändert, oder das API "availables_versions" hat sich geändert.

    
tofutim 01.02.2014 01:43
quelle
2

Vielen Dank für diese Frage und Ihre Antworten darauf. Ich mochte die Idee, einen Auth-Cookie auf dem Build-Knoten zu speichern oder einen Cache dort manuell kopieren zu müssen, nicht wirklich, also kam ich auf meine eigene Lösung, also hackte ich dieses Problem mit einem schnellen Powershell-Skript ein, das das Verhalten von Die Aktion xamarin-component.exe restore :

%Vor%

Der Parameter -authCookie kann entweder aus dem XAM_AUTH-Cookie in Ihrem Browser oder aus den .xamarin-Anmeldedaten "cookiejar" in Ihrem Home-Verzeichnis extrahiert werden. Es ist schön, dass es so parametrisiert ist, dass man es als geheime Variable in TeamCity speichern kann.

Der Parameter componentDirectory muss der vollständige Pfad zum Komponentenverzeichnis sein - er wird erstellt, wenn er nicht existiert.

Der Parameter project sollte der Pfad zu Ihrem Projekt sein, für den Sie Pakete wiederherstellen möchten. Wenn Sie mehrere Projekte haben, die dies benötigen, müssen Sie das Skript für jedes Projekt ausführen. Geben Sie Ihre Lösung nicht an, da sie nicht funktioniert.

Leider ist dies nicht sehr widerstandsfähig gegenüber Xamarins Launen - eine einfache API-Änderung könnte dies nutzlos machen, also ist die beste Lösung, auf Xamarin zu warten, um das Problem zu beheben. Ich habe Xamarin-Support per E-Mail geschickt, um mich über dieses Problem zu beschweren, aber ich kann mir nicht vorstellen, dass ich eine zeitnahe Antwort bekomme (sie scheinen in diesen Tagen sehr beschäftigt zu sein). Ich hoffe, das ist nützlich!

    
Steve Rukuts 29.04.2014 13:53
quelle
0

Erstelle ein Verzeichnis und lege diesen Verzeichnispfad in die Umgebungsvariable XAMARIN_CACHEPATH

    
anTONIos 23.11.2016 12:16
quelle

Tags und Links