我使用安装了Jenkins的Cygpath plugin。
我有一些在Cygwin bash中运行的脚本没有问题
#!/bin/bash
pwd
SCRIPTFILENAME=$(readlink -f $0)
SCRIPTPATH=`dirname $SCRIPTFILENAME`
cd $SCRIPTPATH
(python check_for_clip_duplicates.py) || exit $?
但是当我试图用Jenkins构建它时,我遇到了错误:
$ D:\cygwin\bin\cygpath -w d:\cygwin\bin\bash.exe
[default] $ D:\cygwin\bin\bash.exe -xe C:\Windows\TEMP\hudson2178008588278192726.sh
cygwin warning:
MS-DOS style path detected: C:\Windows\TEMP\hudson2178008588278192726.sh
Preferred POSIX equivalent is: /cygdrive/c/Windows/TEMP/hudson2178008588278192726.sh
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
+ sh tools/generate_all.sh pc compress reset --use-texture-packer
tools/generate_all.sh: line 2: $'\r': command not found
tools/generate_all.sh: line 3: $'pwd\r': command not found
tools/generate_all.sh: line 4: $'\r': command not found
tools/generate_all.sh: line 7: cd: /cygdrive/d/Jenkins/workspace/default/tools
: No such file or directory
C:\Python27\python.exe: can't open file 'check_for_clip_duplicates.py': [Errno 2] No such file or directory
tools/generate_all.sh: line 8: exit: 2
: numeric argument required
Build step 'Execute shell' marked build as failure
Finished: FAILURE
在Shell可执行文件中的Jenkins配置中我有:d:\ cygwin \ bin \ bash.exe。
主要问题是cygdrive路径不起作用:
tools/generate_all.sh: line 7: cd: /cygdrive/d/Jenkins/workspace/default/tools
: No such file or directory
有什么想法吗?
答案 0 :(得分:0)
您的文件中似乎有一些Windows行结尾 - 尝试在其上运行dos2unix
:
$ dos2unix /cygdrive/c/Windows/TEMP/hudson2178008588278192726.sh
然后再次尝试运行脚本。
答案 1 :(得分:0)
脚本很可能失败,因为cd $SCRIPTPATH
失败(由于尾随\r
个字符),然后它尝试在脚本的当前目录中找到check_for_clip_duplicates.py
(而不是tools
目录),不存在。
为什么以前的所有命令都会失败,只有最后一个命令执行?因为最后一个实际上没有换行符,因此没有\r
。
下载Notepad++,这是一个必不可少的工具,并且对文件EOL转换有很好的支持(您对\r
的问题)
generate_all.sh
脚本tools/generate_all.sh
位置。 你可能没有注意到差异,但在正常视图中行结尾是不可见的。最后,为了避免再次发生这种情况,您可以将dos2unix
命令放入用于触发generate_all.sh
的执行Shell 构建步骤中:
dos2unix toos/generate_all.sh
tools/generate_all.sh pc compress reset --use-texture-packer
专业提示:
要实际查看行结尾,请在Notepad ++中单击View - >显示符号 - >显示所有字符
修改强>
您可以从脚本调用python,而脚本又调用Windows可执行文件C:\Python27\python.exe
。作为一个外部可执行文件,它没有任何Jenkins插件(cygpath)甚至是Jenkins本身的意识。
进一步分析您的问题,首先不需要Cygwin,您可以使用常规执行Windows批处理命令构建步骤来完成所有这些
cd
与Windows相当于pwd
$WORKSPACE
是指向作业工作空间路径的环境变量,您知道脚本位于tools
文件夹中。
|| exit $?
可以替换为|| exit %ERRORLEVEL%
,但如果这是构建步骤中的最后一行(实际上是脚本),则完全是多余的。 Jenkins将使用构建步骤的最后一个语句的退出代码作为整个构建步骤的退出代码
使用以下内容将整个cygwin构建步骤更改为常规执行窗口批处理构建步骤:
cd
cd $WORKSPACE/tools
C:\Python27\python.exe check_for_clip_duplicates.py
如果你的python目录已经在%PATH%
变量中,你只需使用python
而不是完整路径。