Jenkins,cygpath插件不会转换路径

时间:2014-03-18 08:24:24

标签: bash jenkins cygwin cygpath

我使用安装了JenkinsCygpath 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

有什么想法吗?

2 个答案:

答案 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的问题)

  • 打开 Notepad ++
  • 点击文件 - >
  • 请注意,状态栏右下方会显示 Dos \ Windows (默认EOL)
  • 点击修改 - > EOL转换 - > UNIX格式
  • 请注意,状态栏右下方会显示 UNIX
  • 请输入(不要复制粘贴)generate_all.sh脚本
  • 的内容
  • 将此文件保存到tools/generate_all.sh位置。 可能没有注意到差异,但在正常视图中行结尾是不可见的。
  • 重要提示: 如果您使用SVN或其他SCM结帐到Jenkins的工作区,则需要将更改保存回SVN / SCM!

最后,为了避免再次发生这种情况,您可以将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而不是完整路径。