如何在Jenkinsfile中将字符串转换为整数? [英] How can I do string to integer conversion in a Jenkinsfile?

查看:664
本文介绍了如何在Jenkinsfile中将字符串转换为整数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Jenkins文件中包含以下内容:

I have the following in my Jenkinsfile:

pipeline {
    agent none
    environment {
        timeout_mins = 1
    }
    options {
        timeout(time: "${env.timeout_mins}", unit: 'MINUTES')
    }
    stages {
        stage("test print") {
            steps {
                echo "timeout_mins: ${env.timeout_mins}"
                sh "sleep 120"
            }
        }
    }
}

我想在多个地方重复使用timeout_mins之类的环境参数,但是对于某些插件,需要在某些地方将其转换为整数.我在上面的示例中遇到的错误如下:

I'd like to re-use environment params such as timeout_mins in multiple places, but need to convert it to integer in certain places for certain plugins. The error I get with the above example is as follows:

org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty的处理环境 java.lang.IllegalArgumentException:无法为TimeoutStep实例化{time = null,unit = MINUTES}(time:int,unit ?: TimeUnit [NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS]):java.lang. ClassCastException:org.jenkinsci.plugins.workflow.steps.TimeoutStep.time期望为int但收到的类为java.lang.String 在org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264) 在org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:194) 在org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:181) 在org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126) 在org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) 在org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48) 在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 在com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:18)

Processing environment for org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty java.lang.IllegalArgumentException: Could not instantiate {time=null, unit=MINUTES} for TimeoutStep(time: int, unit?: TimeUnit[NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS]): java.lang.ClassCastException: org.jenkinsci.plugins.workflow.steps.TimeoutStep.time expects int but received class java.lang.String at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264) at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:194) at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:181) at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126) at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:48) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:18) at

有人可以在Jenkinsfile中将String转换为int吗?

Does any one have a way to convert from String to int in Jenkinsfile?

我尝试过 time: env.timeout_mins,但这会产生一个空值.

I tried time: env.timeout_mins, but that yields a null.

time: ${env.timeout_mins},得出: WorkflowScript:7:方法调用参数@第7行,第23列. 超时(时间:$ {env.timeout_mins},单位:"MINUTES")

time: ${env.timeout_mins}, yields: WorkflowScript: 7: Method call arguments @ line 7, column 23. timeout(time: ${env.timeout_mins}, unit: 'MINUTES')

time: ${env.timeout_mins}.toInteger(),与上面相同

time: ${env.timeout_mins.toInteger()},与上面相同

还有什么我可以尝试的吗?

Any other things I can try?

推荐答案

并不是转换失败,只是您不能在options块中引用环境变量.

it's not the conversion that's failing, it's just that you can't reference environment variables in the options block.

这也会失败(空指针异常):

this also fails (nullpointer exception):

pipeline {
    agent none
    environment {
        timeout_mins = 'MINUTES'
    }
    options {
        timeout(time: 1, unit: env.timeout_mins)
    }
    stages {
        stage("test print") {
            steps {
                echo "timeout_mins: ${env.timeout_mins}"
                sh "sleep 120"
            }
        }
    }
}

这有效:

def timeout_in_minutes = 1

pipeline {
    agent none
    options {
        timeout(time: timeout_in_minutes, unit: 'MINUTES')
    }
    stages {
        stage("test print") {
            steps {
                echo "timeout_in_minutes: ${env.timeout_in_minutes}"
                sh "sleep 120"
            }
        }
    }
}

这篇关于如何在Jenkinsfile中将字符串转换为整数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆