Setting up a Pipeline build in Jenkins (Jenkins 2.6), copying the sample script for a git-based build gives: "no tool named MSBuild found". I have set MSBuild Tool in Manage Jenkins -> Global Tool Configuration
. I am running pipeline on the slave node.
In Slave configuration, I have set MSBuild tool path in Node Properties -> Tool Locations
.
While build process it is not able to get MSBuild tool path, if i run same source without pipeline (without using Jenkinsfile) it works fine.
Please see Jenkinsfile Syntax
pipeline {
agent { label 'win-slave-node' }
stages {
stage('build') {
steps {
bat "\"${tool 'MSBuild'}\" SimpleWindowsProject.sln /t:Rebuild /p:Configuration=Release"
}
}
}
}
I have also tried to change environment variable for windows slave it not refreshed.
NOTE: I have installed MS Build tool for on slave node
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)
While the provided answer certainly works, you just have to provide the correct complete tool name.
In our Installation, we had three different MSBuild versions available and I could just use the following
${tool 'MSBuild 15.0 [32bit]'}
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
We have to define msbuild
which is installed in Global Tool Configuration in script block
stage('App_Build'){
steps{
tool name: 'MsBuild', type: 'msbuild'
bat "\"${tool 'MsBuild'}\"My.Service.sln /t:Rebuild /p:Configuration=Release"
}
}
This will work
来源:https://stackoverflow.com/questions/45418333/jenkins-no-tool-named-msbuild-found