Jenkins: no tool named MSBuild found

故事扮演 提交于 2019-12-03 13:08:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!