web-dev-qa-db-fra.com

Jenkins: aucun outil nommé MSBuild trouvé

La configuration d’une construction Pipeline dans Jenkins (Jenkins 2.6) et la copie de l’exemple de script pour une construction basée sur git donnent: "aucun outil nommé MSBuild trouvé". J'ai défini MSBuild Tool dans Manage Jenkins -> Global Tool Configuration. J'utilise un pipeline sur le noeud esclave.

Dans la configuration Slave, j'ai défini le chemin de l'outil MSBuild dans Node Properties -> Tool Locations.
Bien que le processus de construction ne puisse pas obtenir le chemin de l’outil MSBuild, si j’exécute la même source sans pipeline (sans utiliser Jenkinsfile), cela fonctionne correctement.


Veuillez consulter la syntaxe Jenkinsfile

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

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



J'ai également essayé de changer la variable d'environnement pour Windows Slave, il n'est pas rafraîchi.


NOTE: J'ai installé l'outil MS Build pour le noeud esclave

7
Atul N

Dans Declarative Pipeline syntax, l'outillage de MSBuild est un peu plus compliqué. Voici comment j'ai dû gérer cela en utilisant un bloc 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"
        } 
      } 
    } 
  } 
} 

Dans l'ancienne syntaxe Scripted Pipeline, cela pourrait ressembler à ceci:

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

  stage('Checkout') {
    checkout scm
  }

  stage('Build') {
    bat "${msbuild} SimpleWindowsProject.sln"
  }
}
11
Nick Jones

Pour tous ceux qui ont ce problème et essaient juste de comprendre ce que représente Tool dans Jenkins et où il est configuré, voir les captures d'écran suivantes:

Allez dans Manage Jenkins -> Global Tool Configuration:
Global Tool Configuration


Faites défiler jusqu'à MSBuild et cliquez sur le bouton pour développer la section:
MSBuild tool installations


Ici vous pouvez voir quel nom d'outil utiliser pour référencer MSBuild (ou en ajouter un):
MSBuild tool name


Ensuite, vous pouvez le référencer par exemple comme ceci: bat "\"${tool '15.0'}\" solution.sln /p:Configuration=Release /p:Platform=\"x86\" (l'exemple n'est pas une syntaxe déclarative, mais devrait montrer l'idée)

2
jumbo

Bien que la réponse fournie fonctionne certainement, il vous suffit de fournir le nom complet correct de l'outil.

Dans notre installation, nous avions trois versions différentes de MSBuild et je pouvais simplement utiliser la suivante

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

2
pfeigl

Vous devez définir MSBuild dans Jenkins => Gérer Jenkins => Configuration globale de l’outil ou utiliser un autre nom d’outil déjà défini.

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

Attention: faites attention au chemin défini. Cela pointe-t-il sur un dossier ou sur msbuild.exe? Vous devrez peut-être ajouter msbuild.exe:

 ${tool 'VS2017'}\msbuild.exe

Un instantané simple pour expliquer le concept:  How to use Jenkins tool paths in scripts

0
addmoss