HSN*_*SNN 26 batch-file jenkins
我刚刚加入了一家使用批处理文件来构建C++项目的公司.批处理有各种各样的事情(更新svn,现在由jenkins完成),创建构建文件夹,在构建后删除不必要的文件,将库文件复制到构建文件夹等.
我的问题是Jenkins总是认为构建成功,即使它不是.当出现问题时,.bat文件会创建一个名为errormake.txt的文件.如何让jenkins读取并将构建标记为失败?
另外,有什么方法可以找到Jenkins从.bat文件中创建的构建文件夹(也许在我调用批处理文件时发送变量)?
这是我目前用于调用.bat文件的单行:
call "C:\Source\BuildVersion\AppName\build_version.bat"
Run Code Online (Sandbox Code Playgroud)
编辑:此外,该项目分为几个SVN存储库.%SVN_REVISION%是空白的.如何%SVN_REVISION%从第一个存储库(主存储库)中获取正确的信息?
Gon*_*nen 34
回答你的每个问题 -
詹金斯总是回归"成功",即使工作真的失败了:
Jenkins根据
每个" 执行Windows批处理命令 "块中运行的最后一个命令的返回代码设置作业的状态.
如果你的最后一个命令是,
Jenkins认为一切正常
(如果' '命令没问题......)copy some.log D:copy
使用EXIT xx或EXIT /B xx取决于您的操作系统,
'xx'是大于零的整数.
如何根据日志文件使Jenkins将构建标记为失败:
使用文本查找器插件,如sdmythos_gr所述.
有什么办法可以找到Jenkins创建的构建文件夹:
有一些参数可用作
在Jenkins下运行的每个脚本的环境变量- 请参阅此处获取这些参数的列表:
Jenkins Environment Variables.
对于你的问题:
%WORKSPACE% - 工作空间的绝对路径%BUILD_NUMBER% - 当前的内部版本号,例如"153"%BUILD_ID%- 当前构建ID,例如"2005-08-22_23-59-59" 如何从第一个存储库中获取正确的%SVN_REVISION%:
这个答案来自同一个链接:
%SVN_REVISION%- 对于基于Subversion的项目,希望有所帮助
小智 5
在“较新”版本的 Windows 上(我在 Server 2012 R2 上测试过),将以下内容放在每个 Windows 批处理命令的末尾:
@EXIT /b %ERRORLEVEL%
Run Code Online (Sandbox Code Playgroud)
这会将 cmd.exe 收到的错误代码传递回调用者(即 Jenkins)。“@”关闭回显,这样您就不会弄乱您的日志。
如果命令中有多行并希望在第一次失败后停止,请在要检查的每一行之后添加以下内容(是的,这不太好):
@IF NOT %ERRORLEVEL% == 0 EXIT /b %ERRORLEVEL%
Run Code Online (Sandbox Code Playgroud)
例如:
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%
Run Code Online (Sandbox Code Playgroud)