Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在詹金斯作业的中间分配一个Env变量_Java_Jenkins_Groovy_Jenkins Pipeline - Fatal编程技术网

Java 如何在詹金斯作业的中间分配一个Env变量

Java 如何在詹金斯作业的中间分配一个Env变量,java,jenkins,groovy,jenkins-pipeline,Java,Jenkins,Groovy,Jenkins Pipeline,我有一个包含管道的Jenkins文件。我设置了一个参数,可以选择传递,如果没有设置参数,也会设置默认值: parameters { string(name: 'MY_VAR', defaultValue: 'foo', description: 'my var that can be optional') } 在这些阶段的中间,我想用一些其他值覆盖这个“my_var”(仅在某些时候,并且只有在传递了一些其他特定参数的情况下) 到目前为止,这是可行的: stage('Bu

我有一个包含管道的Jenkins文件。我设置了一个参数,可以选择传递,如果没有设置参数,也会设置默认值:

parameters {
    string(name: 'MY_VAR', defaultValue: 'foo', description: 'my var that can be optional')
}
在这些阶段的中间,我想用一些其他值覆盖这个“my_var”(仅在某些时候,并且只有在传递了一些其他特定参数的情况下)

到目前为止,这是可行的:

        stage('Build') {
            steps {
                env.MY_VAR="foobar"
            }
        }
但我想从文件中读取该变量,所以我想做如下操作:

        stage('Build') {
            steps {
                // Of course none of following work
                env.MY_VAR=$(cat /tmp/my-file)
               
                //or
                sh "new_var=$(cat /tmp/my-file)"
                env.MY_VAR=$new_var 
            }
        }

如何实现这一点?

我想您需要使用脚本块。在脚本块中定义变量将允许您在整个管道中使用它们,而不仅仅是在单独的阶段

stage ('Build') {
  steps {
    script {
      env.MY_VAR=sh returnStdout: true, script: """ cat /tmp/my-file """
      echo "${env.MY_VAR}"
    }
  }
}

我想您需要使用脚本块。在脚本块中定义变量将允许您在整个管道中使用它们,而不仅仅是在单独的阶段

stage ('Build') {
  steps {
    script {
      env.MY_VAR=sh returnStdout: true, script: """ cat /tmp/my-file """
      echo "${env.MY_VAR}"
    }
  }
}

实际上,您可以在脚本语句中使用任何groovy库。 例如,可以使用File类读取文本文件:


pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    def filePath = "/tmp/my-file"
                    env.VAR = new File(filePath).text
                }
            }
        }
        stage('Test') {
            steps {
                echo env.VAR
            }
        }
    }
}

实际上,您可以在脚本语句中使用任何groovy库。 例如,可以使用File类读取文本文件:


pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    def filePath = "/tmp/my-file"
                    env.VAR = new File(filePath).text
                }
            }
        }
        stage('Test') {
            steps {
                echo env.VAR
            }
        }
    }
}

这看起来是一个清晰的答案,可能会奏效,但在我的jenkins设置中,我遇到了以下错误:
RejectedAccessException:Scripts不允许使用新的java.io.File java.lang.String
。我没有访问Jenkins设置的权限,但这看起来也是一个干净的解决方案。这看起来是一个干净的答案,可能会起作用,但在我的Jenkins设置中,我遇到了以下错误:
RejectedAccessException:Scripts不允许使用新的java.io.File java.lang.String
。我无法访问Jenkins设置,但这看起来也是一个干净的解决方案。