Jenkins 对自定义管道步骤实现的配置体的评估

Jenkins 对自定义管道步骤实现的配置体的评估,jenkins,groovy,shared-libraries,jenkins-pipeline,Jenkins,Groovy,Shared Libraries,Jenkins Pipeline,对于自定义Jenkins管道步骤,我有一些使用此步骤的管道,如: library 'infrastructure' infrastructurePipeline { project ='jenkins' artifact = ['master', 'backup'] dockerRegistry = [ credentialsId: 'dockerRegistryDeployer', url : "http://${en

对于自定义Jenkins管道步骤,我有一些使用此步骤的管道,如:

library 'infrastructure'

infrastructurePipeline {
    project ='jenkins'
    artifact = ['master', 'backup']

    dockerRegistry = [
            credentialsId: 'dockerRegistryDeployer',
            url : "http://${env.DOCKER_REGISTRY}"
    ]
}
但是,在此上下文中,变量
env
似乎没有绑定,因此无法计算表达式

我可以用
System.getenv()
替换
env
,它会工作的。但这带来了一个我宁愿避免的副作用。我必须批准使用被警告为安全漏洞的
System.getenv()

自定义步骤按照中的建议实施配置评估

该步骤最相关的代码位于
vars/infrastructurePipeline.groovy

def call(Closure body) {
    // evaluate the body block, and collect configuration into the object
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()

    def label=config.label ?: 'docker'

    String tag = env.BUILD_NUMBER
    String deliveryTag=null

    String project = config.project
    def artifact = config.artifact
    ...
}

能否显示
infrastructurePipeline
方法的主体和
infrastructure
库?这将有助于理解您是如何编写函数的
System.getenv()
将尝试获取运行脚本的Jenkins主机的环境,这就是为什么会出现脚本安全批准问题。您可能不希望这样。已将请求的代码添加到问题中。