2017-03-01 7 views
0

Gulpを使用して、多数のNuGetパッケージを使用する大規模な.NETソリューションを構築しています。これは、コンパイルする前にパッケージを取り出すために、gulp-nuget-restoreを使って過去6ヶ月間うまくいっています。GulpからNuGet.exeを呼び出すときのEBUSYエラー

しかし、私たちは最近、内部のNuGetサーバーを取得しました。これを使用するようにビルドスクリプトを修正すると、System.Coreが見つかりませんでした(nuget.orgの他のすべてのパッケージはまだ機能しています)。私は、犯人がgug-nuget-restoreパッケージにバンドルされている古いバージョンのnuget.exeだと思う。手動で新しいバージョンで上書きすると、ビルドは再び動作します。

これで、最新のバージョンのnuget.exeをダウンロードし、パッケージの復元に使用するようにGulpスクリプトを取得しようとしています(今度はgulp-nuget NPMパッケージを使用)。不思議なことに、これは私のマシンでは完全に動作しますが、TeamCityビルドサーバーでは失敗します。ここで

は私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/" 
     }))); 

そしてチームシティービルドログ:

[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 

"エラー:spawnSync ./nuget.exe EBUSYは" ない何かまだことを意味するものダウンロードが完了しているにもかかわらず、nuget.exeファイルがロックされていますか?

この問題のトラブルシューティング方法については、事前にお問い合わせいただきありがとうございます。

答えて

0

それは恐ろしいハックですが、私はnuget.exeのダウンロードを終えた後に1秒の時間遅延を導入した場合、エラーが消える:

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. 
}); 
関連する問題