Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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
Jenkins 脚本不允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods编写java.io.File java.lang.String_Jenkins_Groovy_Jenkins Pipeline_Jenkins Groovy_Hashicorp Vault - Fatal编程技术网

Jenkins 脚本不允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods编写java.io.File java.lang.String

Jenkins 脚本不允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods编写java.io.File java.lang.String,jenkins,groovy,jenkins-pipeline,jenkins-groovy,hashicorp-vault,Jenkins,Groovy,Jenkins Pipeline,Jenkins Groovy,Hashicorp Vault,我正在尝试使用Jenkins创建vault部署。为我的回购协议干杯 当运行脚本时,我得到 不允许脚本使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods编写java.io.File java.lang.String。管理员可以决定是否批准或拒绝此签名。问题 我在添加阶段生成变量后遇到了这个问题。 如果我在代码中删除这个阶段,其他阶段可以工作,但它们不能完成任务。这是因为它需要为vault部署获取令牌,并且需要从.tfvar

我正在尝试使用Jenkins创建vault部署。为我的回购协议干杯

当运行脚本时,我得到

不允许脚本使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods编写java.io.File java.lang.String。管理员可以决定是否批准或拒绝此签名。问题

我在添加阶段生成变量后遇到了这个问题。 如果我在代码中删除这个阶段,其他阶段可以工作,但它们不能完成任务。这是因为它需要为vault部署获取令牌,并且需要从.tfvars文件中获取令牌

在GitHub上共享我的变量不是一个好主意,这就是为什么我试图通过Jenkins创建vault.tfvars,并在运行管道作业之前提供任何令牌

有人知道如何解决这个问题吗??? 如果某些部分不清楚,请随时提问

如果我找到了这个问题的解决方案,我将在这里与我的GitHub链接共享。 谢谢

这是我的代码Jenkinsfile.groovy

node('master') {
  properties([parameters([
    string(defaultValue: 'plan', description: 'Please provide what action you want? (plan,apply,destroy)', name: 'terraformPlan', trim: true), 
    string(defaultValue: 'default_token_add_here', description: 'Please provide a token for vault', name: 'vault_token', trim: true)
    ]
    )])
    checkout scm
    stage('Generate Vars') {
        def file = new File("${WORKSPACE}/vaultDeployment/vault.tfvars")
        file.write """
        vault_token              =  "${vault_token}"
        """
      }
    stage("Terraform init") {
      dir("${workspace}/vaultDeployment/") {
        sh 'ls'
        sh 'pwd'
        sh "terraform init"
      }
    stage("Terraform Plan/Apply/Destroy"){
      if (params.terraformPlan.toLowerCase() == 'plan') {
        dir("${workspace}/vaultDeployment/") {
          sh "terraform plan -var-file=variables.tfvars"
        }
      } 
      if (params.terraformPlan.toLowerCase() == 'apply') {
          dir("${workspace}/vaultDeployment/") {
            sh "terraform apply --auto-approve"
          }
        } 

      if (params.terraformPlan.toLowerCase() == 'destroy') {
         dir("${workspace}/vaultDeployment/") {
            sh "terraform destroy --auto-approve"
          }
      }
    }
  }
}

一般来说,我们选择管道在Groovy沙盒中执行,出于安全考虑,Groovy沙盒在某些方面有限制。比如使用new关键字,使用静态方法

但您需要Jenkins管理员在Jenkins>Manage Jenkins>in-process Script Approval中将限制添加到白名单中

为了编写文件,Jenkins管道提供了没有此类限制的替代方案

writeFile file: '<file path>',  text: """
    vault_token              =  "${vault_token}"
    """

一般来说,我们选择管道在Groovy沙盒中执行,出于安全考虑,Groovy沙盒在某些方面有限制。比如使用new关键字,使用静态方法

但您需要Jenkins管理员在Jenkins>Manage Jenkins>in-process Script Approval中将限制添加到白名单中

为了编写文件,Jenkins管道提供了没有此类限制的替代方案

writeFile file: '<file path>',  text: """
    vault_token              =  "${vault_token}"
    """

正如@yong已经指出的,在我们没有管理控制的环境中,实现这一点并避免最终限制的正确方法是使用

i、 e:

这样做的好处是,从完全受管理的环境迁移到受限制的环境将是无痛的。
子文件夹,如示例中的“tmp”,将自动创建,代码本身非常冗长,因为@yong已经指出了实现这一点的正确方法,并避免了在我们没有管理控制的环境中使用的最终限制

i、 e:

这样做的好处是,从完全受管理的环境迁移到受限制的环境将是无痛的。
子文件夹,如示例中的“tmp”,将自动创建,代码本身非常详细

谷歌的第一个结果就是我使用jenkins创建了Vault部署。我将这些限制添加到白名单中,我的代码确实有效!这是Google中更新的codeFirst结果,我使用jenkins创建了Vault部署。我将这些限制添加到白名单中,我的代码确实有效!这是最新的代码谢谢yong!我把这些限制加入了白名单,它确实对我有用!谢谢你,勇!我把这些限制加入了白名单,它确实对我有用!