Jenkins: no tool named MSBuild found Jenkins: no tool named MSBuild found jenkins jenkins

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:
Global Tool Configuration


Scroll down to MSBuild and click the button to expand the section:
MSBuild tool installations


Here you can see what tool name to use to reference MSBuild (or add one):
MSBuild tool name


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

A simple snapshot for explaining the concept:How to use Jenkins tool paths in scripts