Скриптам не разрешено использовать staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods write java.io.File java.lang.String - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь создать хранилище с использованием Jenkins. Вот ссылка на мой репо.

При запуске скрипта я получаю

"Сценарии, которым не разрешено использовать staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods, пишут java.io.File java.lang.String. Администраторы могут решить, утвердить или отклонить эту подпись." вопрос.

Я получил эту проблему после добавления этапа "Generate Vars". Если я уберу этот этап в коде, остальные этапы будут работать, но они не завершат работу. Это потому, что ему нужно получить токен для развертывания хранилища и получить его из файла .tfvars.

Не очень хорошая идея делиться своими переменными в GitHub, поэтому я пытаюсь создать vault.tfvars через Jenkins и предоставить любой токен перед запуском конвейерного задания.

Кто-нибудь знает, как это исправить ??? Если какая-то часть не ясна, пожалуйста задавайте вопросы!

Если я найду решение этой проблемы, я поделюсь им здесь со ссылкой на мой 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"
          }
      }
    }
  }
}

1 Ответ

2 голосов
/ 22 апреля 2019

Как правило, мы выбираем конвейер для выполнения в песочнице Groovy, которая имеет ограничения в некоторых аспектах для обеспечения безопасности.Как использовать ключевое слово new, используя статический метод.

Но вам нужно, чтобы администратор Jenkins добавил ограничение для белого списка в jenkins > Manage jenkins > In-process Script Approval

Для записи файла Jenkins предоставляет альтернативный вариант writeFile , который не имеет такого ограничения.

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