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

Jenkins管道和java.nio.file。*方法的问题

孔运良
2023-03-14
问题内容

我正在尝试使用java.nio.file。*中的方法在Jenkins管道中执行一些基本文件操作。无论代码所在的节点块如何,代码都在主节点上执行。在管道中,我已经验证了各种节点块是正确的-
它们唯一地标识特定的节点。但是,pathExists(以及其他移动,复制或删除文件的代码)始终在主节点上执行。任何想法正在发生或如何解决?

import java.nio.file.*

String slavePath = 'C:\\Something\\only\\on\\slave\\node'
String masterPath = 'D:\\Something\\only\\on\\master\\node'

def pathExists (String pathName)
{
    def myPath = new File(pathName)
    return (myPath.exists()) 
}

stage('One') 
{
    node ('slave')
    {
        bat returnStatus: true, script: 'set'
        println (pathExists(slavePath))     // Should be true but is false.
        println (pathExists(masterPath))    // Should be false but is true.
    }
    node ('master')
    {
        bat returnStatus: true, script: 'set'
        println (pathExists(slavePath))     // false
        println (pathExists(masterPath))    // true
    }
}

问题答案:

这是管道脚本的规范。它写在教程中。

  • readFile步骤从工作空间中加载文本文件并返回其内容 (请勿尝试使用java.io.File方法-
    这些将引用Jenkins运行所在的主文件上的文件,而不是当前工作空间中的文件)

  • 还有一个writeFile步骤可以将内容保存到工作空间中的文本文件中

  • fileExists 步骤检查文件是否存在而不加载它。

您可以在节点中使用这些Jenkins步骤来代替java.io.Filejava.nio.file.Files如下所述。

String slavePath = 'C:\\Something\\only\\on\\slave\\node'
String masterPath = 'D:\\Something\\only\\on\\master\\node'

stage('One') 
{
    node ('slave')
    {
        bat returnStatus: true, script: 'set'
        println fileExists(slavePath)     // Should be true
        println fileExists(masterPath)    // Should be false
    }
    node ('master')
    {
        bat returnStatus: true, script: 'set'
        println fileExists(slavePath)     // false
        println fileExists(masterPath)    // true
    }
}


 类似资料:
  • 问题内容: 我正在尝试在管道脚本中同步到Perforce,但是从文档中我看不到设置“工作区行为”的方法,即使插件本身似乎具有该功能。 我想要的“工作区”等同于设置“手册(自定义视图)”我可以在UI所描述的配置在这里。我需要将什么参数传递给任务以实现该目标? 问题答案: 您将需要使用完整的DSL,DSL仅是基本的。最简单的方法是使用摘要生成器(“ 管道语法” 链接),然后从SCM列表中选择。 然后,

  • 我使用Jenkins和Build Pipeline插件来构建一些相当复杂的项目,这些项目需要多个编译步骤: 构建源RPM。 构建二进制RPM(这是执行两次,一次为每个平台)。 部署到YUM仓库。 我解决构建需求的策略包括将公共工作拆分为参数化作业,这些作业可以跨项目和分支重用,每个作业代表管道中的一个阶段。每个阶段都由参数触发,并将构建工件传递给管道中的下一个作业。然而,我在这个策略上遇到了一些麻

  • 我正在尝试从Jenkins管道使用helm部署容器。我已经为jenkins安装了库伯内特斯插件,并在本地运行kubernetes URL和凭据中的配置文件中提供了它。当我执行时,它显示。 但是当我从管道运行helm install命令时,它会出错。 注意:我可以使用 CLI 以及通过使用和传递信誉文件变量名称(在 jenkins 凭据中创建)从 Jenkins 管道执行所有操作。我只想这样做,而不

  • 美好的一天, 我尝试在新的Jenkins实例上设置多分支管道,在扫描多分支管道日志中遇到了以下错误: 没有这样的文件:E:\Continuous Integration\Jenkins\jobs\Enhanced API\indexing\indexing.log 根据jenkins.err.log,我遇到了一个 这个Jenkins的版本是2.85,带有以下版本的Git插件: Git客户端插件-2

  • 我在Jenkins管道中使用下面的Groovy脚本来调用自由风格的作业,但它最终出现了“没有这样的DSL方法‘构建’”错误。

  • 我正在尝试从管道中自动创建Jenkins管道构建。 我有一个管道,它创建一个比特桶存储库并向其提交一些代码,包括一个Jenkinsfile。 我需要向此管道添加另一个步骤,然后为其创建管道生成,这将运行 Jenkinsfile 中的步骤。 我认为Jobs DSL应该能够处理这一点,但我找到的文档非常稀少,我仍然不完全确定是否有可能或如何做到这一点。 任何帮助都将不胜感激。我想生成的Pipeline