Einige Projekte in der Lösung meines Kunden haben ein Post-Build-Ereignis: xcopy
die Build-Ausgabe in einen bestimmten Ordner. Dies funktioniert gut, wenn vor Ort gebaut wird. Doch in Teamcity, ich gelegentlich bekommen
xcopy [...] mit Code 2 beendet
Wenn ich "normal" verwende copy
, wird es mit Code 1 beendet. Ich gehe davon aus, dass dies etwas mit Dateisperren zu tun hat, obwohl die spezifischen Dateien, die kopiert werden, nicht identisch sind. Vielleicht wird nur das freigegebene Zielverzeichnis gesperrt. Ich benutze, /y
um nicht zum Überschreiben von Dateien aufzufordern.
Warum schlägt dies in TeamCity fehl, aber nicht lokal?
The user pressed CTRL+C to terminate xcopy
. Hehe.Antworten:
Selbst wenn Sie den
/Y
Switch mit xcopy versehen, wird immer noch eine Fehlermeldung angezeigt, wenn xcopy nicht weiß, ob es sich bei dem zu kopierenden Objekt um eine Datei oder ein Verzeichnis handelt. Dieser Fehler wird als "mit Code 2 beendet" angezeigt. Wenn Sie dieselbe xcopy an einer Eingabeaufforderung ausführen, werden Sie feststellen, dass xcopy nach einer Antwort der Datei oder des Verzeichnisses fragt.Um dieses Problem mit einem automatisierten Build zu beheben, können Sie eine vordefinierte Antwort mit einer Pipe wiederholen.
Um zu sagen, dass das, was Sie kopieren, eine Datei ist, geben Sie Folgendes ein
F
:Um zu sagen, dass das, was Sie kopieren, ein Verzeichnis ist, geben Sie Folgendes ein
D
:Manchmal kann das oben genannte Problem gelöst werden, indem einfach ein Kopierbefehl anstelle von xcopy verwendet wird:
Wenn jedoch nicht vorhandene Verzeichnisse vorhanden sind, die zum endgültigen Dateiziel führen, wird ein "mit Code 1 beendet" angezeigt.
Denken Sie daran: Verwenden Sie den
/C
Schalter und xcopy mit Vorsicht.quelle
*
funktioniert das auch mit Verzeichnissen? Oder ist das nur für Dateien?Ich habe den Fehlercode 2 durch Hinzufügen eines \ am Ende meines Pfads behoben. Ohne dieses \ wird xcopy denken, dass es sich um eine Datei anstelle eines Ordners handelt.
quelle
Wenn Sie xcopy in einem Post-Build-Ereignis verwenden, verwenden Sie den Schalter / Y zusätzlich zu / C.
quelle
/Y
unterdrückt die Eingabeaufforderung! Warum war das so schwer zu finden?Meine Lösung für dieses Problem bestand darin, in den Ziel-Bin-Ordner zu wechseln und sicherzustellen, dass dort der richtige Unterordner vorhanden ist. Nachdem dieser Unterordner manuell erstellt wurde, wurde der Erstellungsprozess erfolgreich abgeschlossen.
quelle
copy
habe es für mich behoben.xcopy with /c /y
funktioniert nicht. Ich bekam eine Ausfahrt 4, also ging ich mitxcopy
, aber es stellte sich heraus, dass ich Zitate brauchte($TargetPath)
.Mein Skript:
quelle
Wahrscheinlich verwenden Sie TeamCity mit git. Wenn ja, überprüfen Sie , ob die zu kopierenden Ordner im Git-Repository vorhanden sind. Normalerweise fügt git aviod leere Projektordner zum Repository hinzu,
xcopy
findet es also nicht und generiert einen Fehler.Sie können eine leere Textdatei zum leeren Ordner hinzufügen, festschreiben und sehen, dass der Ordner im Repository angezeigt wird.
quelle