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

jenkins管道:shell脚本无法获取更新的环境变量

齐元章
2023-03-14
问题内容

在Jenkins中,我希望获得用户输入并将其传递给Shell脚本以供进一步使用。
我尝试将其设置为环境变量,但是shell脚本无法获取最新值,而旧值是echo。

pipeline {
    agent none
    environment{
        myVar='something_default'
    }

    stages {
        stage('First stage') {
            agent none
            steps{
                echo "update myVar by user input"
                script {
                    test = input message: 'Hello',
                    ok: 'Proceed?',
                    parameters: [
                        string(name: 'input', defaultValue: 'update it!', description: '')
                    ]
                    myVar = "${test['input']}"

                }
                echo "${myVar}"  // value is updated
            }
        }
        stage('stage 2') {
            agent any
            steps{
                echo "${myVar}" // try to see can myVar pass between stage and it output expected value
                sh("./someShell.sh") // the script just contain a echo e.g. echo "myVar is ${myVar}"
                                     // it echo the old value. i.e.something_default

            }
        }
    }
}

问题答案:

您需要在阶段之间传递变量作为环境变量,例如:

stage("As user for input") {
    steps {
        env.DO_SOMETING = input (...)
        env.MY_VAR = ...
    }
}
stage("Do something") {
    when { environment name: 'DO_SOMETING', value: 'yes' }
    steps {
        echo "DO_SOMETING has the value ${env.DO_SOMETHING}"
        echo "MY_VAR has the value ${env.MY_VAR}"
    }
}


 类似资料:
  • 我正在尝试使用groovy构建脚本将构建管道迁移到“管道插件”。 我的管道通常是: 测试(梯度) 我想在我的jenkins构建脚本中使用像version/group等的gradle变量来发布到artiFactory中的正确文件夹中。这是artiFactory插件过去会为我处理的事情。如何实现? 对于单个gradle项目,我使用如下内容:

  • 问题内容: 我能够运行以下shell脚本,但无法从Jenkins管道代码运行。 尝试1。 输出: 尝试2: 尝试过sh“”“ 输出 : 美元符号后的非法字符串体字符;解决方案:要么转义文字美元符号,要么将值表达式括起来 有人能帮我吗? 问题答案: 这应该工作。 您还需要在调用下面的新subshel​​l时转义$

  • 问题内容: 是否有任何环境变量可用于获取Jenkins管道标题? 我知道我们可以使用它来获得自由职业的头衔,但是有什么可以用来获取管道名称的东西吗? 问题答案: 您可以使用相同的名称(例如或)从groovy访问相同的环境变量。 从文档中: 可以从Groovy代码中以env.VARNAME或仅以VARNAME的形式访问环境变量。您也可以写入这些属性(仅使用env。前缀): 这些定义也将在构建期间或构

  • 希望有人能帮忙——我的Jenkins实例中安装了以下插件——但我似乎无法掌握下面的Git变量。我需要这些来完成我们的CI设置。有什么我遗漏的吗? 我把它们传递给他们,就像: 嘘builder@10.10.10.10“/build-pass.sh$GIT_BRANCH” git插件设置了几个可以在脚本中使用的环境变量: > GIT_COMMIT-当前的SHA GIT_BRANCH-当前使用的分支的名

  • 我正在使用位于git存储库中的Jenkins文件。我已经使用来自scm的管道脚本配置了新作业,该脚本指向我的JenkinsFile。我试图在我的Jenkins file pipeline脚本中使用git模块,以便从我的git repo中提取我的数据,而不需要配置prestatic变量,并且仅仅使用在我的作业中已经配置的scm pipeline脚本下的存储库URL变量。在我的Jenkins管道脚本中

  • 问题内容: Jenkins脚本化的管道。两个问题: 我有一个全局变量var,我正尝试在shell内访问其值。但它什么也没打印 var的值是使用shell脚本在其中一个阶段中设置的,以便在下一个阶段中进行访问,但它在shell中不打印任何内容。 我想念什么?(请参见下面的脚本) 问题答案: 您的示例不起作用,因为您使用的是带单引号的字符串文字。从Groovy手册(重点是我的): 任何Groovy的表