Jenkins函数定义:使用函数参数调用批处理文件

时间:2018-04-16 19:37:38

标签: batch-file jenkins-pipeline

以下是我在管道中的一大块代码:

def doBuild(folder, script, scriptArguments = '') {
   bat '''cd folder
          call script scriptArgument'''
}

所以基本上,它是一个Windows命令说:移动到这个目录,然后调用这个脚本。

当然,在执行期间,该命令将作为&#cd; cd文件夹'执行。并且会失败。

如何确定'文件夹'被参数?

中传递的值替换

编辑:

根据Vitalii的建议,我尝试了以下代码:

/* Environment Properties */
repository_name = 'toto'
extra_repository_branch = 'master'
branch_to_build = "${env.BRANCH_NAME}"
version = "${branch_to_build}_v1.5.4.${env.BUILD_NUMBER}"

/* Methods definitions properties */
def doTag() {
    dir(repository_name) {
        String tagCommand = """git tag -m "Release tag ${env.BUILD_URL}" ${version}"""
        String pushCommand = "git push --tags origin ${branch_to_build}"

        bat '''
            call $tagCommand
            call $pushCommand'''
    }
}

这是输出:

  

C:\ Jenkins \ toto>调用$ tagCommand' $ tagCommand'不被承认   作为内部或外部命令,可操作程序或批处理文件。

     

C:\ Jenkins \ toto>调用$ pushCommand' $ pushCommand'不是   被认可为内部或外部命令,可操作程序或   批处理文件。

非常感谢你的时间

2 个答案:

答案 0 :(得分:0)

您可以使用string interpolation

bat """cd $folder
     call $script $scriptArgument"""

答案 1 :(得分:0)

所以我不认为首先是这种情况,但它确实在What's the difference of strings within single or double quotes in groovy?

中得到了答案

使用单引号,文本被视为升级。使用双重代码,它将正确解释$ tagCommand。工作版本是:

/* Methods definitions properties */

def doTag() {
    dir(repository_name) {
        String tagCommand = """git tag -m "Release tag ${env.BUILD_URL}" ${version}"""
        String pushCommand = "git push --tags origin ${branch_to_build}"

        bat """call $tagCommand
            call $pushCommand"""
    }
}