Vie*_*wer 5 groovy jenkins jenkins-pipeline
我想在 Jenkins 作业中创建一个常规函数,该函数可以查看文件夹并删除所有早于 X 天的文件。
\n所以我开始在互联网上查找并找到了不同类型的解决方案。
\n首先,我.groovy在本地 PC 上使用 Visual Studio Code 创建一个文件以了解其工作原理。这就是为什么我的代码看起来与互联网上的代码不相似的原因,因为我更改了它以便我了解代码是如何工作的。
def deleteFilesOlderThanDays(int daysBack, String path) {\n def DAY_IN_MILLIS = 24 * 60 * 60 * 1000\n File directory = new File(path)\n\n if(directory.exists()){\n File[] listFiles = directory.listFiles()\n \n for(File listFile : listFiles) {\n def days_from_now = ( (System.currentTimeMillis() - listFile.lastModified()) /(DAY_IN_MILLIS))\n if(days_from_now > daysBack) {\n println('------------')\n println('file is older')\n println(listFile)\n }\n else{\n println('------------')\n println('File is not older')\n println(listFile)\n }\n }//End: for(File listFile : listFiles) {\n }//End: if(directory.exists()){\n}\nRun Code Online (Sandbox Code Playgroud)\n(我知道,代码不会删除任何东西。这只是为了我的理解)
\n第二步是将这个新创建的函数包含到我的 Jenkins Groovy 文件中。但从那时起我就绝望了。
\n我的问题是,如果文件夹确实存在,我一开始就不会从代码中得到积极的结果。
\n该行:
\nif(directory.exists()){\nRun Code Online (Sandbox Code Playgroud)\n给我带来了很多问题,但我不清楚为什么。
\n我已经尝试了很多种版本,但我还没有\xe2\x80\x99t找到适合我的解决方案。\n我还使用了\xe2\x80\x9cPipeline Syntax\xe2\x80\x9d示例[示例步骤文件存在]但它\xe2\x80\x99 对我没有帮助。
\n我已经包括:
\nimport java.io.File\nRun Code Online (Sandbox Code Playgroud)\n在我的文件的开头。
\n我有一个基本文件,包含在 Jenkins 工作中。该文件包括我的库文件。该库文件之一是file.groovy. 在基本的 Jenkins 文件中,我执行该函数file.deleteFilesOlderThanDays()(为了测试,我不使用任何参数)。
我的测试函数的代码是:
\ndef deleteFilesOlderThanDays() {\n\n dir = '.\\\\ABC'\n echo "1. ----------------------------------------"\n File directory1 = new File('.\\\\ABC\\\\')\n exist = directory1.exists()\n echo 'Directory1 name is = '+directory1\n echo 'exist value is = '+exist\n echo "2. ----------------------------------------"\n File directory2 = new File('.\\\\ABC')\n exist = directory2.exists()\n echo 'Directory2 name is = '+directory2\n echo 'exist value is = '+exist\n echo "3. ----------------------------------------" \n File directory3 = new File(dir)\n exist = directory3.exists()\n echo 'Directory3 name is = '+directory3\n echo 'exist value is = '+exist\n echo "4. Pipeline Syntax ------------------------" \n exist = fileExists '.\\\\ABC'\n echo 'exist value is = '+exist\n echo "5. ----------------------------------------"\n File directory5 = new File(dir)\n echo 'Directory5 name is = '+directory5\n // execute an error\n // exist = fileExists(directory5)\n exist = fileExists "directory5"\n echo 'exist value is = '+exist\n echo "6. ----------------------------------------"\n exist = fileExists(dir)\n echo 'exist value is = '+exist\n\n File[] listFiles = directory5.listFiles()\n echo 'List file = '+listFiles\n}\nRun Code Online (Sandbox Code Playgroud)\nJenkins 控制台输出中的输出是:(我稍微清理了一下\xe2\x80\xa6。)
\n1. ----------------------------------------\nDirectory1 name is = .\\ABC\\\nexist value is = false\n2. ----------------------------------------\nDirectory2 name is = .\\ABC\nexist value is = false\n3. ----------------------------------------\nDirectory3 name is = .\\ABC\nexist value is = false\n4. Pipeline Syntax ------------------------\nexist value is = true\n5. ----------------------------------------\nDirectory5 name is = .\\ABC\nexist value is = false\n6. ----------------------------------------\nexist value is = true\n\nList file = null\nRun Code Online (Sandbox Code Playgroud)\n我只在步骤 4 和 6 中获得真实值。因此我可以确定该文件夹确实存在。
\n所以对我来说这个命令似乎是:
\nFile directory = new File(dir)\nRun Code Online (Sandbox Code Playgroud)\n在我的情况下工作不正确。
\n我可以\xe2\x80\x99t 创建一个listFile变量,因为该目录无法正确初始化。
对我来说也不清楚我应该使用哪种命令。常规示例始终使用如下函数:
\n .exists()\nRun Code Online (Sandbox Code Playgroud)\n但在 Jenkins 示例中我总是找到这样的代码:
\n fileExists()\nRun Code Online (Sandbox Code Playgroud)\n为什么 groovy 和 Jenkins groovy 风格之间存在一些差异?应该是同一种矿石吧?
\n有谁对我有想法或者可以告诉我我\xe2\x80\x99m 做错了什么?
\n您可以添加以下脚本来列出当前工作目录中的文件和文件夹,以便您确认该文件夹ABC是否存在。
确认ABC文件夹存在后,然后深入研究其余代码。
def deleteFilesOlderThanDays() {
// print current work directory
pwd
// if jenkins job run on window machine
bat 'dir'
// if jenkins job run on linux machine
sh 'ls -l'
dir = '.\\ABC'
echo "1. ----------------------------------------"
.....
Run Code Online (Sandbox Code Playgroud)
对于fileExists使用,我认为正确的方法如下:
fileExists './ABC'
def dir = './ABC'
fileExists dir
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18522 次 |
| 最近记录: |