詹金斯(Jenkins):在全局函数的主体中获取环境变量

加扰器

我在PublishGitHub.groovy上有一个共享的全局函数,如下所示:

#!/usr/bin/env groovy
def call(body)
{
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config

    echo "\u001B[32mINFO: Publishing...\u001B[m"
    body()
    echo "\u001B[32mINFO: End Publish...\u001B[m"      
}

还有我的JenkinsFile上的代码:

environment {
    VERSION = "v1.3.${env.BUILD_NUMBER}"
}
stages {
    stage ('Publish WebAPI'){
        steps{
            echo "\u001B[32mINFO: Start Publish...\u001B[m"

            PublishGitHub{
                echo "This is a body with version: ${env.VERSION}"
            }               
        }
    }
}

这是我的输出:

[Pipeline] echo
INFO: Start Publish...
[Pipeline] echo
INFO: Publishing...
[Pipeline] }

并遵循下一个错误:

java.lang.NullPointerException:无法在空对象上获取属性“ VERSION”

因为在我体内无法访问环境变量?

西蒙·斯蒂芬尼克

您的共享库代码在工作流CPS上下文之外运行,这就是为什么您传递给vars脚本的闭包无法识别env属性的原因。您可以通过传递对工作流脚本的引用来解决此问题。如果您这样调用函数

PublishGitHub(this) {
    echo "This is a body with version: ${env.VERSION}"
}

然后对vars/PublishGitHub.groovy脚本进行一些小的修改,例如:

#!/usr/bin/env groovy

def call(config, body) {
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config

    echo "\u001B[32mINFO: Publishing...\u001B[m"
    body()
    echo "\u001B[32mINFO: End Publish...\u001B[m"
}

那么您将成功运行管道:

[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Publish WebAPI)
[Pipeline] echo
[32mINFO: Start Publish...[m
[Pipeline] echo
[32mINFO: Publishing...[m
[Pipeline] echo
This is a body with version: v1.3.537
[Pipeline] echo
[32mINFO: End Publish...[m
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

如果要限制共享库的范围,则始终可以简单地传递env而不是this并更改vars/PublishGitHub.groovy为以下内容:

#!/usr/bin/env groovy

def call(env, body) {
    def config = [
            env: env
    ]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config

    echo "\u001B[32mINFO: Publishing...\u001B[m"
    body()
    echo "\u001B[32mINFO: End Publish...\u001B[m"
}

在这种情况下,您只允许共享库访问环境变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

詹金斯:如何获取声纳环境变量

来自分类Dev

如何在詹金斯中设置环境变量?

来自分类Java

詹金斯注入环境变量

来自分类Dev

詹金斯环境变量丢失

来自分类Dev

詹金斯(Jenkins)环境变量接收流浪逗号,如何防止这种情况发生?

来自分类Dev

詹金斯奴隶-如何添加或更新环境变量

来自分类Dev

基于环境变量的詹金斯管道条件阶段

来自分类Dev

詹金斯:更改顶层环境变量

来自分类Dev

如何在脚本化的詹金斯管道中动态设置环境变量?

来自分类Java

哈得逊/詹金斯插件开发:如何让其他插件的环境变量

来自分类Dev

詹金斯应该在哪里设置环境变量

来自分类Dev

詹金斯 STAGE_NAME 环境变量为空

来自分类Dev

如何阅读詹金斯旧版本注入的环境变量

来自分类Dev

在詹金斯管道脚本中获取gradle变量

来自分类Dev

詹金斯管道中的变量间接?

来自分类Dev

Jenkins:通过全局函数设置环境变量

来自分类Dev

在詹金斯中获取ErrorLevel

来自分类Dev

在詹金斯管道中使用全局变量

来自分类Dev

如何从詹金斯(Jenkins)构建变量获取构建时间戳记?

来自分类Dev

在云函数中获取环境变量

来自分类Dev

如何在可配管的詹金斯SimpleBuildStep插件中获取环境参数?

来自分类Dev

詹金斯(Jenkins)休闲

来自分类Dev

无法在詹金斯(Jenkins)

来自分类Dev

Jenkins中的环境变量

来自分类Dev

詹金斯(Jenkins)挂在“在工作树上”的步骤中

来自分类Dev

在詹金斯(Jenkins)中,“立即构建”选项不再适用

来自分类Dev

在执行外壳中获取Jenkins环境变量

来自分类Dev

从 python 脚本中获取 Jenkins BUILD 环境变量

来自分类Dev

如何获取詹金斯管道中的输入步骤

Related 相关文章

热门标签

归档