gpt4 book ai didi

jenkins - Jenkins groovy 文件中的 File.exists() 不起作用

转载 作者:行者123 更新时间:2023-12-04 17:38:22 24 4
gpt4 key购买 nike

我想在我的 Jenkins 作业中创建一个 groovy 函数,它查看文件夹并删除所有超过 X 天的文件。
所以我开始在互联网上寻找并找到不同类型的解决方案。
起初我创建了一个 .groovy在我的本地 PC 上使用 Visual Studio Code 文件以了解它是如何工作的。这就是为什么我的代码看起来与互联网上的代码不相似的原因,因为我对其进行了更改,以便了解代码的工作原理。

def deleteFilesOlderThanDays(int daysBack, String path) {
def DAY_IN_MILLIS = 24 * 60 * 60 * 1000
File directory = new File(path)

if(directory.exists()){
File[] listFiles = directory.listFiles()

for(File listFile : listFiles) {
def days_from_now = ( (System.currentTimeMillis() - listFile.lastModified()) /(DAY_IN_MILLIS))
if(days_from_now > daysBack) {
println('------------')
println('file is older')
println(listFile)
}
else{
println('------------')
println('File is not older')
println(listFile)
}
}//End: for(File listFile : listFiles) {
}//End: if(directory.exists()){
}
(我知道,代码不会删除任何东西。只是为了我的理解)
第二步是将这个新创建的函数包含到我的 Jenkins groovy 文件中。但从那以后我就绝望了。
我遇到的问题是,如果文件夹确实存在,我在代码开始时没有得到肯定的结果。
线路:
if(directory.exists()){
让我遇到很多问题,我不清楚为什么。
我尝试了很多类型的版本,但我还没有找到适合我的解决方案。
我还使用了“管道语法”示例 [Sample Step fileExists],但它对我没有帮助。
我已经包括:
import java.io.File
在我的文件的开头。
我有一个包含在 Jenkins 工作中的基本文件。该文件包括我的库文件。此库文件之一是 file.groovy .在基本的 Jenkins 文件中,我执行了函数 file.deleteFilesOlderThanDays() (为了测试,我不使用任何参数)。
我的测试函数中的代码是:
def deleteFilesOlderThanDays() {

dir = '.\\ABC'
echo "1. ----------------------------------------"
File directory1 = new File('.\\ABC\\')
exist = directory1.exists()
echo 'Directory1 name is = '+directory1
echo 'exist value is = '+exist
echo "2. ----------------------------------------"
File directory2 = new File('.\\ABC')
exist = directory2.exists()
echo 'Directory2 name is = '+directory2
echo 'exist value is = '+exist
echo "3. ----------------------------------------"
File directory3 = new File(dir)
exist = directory3.exists()
echo 'Directory3 name is = '+directory3
echo 'exist value is = '+exist
echo "4. Pipeline Syntax ------------------------"
exist = fileExists '.\\ABC'
echo 'exist value is = '+exist
echo "5. ----------------------------------------"
File directory5 = new File(dir)
echo 'Directory5 name is = '+directory5
// execute an error
// exist = fileExists(directory5)
exist = fileExists "directory5"
echo 'exist value is = '+exist
echo "6. ----------------------------------------"
exist = fileExists(dir)
echo 'exist value is = '+exist

File[] listFiles = directory5.listFiles()
echo 'List file = '+listFiles
}
Jenkins 控制台输出中的输出是:(我稍微清理了一下......)
1. ----------------------------------------
Directory1 name is = .\ABC\
exist value is = false
2. ----------------------------------------
Directory2 name is = .\ABC
exist value is = false
3. ----------------------------------------
Directory3 name is = .\ABC
exist value is = false
4. Pipeline Syntax ------------------------
exist value is = true
5. ----------------------------------------
Directory5 name is = .\ABC
exist value is = false
6. ----------------------------------------
exist value is = true

List file = null
我只在第 4 步和第 6 步中得到一个真正的值。所以我可以确定该文件夹确实存在。
所以对我来说,命令似乎是:
File directory = new File(dir)
在我的情况下不能正常工作。
我无法创建 listFile变量,因为目录不会被正确初始化。
对我来说也不清楚我应该使用哪种命令。 groovy 示例始终使用如下函数:
 .exists()
但是在 Jenkins 示例中,我总是找到这样的代码:
  fileExists()
为什么 groovy 和 Jenkins groovy 风格之间存在一些差异?应该是同一个矿石吧?
有没有人对我有想法或可以告诉我我做错了什么?

最佳答案

您可能会从一个类似问题的答案中受益:

java.io.File方法将引用运行 Jenkins 的主机上的文件,因此不在从机上的当前工作区中。

要引用从机上的文件,您应该使用 readFile 方法

def dir = readFile("${WORKSPACE}/ABC");

Link to original answer

关于jenkins - Jenkins groovy 文件中的 File.exists() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55626377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com