iT邦幫忙

1

Jenkins Pipline 檔名截斷

  • 分享至 

  • xImage
def rollbackFunction(rollback){
    bat """ 7z x D:\\APP_BACKUP\\${rollback}.zip -oD:\\APP\\ """

}

上面是我pipeline的一段函式,他會帶入一個壓縮的主檔案名稱

        stage("測試"){
            when {
                expression { X == "RO" }
             }  
            steps {
                script{
                    rollbackFunction(rollback)
                }
            }
        }

上面是pipeline的stage帶入上面那個函式

目的是要用7z解壓縮zip檔

7-Zip 22.01 (x64) : Copyright (c) 1999-2022 Igor Pavlov : 2022-07-15

Scanning the drive for archives:

ERROR: �t�Χ䤣����w���ɮסC
D:\APP_BACKUP\3d9ce

System ERROR:
�t�Χ䤣����w���ɮסC

D:\jenkins\workspace\APP\TEST>.zip -oD:\APP\
'.zip' ���O�����Υ~���R�O�B�i���檺�{���Χ妸�ɡC

但從上面的錯誤似乎檔名被截成兩段導致無法解壓縮成功

有大大知道如何解嗎

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
JamesDoge
iT邦高手 1 級 ‧ 2023-02-16 19:50:01
最佳解答

根據您提供的錯誤訊息,似乎檔名有誤,所以導致解壓縮失敗。可以嘗試修改你的函式 rollbackFunction(),確認傳入的檔名 rollback 是否正確,並將其修改為合法的檔名。

可以參考以下程式碼:

def rollbackFunction(rollback){
    def sanitizedRollback = rollback.replaceAll(/[^A-Za-z0-9_\\-\\.]/, '')
    bat """ 7z x D:\\APP_BACKUP\\${sanitizedRollback}.zip -oD:\\APP\\ """
}

上述程式碼中,sanitizedRollback 是 rollback 經過處理後的合法檔名。使用 replaceAll() 將字串中的非法字元替換成空字串,避免因為非法字元導致解壓縮失敗。

kungyc iT邦新手 5 級 ‧ 2023-02-17 08:29:35 檢舉

感謝大大的協助,也讓小弟學會了一項解決這個問題的方法,謝謝~

1
wiseguy
iT邦超人 1 級 ‧ 2023-02-16 12:39:34

應該是 charset 字元集不對。
你可以試試 7zip 用不一樣的字元集參數去壓縮。
通常應該用 UTF-8,可以先試試。不行再試其他。
https://sevenzip.osdn.jp/chm/cmdline/switches/charset.htm

kungyc iT邦新手 5 級 ‧ 2023-02-16 18:03:48 檢舉

應該不是charset的問題 謝謝回答

1
askeyWoody
iT邦新手 5 級 ‧ 2023-02-16 15:43:40

7z -o "unzip/here" -x "zip/source.zip"
不確定有沒有用, 可以試看看用符號 ", 去包住 "檔案名稱"

kungyc iT邦新手 5 級 ‧ 2023-02-16 18:04:51 檢舉

剛開始有想到用雙冒號包住,但沒用,感覺出在. dot,剛測試過截斷好的好像也不試出在.符號上,檔名加上幾個.後沒截斷,但後面的.zip還是被斷掉了

1
Ray
iT邦大神 1 級 ‧ 2023-02-16 19:25:48

關鍵在:

${rollback}

是她引入的最後一個字元, 造成斷行.
所以要去查 ${rollback} 是從哪裡代進來的?
她代入的參數裡面, 有沒有隱藏了換行的字元?

不然先不要用 ${rollback} 變數, 你就把檔名直接寫死在 Script 裡面, 看是否可以成功?

kungyc iT邦新手 5 級 ‧ 2023-02-17 08:28:22 檢舉

寫死是可以的,該引入的是checkout sha,所以可能是在commit後代入也代入了隱藏的換行字元,不過解決了,感謝樓下James大大

我要發表回答

立即登入回答