当前位置: 首页 > 面试题库 >

使用Groovy从Jenkins主节点访问节点从节点上的文件

柳飞飙
2023-03-14
问题内容

我正在使用Jenkins Build Flow插件来实现并行化。Groovy DSL执行某些文件操作。即使该选项Restrict where this project can be run设置为在特定从属服务器上运行作业,但DSL仍在主服务器上运行。这不是故意的。

有人可以告诉我如何限制DSL在指定的从站上运行吗?即使有一种方法可以通过DSL访问从文件系统,也应该可以。

通常,我们如何使用Groovy从Jenkins主节点访问节点从节点上的文件?

def fp = new hudson.FilePath(build.workspace.channel, "/srv/jenkins/workspace/myworkspace_on_slave_node")
assert fp.exists()      // returns true :)

def ant = new AntBuilder()

if (fp != null) {
  def scanner = ant.fileScanner {    // fails here :(, says /srv/jenkins/workspace/myworkspace_on_slave_node not found
    // grab ALL files requested to be run
    fileset(dir: "$fp", includes: "**/*.java")
  }

  // now lets iterate over - print - and count test files
  int numFiles = 0
  for (f in scanner) {
    println("Found file $f")    
    numFiles++
  }
  println("Total files $numFiles")
}

工作空间位于从属节点上,但是当我尝试将FileSet打开到远程FilePath时,以上代码失败。


问题答案:

Groovy DSL总是在master(在tomcats目录中)上执行。即使您安装了 Node Label Parameter
插件并设置了要在某些特定从站上执行的构建作业。如果要从Groovy
DSL访问从站上的作业工作空间,则可以使用通道。我有一个在构建流程作业工作区中创建文件的示例:

if(build.workspace.isRemote()){
channel = build.workspace.channel
}
String fp = build.workspace.toString() + "\\" + "newfile.txt"
newFile = new hudson.FilePath(channel, fp)
newFile.write("xyz", null)

一种更简单的方法是在特定从属服务器上运行的Execute
Groovy脚本中(而不是在构建流程作业中)在下游作业中执行文件操作。您必须安装节点插件,并在DSL脚本中将从属名称作为参数传递:build(“
jobA”,paramNode:“ nodename”)



 类似资料:
  • 我正在使用 Jenkins Build Flow 插件来实现并行化。Groovy DSL执行某些文件操作。即使选项设置为在特定从服务器上运行作业,DSL也会在主服务器上运行。这不是故意的。 有人能告诉我如何限制DSL在指定的从机上运行吗?即使有一种方法可以通过DSL访问从属文件系统,也应该有效。 一般来说,我们如何使用Groovy从主机访问节点从Jenkins文件? 工作区位于从属节点上,但是当我

  • 问题内容: 我已经设置了一个Jenkins主节点,并且想要在同一网络中添加一个从节点。我需要在从机上安装Jenkins吗?还是可以在不首先安装Jenkins的情况下使用任意机器? 问题答案: 不,您根本不需要在任何从属计算机中安装Jenkins。 如果它是Linux从站,则只需要启用SSH访问即可。如果是Windows计算机,则使用Java并与 Jenkins提供的jar或通过Java Web c

  • 我有一个设置,其中存在一个 JenkinsMaster(jenkins-master)机器和一个JenkinsSlave Node(jenkins-server-one)。Slave Node用于编译Maven项目。这些项目是从Gitlab安装中拉下来的。 在主服务器端运行Jenkins作业时,我在控制台中看到以下错误: [ERROR]您指定的目标需要执行一个项目,但此目录(/var/jenkin

  • 问题内容: 我想将Linux节点设置为Jenkins主服务器的从服务器。我正在阅读有关为Linux机器进行设置的教程。 通过SSH拥有主启动从属代理 Jenkins具有内置的SSH客户端实现,可用于与远程sshd对话并启动从属代理。这是Unix从属服务器最方便,首选的方法,该方法通常具有现成的sshd。单击管理Jenkins,然后单击管理节点,然后单击“新节点”。在此设置中,您将提供连接信息(从属

  • 工作节点1上的Curl对群集IP来说是最合适的(这是运行pod的节点) Curl在其他工作节点上也失败:

  • 我有一些元素具有相同的标记名,但相等的不同值。下面的示例显示了我的解析。 我的问题是如何捕获字符串“x”后面的文本。和“Z”目前我有 但这只是抓取x和Z。我需要什么语法来抓取之后的文本,其中包括Monday和Linux。