【问题标题】:Jenkins deleting batch file before it's completed詹金斯在完成之前删除批处理文件
【发布时间】:2021-02-16 22:56:47
【问题描述】:

我在 Server 2012 VM 上运行 Jenkins,我注意到我的一些项目在成功时被标记为未完成。我收到错误“找不到批处理文件”。据我所知,问题是 Jenkins 为运行我的项目而创建的批处理文件在完成之前就被删除了。我正在从不会发生此问题的 Windows 7 框中迁移。

我已经看到批处理文件在C:\Users\164016\AppData\Local\Temp\ 中创建,然后在批处理文件完成之前将其删除。我什至可以在批处理文件被删除之前打开它。

我尝试将 Call 命令放在命令的开头,但这并不能解决问题。

LaunchPad.exe 命令是一个自定义脚本,旨在从 Excel vba 宏返回退出代码。

如果您有任何建议,请告诉我。

这是日志:

Building remotely on (164016) Remote Computer in workspace C:\TEMP\Jenkins Slave\workspace\Weekly Claim Edit WQ Age
[Weekly Claim Edit WQ Age] $ cmd /c call C:\Users\164016\AppData\Local\Temp\hudson3188220465265190989.bat

C:\TEMP\Jenkins Slave\workspace\Weekly Claim Edit WQ Age>"O:\Analytics Team\Tasks\Automation Components\Ryan\C#\Launch Pad\LaunchPad\LaunchPad\bin\Debug\LaunchPad.exe" "C:\Program Files (x86)\Quest Software\Toad for Data Analysts 2.7\Toad.exe" -batch=true "O:\Analytics Team\Tasks\Automation Components\Cindy\TAS\Claim_Edit_WQ_Age.tas" "O:\Analytics Team\Tasks\Claim Edit WQ Age\Claim_Edit_WQ_Age.xlsm"  

LaunchPad Start Time: 10.7.2014 9:49:10 AM
Time before Stopping Programs: 60 min

Program: "C:\Program Files (x86)\Quest Software\Toad for Data Analysts 2.7\Toad.exe"
Arguments: "-batch=true" "O:\Analytics Team\Tasks\Automation Components\Cindy\TAS\Claim_Edit_WQ_Age.tas" 
vba File: "O:\Analytics Team\Tasks\Claim Edit WQ Age\Claim_Edit_WQ_Age.xlsm"
vba Exit File: O:\Analytics Team\Tasks\Claim Edit WQ Age\Claim_Edit_WQ_Age.txt


Report Completed: 10/7/2014 9:50:28 AM 164016  O:\Reports\EPIC\Epic Claim Edit WQ\20141007 Claim Edit WQ Age.xlsx

Exiting LaunchPad: No Errors Detected: 0
The batch file cannot be found.
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    我有一个非常相似的问题。我在 Jenkins 中运行一个调用专门的内部程序并导致“找不到批处理文件”错误的工作。事实证明,其中一个正在运行的批处理文件中有一个del %TEMP%\*.* /q 命令。这是在作业中删除所有 Jenkins 临时批处理文件并导致错误。

    简单的解决方案是简单地重新定位 Jenkins 临时文件夹。这可以通过在 Jenkins 启动脚本中添加命令行选项来完成。我的启动脚本如下:java -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -Djava.io.tmpdir=C:\Users\!!My_user_name!!\Desktop\Jenkins_Temp -jar jenkins.war

    我添加的重要部分是-Djava.io.tmpdir=C:\Users\!!My_user_name!!\Desktop\Jenkins_Temp 选项(出于隐私原因删除了我的用户名。)这解决了问题。不要忘记将我的路径替换为您系统的有效路径名。

    应将命令行选项添加到主启动脚本和从属启动脚本中才能正常运行。

    【讨论】:

    • 我遇到了同样的问题。 dir('C:\\dev\\abc\def') { bat 'some command' } 会让 Jenkins 在 c:\dev\abc\def 中创建它的 bat 文件(实名简化)。到目前为止没有问题,除了 abc\def 是一个 git repo 的一个分支,并且执行了 git clean -x -d -f 的命令,它也清理了那个 Jenkins 临时文件!
    【解决方案2】:

    你还有别的东西在玩……

    当您配置执行 Windows 批处理命令构建步骤时,它会创建一个临时批处理文件,然后 Jenkins 会执行该文件。

    临时批处理文件的执行开始于:
    [Weekly Claim Edit WQ Age] $ cmd /c call C:\Users\164016\AppData\Local\Temp\hudson3188220465265190989.bat
    结束于:
    Build step 'Execute Windows batch command' marked build as failure

    临时批处理文件hudson3188220465265190989.bat 将在最后一行之后被删除。

    您的错误The batch file cannot be found. 发生在该行之前。所以,不是 Jenkins 临时批处理文件找不到,而是别的东西。

    除非您提供 执行 Windows 批处理命令的内容,否则很难猜测还有什么问题。

    【讨论】:

    • 执行 Windows 批处理命令:"LaunchPad.exe" "C:\Program Files (x86)\Quest Software\Toad for Data Analysts 2.7\Toad.exe" -batch=true "O:\Analytics Team\Tasks\Automation Components\TAS\Claim_Edit_WQ_Age.tas" "O:\Analytics Team\Tasks\Claim Edit WQ Age\Claim_Edit_WQ_Age.xlsm"
    • 从调试 LaunchPad - 批处理文件的删除似乎发生在此行执行后:process = Process.Start(processInfo);
    • 奇怪的是临时批处理文件似乎在最后一行完成之前被删除了。
    • 出于调试目的,您可以将pause(在您杀死它之前作业不会完成)或ping -n 50 127.0.0.1(将在关闭前ping回送50次)放入执行Windows批处理命令中,只需在 Jenkins 删除临时 .bat 文件之前给予延迟。
    • 如果我在开头添加暂停命令,它可以工作。如果我在最后添加它,它永远不会运行,因为批处理文件已被删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多