当前位置: 首页 > 面试题库 >

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

冯星阑
2023-03-14
问题内容

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

UPDATE 我使用此示例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用户的邮件列表,最终解决方案的工作仍在进行中,因此我的解决方案确实可以解决。



 类似资料:
  • 我正在Android应用程序上实现Chrome自定义选项卡(使用最新版本23.3.0)。最新版本的chrome选项卡允许您使用“builder.addToolbarItem()”方法在底部工具栏上添加按钮(根据堆栈溢出的答案,还有其他可自定义的内容。现在,我在为底部工具栏按钮添加操作意图时遇到了一个问题。我为我添加的每个工具栏项设置了两个不同的操作意图。但是,当打开chrome自定义选项卡,并单击

  • 问题内容: 我基于Tkinter创建了一个应用程序,该应用程序使用Matplotlib绘制波形。我不知道如何更改Matplotlib工具栏按钮的工具提示(由于我的应用程序是捷克语,因此我需要翻译英文说明)。我还想更改/翻译或仅删除单击缩放或平移按钮时出现在工具栏面板旁边的说明(,)。 我发现了一些有关如何从工具栏添加或删除按钮的有用提示,但是没有找到有关自定义工具提示/描述的任何建议。我认为这与前

  • 问题内容: 我需要在图表中绘制的条形图中更改默认工具提示的格式。 我不知道我看问题的方向是否正确。我正在寻找的默认格式是 如何重新定义该值? 提前致谢。 问题答案: 该套 ArgumentIndex 值的 系列 , 类别 和 值 。在您的情节上尝试该示例。

  • 主窗口左上方设有自定义建筑工具栏。在不同编辑窗口中,自定义建筑工具栏所设置的功能项略有不同,详见主窗口说明。 主窗口说明 外部场景编辑窗口是指进入 CampusBuilder 场景编辑器时的主窗口。自定义工具栏设有建筑和恢复所有对象可拾取按钮。 建筑:可选择现有的自定义建筑,并进入建筑内部。 恢复所有对象可拾取:可对设置过拾取方式的模型进行重置,即恢复对象被拾取功能。 建筑内部编辑窗口是指进入自定

  • 在Bootstrap 4中,我们已经加了一系列的全局选项,让你能够在项目中轻松定制所有的组件。这些选项通过Sass变量来处理。通过内置的Gruntfile,可以简单改变一个变量的值,并重新编译。 可用的变量 您可以在_variables.scss文件找到这些变量并自定义这些变量。 变量 值 Description $spacer 1rem (默认), 或者任何大于0的值 为间隔工具指定默认的间隔值

  • 问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解