10

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

在 Slave 配置中,我在Node Properties -> Tool Locations.
虽然构建过程无法获得 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 工具

4

5 回答 5

14

声明式管道语法中,MSBuild 的工具有点笨拙。这是我必须使用script块来处理它的方式:

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

在旧的脚本流水线语法中,它可能是这样的:

node('win-slave-node') {
  def msbuild = tool name: 'MSBuild', type: 'hudson.plugins.msbuild.MsBuildInstallation'

  stage('Checkout') {
    checkout scm
  }

  stage('Build') {
    bat "${msbuild} SimpleWindowsProject.sln"
  }
}
于 2017-08-09T13:56:42.557 回答
8

对于遇到此问题并试图弄清楚 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\"示例不是声明性语法,但应该显示这个想法)

于 2018-12-03T11:31:07.640 回答
4

您必须在 Jenkins => Manage Jenkins => Global Tool Configuration 中定义 MSBuild 或使用已定义的不同工具名。

${tool 'toolname'}  returns the path defined for a tool in Global Tool Configuration.

警告:注意定义的路径。它是指向一个文件夹还是指向 msbuild.exe?您可能必须附加 msbuild.exe:

 ${tool 'VS2017'}\msbuild.exe

用于解释概念的简单快照: 如何在脚本中使用 Jenkins 工具路径

于 2019-01-18T18:19:21.310 回答
3

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

在我们的安装中,我们提供了三个不同的 MSBuild 版本,我可以使用以下版本

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

于 2018-06-06T09:31:08.133 回答
0

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

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

这将起作用

于 2019-08-29T07:17:16.560 回答