簡體   English   中英

Jenkins,cygpath插件不轉換路徑

[英]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的問題)有很好的支持。

  • 打開記事本++
  • 單擊文件 -> 新建
  • 注意,在狀態欄中的右下角,它將顯示Dos \\ Windows (默認EOL)
  • 單擊編輯 -> EOL轉換 -> UNIX格式
  • 注意,狀態欄右下角現在將顯示UNIX
  • 請輸入(不要復制粘貼) generate_all.sh腳本的內容
  • 將此文件保存到您的tools/generate_all.sh位置。 可能沒有注意到差異,但是在普通視圖中行尾是不可見的。
  • 重要提示:如果您正在使用SVN或其他SCM簽出到Jenkins的工作區,則需要將所做的更改保存回SVN / SCM!

最后,為避免再次發生這種情況,可以將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批處理”命令構建步驟來完成所有這些操作

cdpwd在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM