J'ai un outil personnalisé défini dans Jenkins via le plugin Custom Tools. Si je crée un projet freestyle, l'option Install custom tools
trouve et utilise correctement l'outil (Salesforce DX) pendant l'exécution.Jenkins Pipeline - Comment utiliser l'option 'tool' pour spécifier un outil personnalisé?
Cependant, je ne peux pas trouver un moyen de faire la même chose via un fichier pipeline. Je l'ai utilisé le générateur d'extrait de syntaxe de pipeline pour obtenir:
tool name: 'sfdx', type: 'com.cloudbees.jenkins.plugins.customtools.CustomTool'
J'ai mis cela dans ma définition de la scène:
stage('FetchMetadata') { print 'Collect Prod metadata via SFDX' tool name: 'sfdx', type: 'com.cloudbees.jenkins.plugins.customtools.CustomTool' sh('sfdx force:mdapi:retrieve -r metadata/ -u DevHub -k ./metadata/package.xml') }
mais je reçois un message d'erreur indiquant line 2: sfdx: command not found
Y a-t-il une autre façon d'utiliser cet extrait?
pleine Jenkinsfile pour info:
node { currentBuild.result = 'SUCCESS'
try {
stage('CheckoutRepo') {
print 'Get the latest code from the MASTER branch'
checkout scm
}
stage('FetchMetadata') {
print 'Collect Prod metadata via SFDX'
tool name: 'sfdx', type: 'com.cloudbees.jenkins.plugins.customtools.CustomTool'
sh('sfdx force:mdapi:retrieve -r metadata/ -u DevHub -k ./metadata/package.xml')
}
stage('ConvertMetadata') {
print 'Unzip retrieved metadata file'
sh('unzip unpackaged.zip .')
print 'Convert metadata to SFDX format'
sh('/usr/local/bin/sfdx force:mdapi:convert -r metadata/unpackaged/ -d force-app/')
}
stage('CommitChanges') {
sh('git add --all')
print 'Check if any changes need committing'
sh('if ! git diff-index --quiet HEAD --; then echo "changes found - pushing to repo"; git commit -m "Autocommit from Prod @ $(date +%H:%M:%S\' \'%d/%m/%Y)"; else echo "no changes found"; fi')
sshagent(['xxx-xxx-xxx-xxx']) {
sh('git push -u origin master')
}
}
}
catch (err) {
currentBuild.result = 'FAILURE'
print 'Build failed'
error(err)
}
}
MISE À JOUR J'ai fait quelques progrès en utilisant this example Jenkinsfile Mon scène ressemble maintenant à ceci: stage('FetchMetadata') { print 'Collect Prod metadata via SFDX' def sfdxLoc = tool 'sfdx' sh script: "cd topLevel; ${sfdxLoc}/sfdx force:mdapi:retrieve -r metadata/ -u DevHub -k ./metadata/package.xml" }
Malheureusement, bien qu'il semble que Jenkins est maintenant de trouver et d'exécuter l'outil de sfdx, je reçois une nouvelle erreur:
TypeError: Cannot read property 'run' of undefined at Object.<anonymous> (/var/lib/jenkins/.cache/sfdx/tmp/heroku-script-509584048:20:4) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:394:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:509:3