[英]Jenkins, cygpath plugin does not convert paths
我正在使用安裝了Cygpath插件的 Jenkins 。
我有一些可以在Cygwin bash中正常運行的腳本
#!/bin/bash
pwd
SCRIPTFILENAME=$(readlink -f $0)
SCRIPTPATH=`dirname $SCRIPTFILENAME`
cd $SCRIPTPATH
(python check_for_clip_duplicates.py) || exit $?
但是,當我嘗試用詹金斯構建它時,我遇到了錯誤:
$ 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
有任何想法嗎?
看起來文件中有一些Windows行尾-嘗試在其上運行dos2unix
:
$ dos2unix /cygdrive/c/Windows/TEMP/hudson2178008588278192726.sh
然后嘗試再次運行腳本。
該腳本很可能失敗,因為您的cd $SCRIPTPATH
失敗了(由於尾隨\\r
字符),然后它試圖在腳本的當前目錄(而不是tools
目錄)中找到check_for_clip_duplicates.py
,該目錄不存在。
為什么以前的所有命令都失敗而只有最后一個命令執行? 因為最后一個實際上沒有換行符,所以那里沒有\\r
。
下載Notepad ++ ,它是必不可少的工具,並且對文件EOL轉換( \\r
的問題)有很好的支持。
generate_all.sh
腳本的內容 tools/generate_all.sh
位置。 您可能沒有注意到差異,但是在普通視圖中行尾是不可見的。 最后,為避免再次發生這種情況,可以將dos2unix
命令放入Execute Shell generate_all.sh
步驟中,以用於觸發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批處理”命令構建步驟來完成所有這些操作
cd
與pwd
在Windows中等效。
$WORKSPACE
是指向作業工作空間路徑的環境變量,並且您知道腳本位於tools
文件夾中。
|| exit $?
|| exit $?
可以用|| exit %ERRORLEVEL%
代替 || exit %ERRORLEVEL%
但如果這是構建步驟的最后一行(實際上是腳本),則完全多余。 Jenkins將使用構建步驟最后一條語句的退出代碼作為整個構建步驟的退出代碼
因此,使用以下命令將整個cygwin構建步驟更改為常規的“ 執行窗口批處理”構建步驟:
cd
cd $WORKSPACE/tools
C:\Python27\python.exe check_for_clip_duplicates.py
如果您的python目錄已經在%PATH%
變量中,則可以簡單地使用python
而不是完整路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.