我有以下情况。在詹金斯,我有一个在不同的环境中运行的构建。这就是为什么我用两个选项PROD/TEST
构建参数。构建使用参数PROD
或TEST
调用shell脚本。
以下是jenkins正在调用的脚本A
的示例:
if %1%==TEST(
start F:\test.bat
)
脚本A
本身正在调用另一个脚本 - B
。
这是脚本B
的示例:
copy test.xt copyFolder\
问题是Jenkins只调用了第一个脚本 - A
- 而第二个脚本B
没有运行。
为什么会这样?
您将需要call
批处理文件,而不是start
它,因为它创建了一个新的cmd.exe
实例,因此它可以异步运行一个被调用的批处理文件(如jeb here所述):
if "%~1" == "TEST" (
call F:\test.bat
)
在这里,我想说明一些事情:
%1%
将被解释为批处理文件的第一个参数(如果有)和额外的百分号(%
)。你可能想要第一个参数,所以我用%1%
替换了%1
。如果它不是您想要的,那么将其替换为您的变量名称,但请记住它不应该以数字开头!%1
被%~1
取代并引用,因为:
%~1
是指没有任何周围引号的第一个参数。
在if
语句中引用值始终是最佳实践,但如果有引号,则比较将失败。==
之间添加了一个空格,只是为了使代码更清晰。对于单行,请参阅aschipfl's comment,它是:
if /I "%~1"=="TEST" (call "F:\test.bat")
有关这些命令如何工作的更多信息,请参阅cmd中的call /?
和if /?
。