0

我创建了以下 groovy 脚本来在 Jenkins 中创建示例作业。

import hudson.model.*
import hudson.node_monitors.*
import hudson.slaves.*
import java.util.concurrent.*
jenkins = Hudson.instance

now=Calendar.instance;
def project_name = 'ARCHIE_DSL_TEST'

println("The build is run at ${now.time}");

freeStyleJob(project_name) {
        disabled(false)
        logRotator(-1, 10)
        description("Our first DSL Generated ServerSpec Job")
        parameters {
                choiceParam("SERVER_FQDN", ["server1.test.com.au", "server2.test.com.au", "server3.test.com.au", "server4.test.com.au"])
                description 'Select a server from the list to test'
        }
        scm {
                git {
                        remote {
                                github("MY_ORG/my_repo", 'ssh', 'github.aus.mydomain.com')
                                branch("*/master")
                        }
                }
        }
        triggers {
                scm("H/15 * * * *")
        }
        steps {
        }
}

当我在 Jenkins 中创建一个作业来运行这个 DSL 时,它可以正常工作并创建一个名为 ARCHIE_DSL_TEST 的作业。

但是,我想做的是使用 curl 运行此作业,并且我一直在运行以下命令。

/usr/bin/curl -k --user 'archie' --data-urlencode "script=$(</var/lib/jenkins/jobs/archie_test/workspace/create_tab.groovy)" https://localhost:8080/scriptText

但是,它给了我一个例外。

构建在 2016 年 1 月 27 日星期三 16:54:20 AEDT 运行 groovy.lang.MissingMethodException:没有方法签名:Script1.freeStyleJob() 适用于参数类型:(java.lang.String, Script1$_run_closure1) 值: [ARCHIE_DSL_TEST, Script1$_run_closure1@9761fdb] 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) 在 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78) 在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) 在 org.codehaus.groovy.runtime 的 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)。 callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145) 在 Script1.run(Script1.groovy:13) 在 groovy.lang.GroovyShell。在 groovy.lang.GroovyShell.evaluate(GroovyShell.java:618) 在 hudson.util.RemotingDiagnostics$Script.call(RemotingDiagnostics .java:139) at hudson.util.RemotingDiagnostics$Script.call(RemotingDiagnostics.java:111) at hudson.remoting.LocalChannel.call(LocalChannel.java:45) at hudson.util.RemotingDiagnostics.executeGroovy(RemotingDiagnostics.java: 108) 在 jenkins.model.Jenkins._doScript(Jenkins.java:3556) 在 jenkins.model.Jenkins.doScriptText(Jenkins.java:3540) 在 sun.reflect.GeneratedMethodAccessor205.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl org.kohsuke.stapler 中的 java.lang.reflect.Method.invoke(Method.java:606) 中的 .invoke(DelegatingMethodAccessorImpl.java:43)。Function$InstanceFunction.invoke(Function.java:298) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96) at org.kohsuke .stapler.MetaClass$1.doDispatch(MetaClass.java:121) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) at org .kohsuke.stapler.Stapler.invoke(Stapler.java:876) 在 org.kohsuke.stapler.Stapler.invoke(Stapler.java:649) 在 org.kohsuke.stapler.Stapler.service(Stapler.java:238) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter( ServletHandler.java:1494) 在 hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:123) 在 hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:59) 在 hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120) ) 在 com.smartcodeltd.jenkinsci.plugin.assetbundler.filters.LessCSS.doFilter(LessCSS.java:46) 在 hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120) 在 hudson.plugins.audit_trail.AuditTrailFilter.doFilter (AuditTrailFilter.java:95) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:114) at org.eclipse.jetty.servlet.ServletHandler$CachedChain .doFilter(ServletHandler.java:1482) 在 hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter. java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87 ) 在 org.acegisecurity.ui.rememberme.RememberMeProcessingFilter 的 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) 的 org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)。doFilter(RememberMeProcessingFilter.java:142) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at hudson.security.ChainedServletFilter$1.doFilter (ChainedServletFilter.java:87) 在 jenkins.security.BasicHeaderProcessor.success(BasicHeaderProcessor.java:140) 在 jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:82) 在 hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java :87) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67) at hudson.security。ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:168) at org.eclipse.jetty.servlet。 ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:第1482章.java:30) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain。doFilter(ServletHandler.java:1474) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 在 org .eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 在 org.eclipse.jetty.server.handler.ContextHandler .doHandle(ContextHandler.java:1086) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 在 org.eclipse.jetty.server。handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)在 org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949) 在 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011) 在 org.eclipse.jetty.http.HttpParser .parseNext(HttpParser.java:651) 在 org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) 在 org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 在 org. eclipse.jetty.io.nio.SslConnection.handle(SslConnection.java:196) 在 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)

我在这里做错了什么?

非常感谢。

4

2 回答 2

1

您可以使用 Job DSL Gradle 示例中的REST API Runner通过 Jenkins REST API 创建或更新作业。

于 2016-01-27T20:25:24.957 回答
0

做你想做的最直接的方法是:

  • 使用“Process Job DSL”构建步骤创建一个 Jenkins 作业,从 SCM 加载您的 create_tabs.groovy
  • 在作业中启用“远程触发构建(例如,从脚本)”构建触发器选项
  • 通过 curl 触发该作业,例如curl http://someserver/job/dsl_job/build
于 2016-01-27T17:12:39.777 回答