我使用的是安装了Cygpath plugin的Jenkins。
我有一些脚本是工作在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在Jenkins配置的Shell可执行文件中,我有: d:\cygwin\bin\bash.exe。
主要问题是cygdrive路径不起作用:
tools/generate_all.sh: line 7: cd: /cygdrive/d/Jenkins/workspace/default/tools
: No such file or directory有什么想法吗?
发布于 2014-03-18 17:22:34
看起来你的文件中有一些Windows行的结尾--试着在上面运行dos2unix:
$ dos2unix /cygdrive/c/Windows/TEMP/hudson2178008588278192726.sh然后再次尝试运行该脚本。
发布于 2014-03-18 23:31:12
脚本失败很可能是因为您的cd $SCRIPTPATH失败(由于尾随的\r字符),然后它尝试在脚本的当前目录(而不是tools目录)中查找check_for_clip_duplicates.py,而tools目录并不在那里。
为什么前面所有的命令都失败了,只执行最后一个命令?因为最后一个实际上没有换行符,所以没有\r。
下载Notepad++,它是一个重要的工具,对文件停产转换有很好的支持(你使用\r的问题)
在状态栏右下角打开Notepad++
generate_all.sh脚本
tools/generate_all.sh位置。您可能没有注意到其中的差异,但是在普通view.
最后,为了避免这种情况再次发生,您可以将dos2unix命令放入用于触发generate_all.sh的执行外壳构建步骤:
dos2unix toos/generate_all.sh
tools/generate_all.sh pc compress reset --use-texture-packer专业技巧:
要实际查看行尾,请在Notepad++中单击查看->显示符号->显示所有字符
编辑:
您可以从脚本中调用python,而后者又调用Windows可执行文件C:\Python27\python.exe。作为一个外部可执行文件,它不知道任何Jenkins插件(cygpath),甚至不知道Jenkins本身。
进一步分析您的问题,首先几乎不需要Cygwin,您可以使用常规的执行Windows批处理命令 build step来完成所有这些操作
cd是pwd的Windows等价物。
$WORKSPACE是一个指向作业工作区路径的环境变量,您知道脚本位于tools文件夹中。
可以用|| exit %ERRORLEVEL%替换|| exit $?,但是如果这是构建步骤(实际上是脚本)中的最后一行,那么它是完全多余的。Jenkins将使用构建步骤的最后一条语句的退出代码作为整个构建步骤的退出代码
因此,使用以下命令将整个构建步骤更改为常规cygwin Execute Window Batch cygwin构建步骤:
cd
cd $WORKSPACE/tools
C:\Python27\python.exe check_for_clip_duplicates.py 如果您的python目录已经在%PATH%变量中,那么您可以简单地使用python而不是完整路径。
https://stackoverflow.com/questions/22473851
复制相似问题