问题
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
回答1:
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"
}
}
回答2:
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)
回答3:
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]'}
回答4:
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:
回答5:
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