Search code examples
jenkinsmsbuildjenkins-pipelinejenkins-agent

Jenkins: no tool named MSBuild found


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 agent node.

In the agent 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-agent-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 agent it not refreshed.


NOTE: I have installed MS Build tool for on agent node


Solution

  • 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-agent-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-agent-node') {
      def msbuild = tool name: 'MSBuild', type: 'hudson.plugins.msbuild.MsBuildInstallation'
    
      stage('Checkout') {
        checkout scm
      }
    
      stage('Build') {
        bat "${msbuild} SimpleWindowsProject.sln"
      }
    }