Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Groovy 在工作流脚本中使用Jenkins Java API_Groovy_Jenkins_Jenkins Workflow - Fatal编程技术网

Groovy 在工作流脚本中使用Jenkins Java API

Groovy 在工作流脚本中使用Jenkins Java API,groovy,jenkins,jenkins-workflow,Groovy,Jenkins,Jenkins Workflow,我试图从工作流groovy脚本中利用Jenkins Java 我发现很难掌握我能做什么和不能做什么,关于如何做到这一点有什么好的资源吗 现在我要做的是获取工作区路径,我已经得到了 def jenkins = Jenkins.instance; def build = jenkins.getItem(env.JOB_NAME).getBuild(env.BUILD_NUMBER) 但这似乎是一个死胡同,似乎没有任何有用的东西,你实际上可以做这些对象 如果有人可以向我指出任何资源,这些资源提供了可

我试图从工作流groovy脚本中利用Jenkins Java

我发现很难掌握我能做什么和不能做什么,关于如何做到这一点有什么好的资源吗

现在我要做的是获取工作区路径,我已经得到了

def jenkins = Jenkins.instance;
def build = jenkins.getItem(env.JOB_NAME).getBuild(env.BUILD_NUMBER)
但这似乎是一个死胡同,似乎没有任何有用的东西,你实际上可以做这些对象


如果有人可以向我指出任何资源,这些资源提供了可以这样做的有用的例子,或者帮助我解决获得工作区路径的具体问题,这将是非常好的。

这并不能回答您的首要问题,但是env.WORKSPACE将为您提供工作区的绝对路径:)在工作流作业配置中打开代码段生成器,向下滚动,您将看到所有可用环境变量的列表。

您可以使用标准工作流步骤
pwd()
获取工作区路径,而无需使用Jenkins API

就其他情况而言,没有特定的文档总结您可以从工作流脚本使用Jenkins API做什么,因为它只是Jenkins API允许您通常做的任何事情(请参阅)。您需要注意两个注意事项:

  • 几乎所有这样的调用都会被Groovy沙盒拒绝(而且许多调用不安全,无法进入白名单)。这意味着您不能在安全的Jenkins安装中编写此类脚本,除非您是管理员
  • 大多数API对象将不可
    序列化
    ,这意味着您必须将它们的使用封装在标有
    @NonCPS
    注释的方法中。该方法可以作为参数并返回任何可序列化(或基元)类型
  • 目前,没有受支持的方式来访问在本地工作区上下文中定义的Jenkins模型对象。会有帮助的。与此同时,经常有变通办法;例如,如果希望在
    节点{}
    块中使用
    节点
    ,可以使用
    Jenkins.instance.getNode(env.Node_NAME)

如果您试图获取工作区路径以读取某些文件,那么您实际上应该使用作业DSL和
readFileFromWorkspace(filePath)
。 如果您使用的是从机,那么仅仅拥有一个工作区路径并尝试使用
新文件(filePath)
读取文件可能不起作用。 更多细节在这里

env.WORKSPACE给了我空值,它在代码段生成器中确实说它不受支持。对于这种特殊情况,您只需使用
pwd()
步骤即可。