Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Jenkins总是认为使用批处理/bat构建是成功的 我刚刚加入了一个使用批处理文件来构建C++项目的公司。该批处理执行各种操作(更新svn,现在由jenkins完成)、创建生成文件夹、在生成后删除不必要的文件、将库文件复制到生成文件夹等_Batch File_Jenkins - Fatal编程技术网

Batch file Jenkins总是认为使用批处理/bat构建是成功的 我刚刚加入了一个使用批处理文件来构建C++项目的公司。该批处理执行各种操作(更新svn,现在由jenkins完成)、创建生成文件夹、在生成后删除不必要的文件、将库文件复制到生成文件夹等

Batch file Jenkins总是认为使用批处理/bat构建是成功的 我刚刚加入了一个使用批处理文件来构建C++项目的公司。该批处理执行各种操作(更新svn,现在由jenkins完成)、创建生成文件夹、在生成后删除不必要的文件、将库文件复制到生成文件夹等,batch-file,jenkins,Batch File,Jenkins,我的问题是Jenkins总是认为构建是成功的,即使它不是。当出现问题时,.bat文件会创建一个名为errormake.txt的文件。我如何让jenkins读到这一点并将构建标记为失败 还有,我有没有办法找到Jenkins在.bat文件中创建的构建文件夹(可能在调用批处理文件时发送一个变量) 这是我当前用于调用.bat文件的单行代码: call "C:\Source\BuildVersion\AppName\build_version.bat" 编辑:另外,这个项目被分成几个SVN存储库%SVN

我的问题是Jenkins总是认为构建是成功的,即使它不是。当出现问题时,.bat文件会创建一个名为errormake.txt的文件。我如何让jenkins读到这一点并将构建标记为失败

还有,我有没有办法找到Jenkins在.bat文件中创建的构建文件夹(可能在调用批处理文件时发送一个变量)

这是我当前用于调用.bat文件的单行代码:

call "C:\Source\BuildVersion\AppName\build_version.bat"

编辑:另外,这个项目被分成几个SVN存储库<代码>%SVN\u修订版%为空。如何从第一个存储库(主存储库)获取正确的
%SVN\u REVISION%

Jenkins使用windows错误代码了解生成是否失败。
构建失败时,您应该返回一个不同于0的值,例如“exit/b1”。

我还将回答您的部分问题

Jenkins有一个文本查找插件,你可以使用它。

根据文件内容或控制台输出,可以在生成结束时将生成标记为不稳定或失败


也许这有助于……

回答您的每一个问题-

  • 詹金斯总是返回“成功”,即使工作实际上失败了

    Jenkins根据最后一个命令的返回代码设置作业的状态
    在每个“执行windows批处理命令”块中运行的。
    如果您的最后一个命令是
    复制some.log D:

    詹金斯认为一切都很好
    (如果“
    copy
    ”命令运行正常…)

    使用
    EXIT xx
    EXIT/B xx
    ,具体取决于您的操作系统,
    其中“xx”是大于零的某个整数

  • 如何让Jenkins根据日志文件将构建标记为失败

    使用,如所述

  • 我能找到Jenkins创建的构建文件夹吗

    有几个参数可用作环境变量
    对于在Jenkins下运行的每个脚本,请参见此处以获取这些参数的列表:

    对于您的问题:

    • %WORKSPACE%
      -工作区的绝对路径
    • %BUILD\u NUMBER%
      -当前版本号,如“153”
    • %BUILD\u ID%
      -当前生成ID,如“2005-08-22\u 23-59-59”
      (YYYY-MM-DD_hh-MM-ss)

  • 如何从第一个存储库中获取正确的%SVN\u版本%

    答案来自同一链接:

    • %SVN\u REVISION%
      -对于基于Subversion的项目,
      此变量包含模块的修订号。
      如果指定了多个模块,则不会设置该模块

希望这会有所帮助

我知道这个问题已经很老了,但可能对一些人有用。要执行bat文件,请不要使用以下行

call "C:\Source\BuildVersion\AppName\build_version.bat"
您可以使用以下格式

<someRelativeOrAbsolutePath>\<.batFileName> <param1> <param2> <and so on>
\
在Jenkins的Build部分的Execute Windows Batch command中以这种方式执行命令将使用该命令的最后返回代码<代码>${BUILD_STATUS}将取决于此。您不必修改脚本以返回一些基于条件的错误代码。

对于“较新”版本的Windows(我在Server 2012 R2上进行了测试),请在每个Windows批处理命令的末尾添加以下内容:

@EXIT /b %ERRORLEVEL%
这将把cmd.exe收到的错误代码传递回调用方(即Jenkins)。“@”关闭回声,这样您就不会把日志弄得乱七八糟

如果命令中有多行,并且希望在第一次失败后停止,请在要检查的每行后面放置以下内容(是的,这不太好):

例如:

step1.exe
@IF NOT %ERRORLEVEL% == 0 EXIT /b %ERRORLEVEL%
step2.exe
@IF NOT %ERRORLEVEL% == 0 EXIT /b %ERRORLEVEL%
call "C:\Source\BuildVersion\AppName\build_version.bat"
@EXIT /b %ERRORLEVEL%

正如其他用户所述,批处理文件应使用“退出/B1”。下面是一个将您的呼叫链接在一起的技巧,如果一个呼叫失败,Jenkins将返回失败:

call a.bat &&^
echo "a success" &&^
call b.bat &&^
echo "b success"

“&&”表示下一个操作只应在成功时运行(退出代码0)。“^”用于将命令拆分为多行。这种方法的缺点是构建进度条显示不准确。

我无法回答您的整个问题,但对于您的最后一个查询,您可以访问
$WORKSPACE
环境变量,这有助于了解Jenkins从何处构建。我在批处理脚本中使用它。谢谢工作区%helps.%BUILD\u ID%也有帮助,我想我只是将批处理文件指向在%WORKSPACE%\builds\%BUILD\u ID%上构建。谢谢,bat已经处理了编译错误,但使用了一个简单的“退出”。1号出口解决了我的问题,听起来不错。此外,您可以在“退出1”(出现错误)之前将结果写入文本文件,然后另一个进程可以读取该文件以获得结果。编译很好,但正如我所说,%SVN_REVISION%为空。%SVN_REVISION_1%仍然有效。或者您有多个模块,或者它是一个bug。>“如果您的最后一个命令是ECHO FAILURE!!!,Jenkins认为一切正常”-我尝试过,但Jenkins返回失败,因为之前的comand失败将“ECHO”示例替换为“copy”,更准确地说。
call a.bat &&^
echo "a success" &&^
call b.bat &&^
echo "b success"