Jenkins Pipeline-如何使用“工具”选项指定自定义工具?

我有一个通过自定义工具插件在Jenkins中定义的自定义工具。如果创建自由样式项目,则该Install custom

tools选项在执行期间会正确找到并使用该工具(Salesforce DX)。

但是,我找不到通过管道文件执行相同操作的方法。我已经使用管道语法摘要生成器来获取:

tool name: 'sfdx', type: 'com.cloudbees.jenkins.plugins.customtools.CustomTool'

我已将其放入我的阶段定义中:

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')

}

但我收到一条错误消息,指出 line 2: sfdx: command not found

我应该使用其他片段吗?

有关信息的完整Jenkinsfile:

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)

}

}

我使用此示例Jenkinsfile取得了一些进展, 现在的阶段如下所示:

        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"

}

不幸的是,尽管看起来Jenkins现在正在寻找并运行sfdx工具,但出现了一个新错误:

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

回答:

我遇到了同样的问题。我得到了这个解决方法:

 environment {

GROOVY_HOME = tool name: 'Groovy-2.4.9', type: 'hudson.plugins.groovy.GroovyInstallation'

}

stages {

stage('Run Groovy') {

steps {

bat "${groovy_home}/bin/groovy <script.name>"

}

}

}

某种程度上PATH,默认情况下不添加工具路径(这是我的1.6

Jenkins服务器安装中的习惯)。${groovy_home}在执行bat命令时添加可以为我解决此问题。这种调用工具的方法基本上是从脚本化管道语法中借用的。我将其用于所有自定义工具(不仅限于groovy)。

工具部分:

tool name: 'Groovy-2.4.9', type: 'hudson.plugins.groovy.GroovyInstallation'

是像您一样由摘要生成器生成的。

根据Jenkins用户的邮件列表,最终解决方案的工作仍在进行中,因此我的解决方案确实可以解决。

以上是 Jenkins Pipeline-如何使用“工具”选项指定自定义工具? 的全部内容, 来源链接: utcz.com/qa/428545.html

回到顶部