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

问题描述

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

  • 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
    }
}

解决方法

我正在尝试使用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
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...