Ich versuche eine VS .sln zu erstellen, die mehrere C++ .vcprojs enthält. Die Lösungsdatei wird mit CMake generiert und ich habe diesen Teil in Jenkins (mit dem CMake Builder Plugin). Um die Lösungsdatei zu erstellen, verwende ich msbuild. Ich bin in der Lage, die Lösung mit dem folgenden Befehl Visual Studio und von der Kommandozeile zu bauen:Msbuild funktioniert über VS und Kommandozeile, scheitert aber über Jenkins
C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" /t:Rebuild bin/SonIO.sln
erfolgreich Dies baut (auf der gleichen Maschine, die Jenkins befindet).
Allerdings versuche ich diesen Teil des Build in Jenkins zu automatisieren und der Build endet mit ein paar C1083
Fehler ("Cannot open source file: '..\path\to\file.ext': No such file or directory
). Ich habe versucht, sowohl das Jenkins-Msbuild-Plugin und den gleichen Befehl zu verwenden, der im Terminal als Build-Schritt "Windows-Batch-Befehl ausführen" mit dem gleichen Ergebnis funktioniert.
Wenn Sie den Befehl Build-Schritt Windows-Batch verwendet wird, kann ich im Protokoll sehen, dass der Befehl ausgeführt wird:
C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319 msbuild.exe" /t:Rebuild bin/SonIO.sln
... ist genau das gleiche wie die, die von der Kommandozeile arbeiten , einschließlich das Arbeitsverzeichnis.
Ich verwende Jenkins als Dienst und ich habe die Service-Anmeldung als mein Konto (mit Administratorrechten). Wer weiß, in welchem Verzeichnis Jenkins Stapelbefehle ausführen wird?
Irgendwelche Ideen, warum ich diesen Unterschied des Verhaltens zwischen Jenkins und der Befehlszeile sehe?
Ich glaube, Sie den absoluten Pfad zu Ihrer Lösung angeben müssen durch einen Platzhalter wie% ARBEITSBEREICH% mit –
Ich habe überprüft, dass der Befehl von Jenkins aus demselben Arbeitsverzeichnis ausgeführt wird. Gilt Ihr Kommentar noch? Ich bin nicht 100% sicher, was du meinst. – Kohanz