Jenkins:找不到名为MSBuild的工具

时间:2017-07-31 14:14:47

标签: jenkins msbuild jenkins-pipeline jenkins-slave

在Jenkins(Jenkins 2.6)中设置Pipeline构建,复制基于git的构建的示例脚本给出:“没有找到名为MSBuild的工具”。我在Manage Jenkins -> Global Tool Configuration中设置了MSBuild工具。我在从节点上运行管道。

在Slave配置中,我在Node Properties -> Tool Locations中设置了MSBuild工具路径。
在构建过程中,它无法获得MSBuild工具路径,如果我在没有管道的情况下运行相同的源(不使用Jenkinsfile),它可以正常工作。

请参阅Jenkinsfile语法

pipeline {
    agent { label 'win-slave-node' }
    stages {
           stage('build') {
           steps {

           bat "\"${tool 'MSBuild'}\" SimpleWindowsProject.sln /t:Rebuild /p:Configuration=Release"
           }
    }
   }
}


我还尝试更改windows slave的环境变量,不刷新。

注意:我已经在从属节点上安装了MS Build工具

5 个答案:

答案 0 :(得分:11)

Declarative Pipeline语法中,MSBuild的工具有点笨拙。以下是我使用import { FETCH_RECIPES } from "../actions/index"; export default function(state = [], action) { switch(action.type) { case FETCH_RECIPES: // Verify here that your request object has data return [...state, action.request.data]; // Default state default: return state; } } 块处理它的方式:

script

在较旧的Scripted Pipeline语法中,它可能是这样的:

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"
        } 
      } 
    } 
  } 
} 

答案 1 :(得分:4)

对于任何有此问题并且只是想弄清楚“工具”在Jenkins中代表什么以及它在何处配置的人,请参见以下屏幕截图:

转到管理Jenkins->全局工具配置:
Global Tool Configuration


向下滚动到MSBuild,然后单击按钮以展开以下部分:
MSBuild tool installations


在这里您可以看到用来引用MSBuild的工具名称(或添加一个):
MSBuild tool name


然后您可以像这样引用它:bat "\"${tool '15.0'}\" solution.sln /p:Configuration=Release /p:Platform=\"x86\"(示例不是声明性语法,但应显示出主意)

答案 2 :(得分:2)

虽然提供的答案肯定有效,但您只需提供正确的完整工具名称。

在我们的安装中,我们有三种不同的MSBuild版本,我可以使用以下

${tool 'MSBuild 15.0 [32bit]'}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我们必须定义msbuild,该脚本安装在脚本块中的“全局工具配置”中

stage('App_Build'){
                steps{
                    tool name: 'MsBuild', type: 'msbuild'
                    bat "\"${tool 'MsBuild'}\"My.Service.sln /t:Rebuild /p:Configuration=Release"
}
}

这将起作用