2016-08-17 2 views
2

Я создал на конвейере, и я хочу выполнить один sql-запрос в нем. Я написал следующие утверждения (только две строки кода, отсутствие импорта/класс и т. Д.) И выдает ошибку при ее выполнении.Как выполнить инструкцию SQL в сценарии Pipeline Jenkins?

import groovy.sql.Sql 
def sql = Sql.newInstance("jdbc:mysql://myIP:3306/dbName", "uname","password", "com.mysql.jdbc.Driver") 
sql.execute "select count(*) from TableName" 

Я получаю эту ошибку

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod groovy.sql.Sql newInstance java.lang.String java.lang.String java.lang.String java.lang.String 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectStaticMethod(StaticWhitelist.java:174) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onStaticCall(SandboxInterceptor.java:142) 
    at org.kohsuke.groovy.sandbox.impl.Checker$2.call(Checker.java:180) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedStaticCall(Checker.java:177) 
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:91) 
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:15) 
    at WorkflowScript.run(WorkflowScript:3) 
    at ___cps.transform___(Native Method) 
    at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:55) 
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106) 
    at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:79) 
    at sun.reflect.GeneratedMethodAccessor841.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72) 
    at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21) 
    at com.cloudbees.groovy.cps.Next.step(Next.java:58) 
    at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154) 
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19) 
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:33) 
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:30) 
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108) 
    at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:30) 
    at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:164) 
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:277) 
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$000(CpsThreadGroup.java:77) 
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:186) 
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:184) 
    at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:47) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112) 
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Finished: FAILURE 

Pls помощь. Заранее спасибо.

ответ

0

Просто импортируйте Sql пакета:

import groovy.sql.Sql 


def sql = Sql.newInstance("jdbc:mysql://myIP:3306/dbName", "uname","password", "com.mysql.jdbc.Driver") 
sql.execute "select count(*) from TableName" 
+0

Обновлен мой вопрос с ошибками и оператором импорта. Импорт groovy.sql.sql не работал :-( – Peter

2

От ошибки это выглядит, как вы запускаете скрипт в изолированном режиме, в этом случае есть много ограничений, что вы можете выполнить в скрипте. Например, следующий не будет работать ни:

echo binding.hasVariable("test") 

То, что вы можете сделать:

  • Если вы не хостинг Дженкинс сами вы не можете сделать многое из самого сценария трубопровода, вы должны создайте отдельный процесс для выполнения select, который вы хотите сделать, и передайте результат сценарию конвейера. Вы можете сделать это, добавив, например, строгий скрипт к подчиненному устройству и выполнить его из конвейера.

Всех сценарии ниже, предполагают, что вы поливание Дженкинс себя

  • Если вы используете Pipeline script определения у вас есть возможность запускать скрипт не в изолированном режиме (сними Use Groovy Sandbox в конфигурации задания страница). В этом случае, если вы администратор, он должен работать нормально. Если вы не админ следовать советам ниже

  • Если вы используете Pipeline script from SCM определение, то скрипт будет выполняется в режиме sandbox и вы также будете сталкиваться ошибки вас в курсе. Затем администратор должен пойти Управление Дженкинс »В процессе утверждении сценариев и утвердить вызов метода, который был запрещен (просто нажмите на кнопку Approve)

Примечание: выше был протестирован на Дженкинс версии: 2,7 .1

+1

Спасибо за ответ Герджи, но я не очень хорошо знаком с Дженкинсом. Я только что создал на Pipeline> Перейдите на страницу «Настроить»> Добавить код выше в «Pipeline - Скрипт '> Применить и построить его. - Параметр Groovy Sandbox на странице конфигурации заданий уже отключен. - Я одобрил Управление Jenkins. Вызов метода проверки сценария процесса. Во время работы с использованием (Build Now) он дает эта ошибка java.lang.ClassNotFoundException: com.mysql.jdbc.Driver – Peter

Смежные вопросы