2017-03-01 1 views
0

Ich benutze Gulp, um eine große .NET-Lösung zu erstellen, die viele NuGet-Pakete verwendet. Dies funktioniert in den letzten sechs Monaten gut mit gulp-nuget-restore, um die Pakete vor dem Kompilieren abzurufen.EBUSY-Fehler beim Aufruf von NuGet.exe von Gulp

Allerdings haben wir kürzlich einen internen NuGet-Server erworben, und als ich das Build-Skript änderte, um es zu verwenden, fing es an, System.Core zu finden (obwohl alle anderen Pakete von nuget.org immer noch funktionierten). Ich vermute, dass der Schuldige eine veraltete Version von nuget.exe ist, die mit dem Paket gulp-nuget-restore gebündelt ist; Der Build funktioniert wieder, wenn ich ihn manuell mit einer neueren Version überschreibe.

Also, ich versuche jetzt, das Gulp-Skript zu erhalten, um die neueste Version von nuget.exe herunterzuladen und diese für die Paketwiederherstellung zu verwenden (dieses Mal mit Hilfe des gulp-nuget NPM-Pakets). Seltsamerweise funktioniert das auf meinem Rechner einwandfrei, aber auf dem TeamCity-Build-Server schlägt es fehl.

Hier ist der relevante Teil meiner gulpfile.js:

const gulp = require("gulp"), 
    fs = require("fs"), 
    nuget = require("gulp-nuget"), 
    download = require("gulp-download-stream"); 

const nugetExePath = "./nuget.exe"; 

gulp.task("download-nuget", done => { 
    if (fs.existsSync(nugetExePath)) { 
     return done(); 
    } 

    return download(
     { 
      file: "nuget.exe", 
      url: "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" 
     }) 
     .pipe(gulp.dest(".")); 
}); 

gulp.task("nuget-restore", 
    ["download-nuget"], 
    () => gulp.src("./mysolution.sln") 
     .pipe(nuget.restore({ 
      nuget: nugetExePath, 
      source: "http://our-internal-proget-server/nuget/Default/" 
     }))); 

Und die Teamcity Build-Log:

[17:14:41][Step 2/2] Executing D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\.bin\gulp.cmd via wrapping shell script 
[17:14:41][Step 2/2] Starting: cmd /c D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\.bin\gulp.cmd --no-color --teamcity.properties.all=D:\TeamCity\buildAgent3\temp\agentTmp\teamcity9135120293826835528.json  --teamcity.properties=D:\TeamCity\buildAgent3\temp\agentTmp\teamcity7511878459063399775.json --configuration Release --enableteamcity --buildnumber 1299 
[17:14:41][Step 2/2] in directory: D:\TeamCity\buildAgent3\work\88991897ccf08f65 
[17:14:44][Step 2/2] [17:14:44] Using gulpfile D:\TeamCity\buildAgent3\work\88991897ccf08f65\gulpfile.js 
[17:14:44][Step 2/2] [17:14:44] Starting 'clean'... 
[17:14:44][Step 2/2] [17:14:44] Starting 'set-build-number'... 
[17:14:44][Step 2/2] [17:14:44] Starting 'download-nuget'... 
[17:14:44][Step 2/2] [17:14:44] Downloading https://dist.nuget.org/win-x86-commandline/latest/nuget.exe... 
[17:14:44][Step 2/2] [17:14:44] Finished 'clean' after 117 ms 
[17:14:45][Step 2/2] [17:14:45] Updating assembly info file 'D:\TeamCity\buildAgent3\work\88991897ccf08f65\SharedAssemblyInfo.cs'... 
[17:14:45][Step 2/2] [17:14:45]  Setting attribute 'AssemblyVersion' to '1.0.*.1299'. 
[17:14:45][Step 2/2] [17:14:45]  Setting attribute 'AssemblyVersion' to '1.3.9.1299'. 
[17:14:45][Step 2/2] [17:14:45]  Setting attribute 'AssemblyFileVersion' to '1.3.9.1299'. 
[17:14:46][Step 2/2] [17:14:46] Finished 'set-build-number' after 1.67 s 
[17:14:48][Step 2/2] [17:14:48] Downloaded https://dist.nuget.org/win-x86-commandline/latest/nuget.exe after 3.98 s 
[17:14:48][Step 2/2] [17:14:48] Finished 'download-nuget' after 4.01 s 
[17:14:48][Step 2/2] [17:14:48] Starting 'nuget-restore'... 
[17:14:48][Step 2/2] [17:14:48] 'nuget-restore' errored after 5.17 ms 
[17:14:48][Step 2/2] [17:14:48] Error: spawnSync ./nuget.exe EBUSY 
[17:14:48][Step 2/2]  at exports._errnoException (util.js:1026:11) 
[17:14:48][Step 2/2]  at spawnSync (child_process.js:461:20) 
[17:14:48][Step 2/2]  at execFileSync (child_process.js:498:13) 
[17:14:48][Step 2/2]  at Gulp.gulp.task (D:\TeamCity\buildAgent3\work\88991897ccf08f65\gulpfile.js:109:9) 
[17:14:48][Step 2/2]  at module.exports (D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\orchestrator\lib\runTask.js:34:7) 
[17:14:48][Step 2/2]  at Gulp.Orchestrator._runTask (D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\orchestrator\index.js:273:3) 
[17:14:48][Step 2/2]  at Gulp.Orchestrator._runStep (D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\orchestrator\index.js:214:10) 
[17:14:48][Step 2/2]  at D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\orchestrator\index.js:279:18 
[17:14:48][Step 2/2]  at finish (D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\orchestrator\lib\runTask.js:21:8) 
[17:14:48][Step 2/2]  at D:\TeamCity\buildAgent3\work\88991897ccf08f65\node_modules\orchestrator\lib\runTask.js:52:4 
[17:14:48][Step 2/2] Process exited with code 1 

Hat die "Fehler: spawnSync ./nuget.exe EBUSY" bedeuten, dass noch etwas hat eine Sperre auf die nuget.exe Datei, obwohl der Download angeblich beendet wurde?

Vielen Dank im Voraus für alle Vorschläge zur Fehlerbehebung.

Antwort

0

Es ist eine schreckliche Hack, aber der Fehler geht weg, wenn ich eine 1-Sekunden-Zeitverzögerung nach Beendigung des Download von nuget.exe vorstellen:

const wait = require("gulp-wait"); 

gulp.task("download-nuget", done => { 
    if (fs.existsSync(nugetExePath)) { 
     return done(); 
    } 

    return download(
     { 
      file: "nuget.exe", 
      url: "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" 
     }) 
     .pipe(gulp.dest(".")) 
     .pipe(wait(1000)); // Workaround for EBUSY error on TeamCity server. 
}); 
Verwandte Themen