web-dev-qa-db-ja.com

Jenkins:MSBuildという名前のツールが見つかりません

Jenkins(Jenkins 2.6)でパイプラインビルドを設定し、gitベースのビルドのサンプルスクリプトをコピーすると、「MSBuildという名前のツールが見つかりません」と表示されます。 MSBuildツールをManage Jenkins -> Global Tool Configurationに設定しました。スレーブノードでパイプラインを実行しています。

スレーブ構成で、MSBuildツールパスを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スレーブの環境変数を変更しようとしました。


注:スレーブノードにMSビルドツールをインストールしました

9
Atul N

Declarative Pipeline 構文では、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"
  }
}
12
Nick Jones

この問題があり、Jenkinsで「ツール」が何を表し、どこに構成されているかを理解しようとしている人は、次のスクリーンショットを参照してください。

Jenkinsの管理->グローバルツール構成に移動します。
Global Tool Configuration


MSBuildまでスクロールし、ボタンをクリックしてセクションを展開します。
MSBuild tool installations


ここでは、MSBuild(または1つ追加)を参照するために使用するツール名を確認できます。
MSBuild tool name


次に、たとえば次のように参照できます:bat "\"${tool '15.0'}\" solution.sln /p:Configuration=Release /p:Platform=\"x86\"(例は宣言的な構文ではありませんが、アイデアを示す必要があります)

7
jumbo

Jenkins => Jenkinsの管理=>グローバルツール構成でMSBuildを定義するか、すでに定義されている別のツール名を使用する必要があります。

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

警告:定義されたパスに注意してください。フォルダまたはmsbuild.exeを指していますか? msbuild.exeを追加する必要がある場合があります。

 ${tool 'VS2017'}\msbuild.exe

概念を説明するための簡単なスナップショット: How to use Jenkins tool paths in scripts

2
addmoss

提供された答えは確かに機能しますが、正しい完全なツール名を提供する必要があります。

私たちのインストールでは、3つの異なるMSBuildバージョンが利用可能であり、以下を使用することができます

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

2
pfeigl

スクリプトブロックのグローバルツール構成にインストールされるmsbuildを定義する必要があります

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

これは動作します

0
Devops_Engg