Jenkins: no tool named MSBuild found
In Declarative Pipeline syntax, the tooling for MSBuild is a little clunkier. Here's how I've had to handle it, using a script
block:
pipeline { agent { label 'win-slave-node' } stages { stage('Build') { steps { script { def msbuild = tool name: 'MSBuild', type: 'hudson.plugins.msbuild.MsBuildInstallation' bat "${msbuild} SimpleWindowsProject.sln" } } } } }
In the older Scripted Pipeline syntax, it could be like this:
node('win-slave-node') { def msbuild = tool name: 'MSBuild', type: 'hudson.plugins.msbuild.MsBuildInstallation' stage('Checkout') { checkout scm } stage('Build') { bat "${msbuild} SimpleWindowsProject.sln" }}
For anyone having this problem and just trying to figure out what 'Tool' represents in Jenkins and where it is configured, see following screenshots:
Go to Manage Jenkins -> Global Tool Configuration:
Scroll down to MSBuild and click the button to expand the section:
Here you can see what tool name to use to reference MSBuild (or add one):
Then you can reference it for example like this: bat "\"${tool '15.0'}\" solution.sln /p:Configuration=Release /p:Platform=\"x86\"
(example is not declarative syntax, but should show the idea)
You have to define MSBuild in Jenkins => Manage Jenkins => Global Tool Configuration or use a different toolname which is already defined.
${tool 'toolname'} returns the path defined for a tool in Global Tool Configuration.
Warning: Pay attention to the path defined. Does it point to a folder or to msbuild.exe? You might have to append msbuild.exe:
${tool 'VS2017'}\msbuild.exe