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
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"
}
}
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:
Faites défiler jusqu'à MSBuild et cliquez sur le bouton pour développer la section:
Ici vous pouvez voir quel nom d'outil utiliser pour référencer MSBuild (ou en ajouter un):
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)
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]'}
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