gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:56:11 25 4
gpt4 key购买 nike

我通过自定义工具插件在 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)
}
}

更新
我使用 this example 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 users mailing list ,最终解决方案的工作仍在进行中,所以我的解决方案确实是一种解决方法。

关于Jenkins Pipeline - 如何使用 'tool' 选项指定自定义工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com