排除程式碼上傳錯誤

2024/1/22 |

症狀

使用 Lucent Sky AVM Web UI 或 CLI 上傳程式碼壓縮檔案後,你獲得一個錯誤訊息。

原因

不同的原因會導致程式碼壓縮檔案上傳失敗。這篇文章描述上傳程式碼壓縮檔案時常見錯誤的原因和解決方式。

解決方式

  • 上傳程式碼壓縮檔案後,你收到以下其中一個錯誤訊息:

      An unspecified error occurred while extracting the archive file.
    
      An unspecified I/O error has occurred.
    
      ARCHIVE_UNSPECIFIED_ERROR
    

    這個問題發生於 CLEAR Engine 解壓縮程式碼壓縮檔案發生錯誤。常見的原因之一是壓縮檔案的路徑中有非法的字元。

    CLEAR Engine 使用 .NET Framework Compression API 來解壓縮 Zip 格式的壓縮檔案。依照以下步驟來找出造成解壓縮程式碼壓縮檔案時的實際錯誤:

    1. 在執行 CLEAR Engine 的伺服器上,以管理員身分開啟 Windows PowerShell。
    2. 輸入以下命令:

       # Replace <SourceCodePath> with path to the source code archive
       $sourceCodePath = "<SourceCodePath>"
       # Replace <TempDirectoryPath> with path to a temporary directory
       $tempDirectoryPath = "<TempDirectoryPath>"
       Import-Module C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.IO.Compression.FileSystem.dll; [System.IO.Compression.ZipFile]::ExtractToDirectory("$sourceCodePath", "$tempDirectoryPath")
      
    3. 若發生了例外,則程式碼壓縮檔案和 .NET Framework Compression API 不相容。依照例外的訊息來解決錯誤。或是使用第三方程式(例如 7-Zip)解壓縮再重新建立程式碼壓縮檔案亦可能可以排除錯誤。

    CLEAR Engine 使用 7-Zip 來解壓縮其他格式的壓縮檔案。使用 7-Zip 的 Test archive 功能來驗證程式碼壓縮檔案的完整性。

  • 上傳程式碼壓縮檔案後,你收到以下錯誤訊息:

      Maximum request length exceeded.
    

    這個問題發生於上傳的程式碼壓縮檔案超過了 CLEAR Engine 允許的最大大小。

    Web UI 預設允許上傳最大 1 GB 的程式碼壓縮檔案。這個限制可被擴充到 2 GB。依照以下步驟來提高此限制:

    • Web UI

      1. 使用文字編輯器開啟 C:\Program Files\Lucent Sky\CLEAR Web\web.config
      2. <system.web> 區段找到 <httpRuntime> 節點,並將 maxRequestLength 屬性的值改為 2097152
      3. <requestFiltering> 區段找到 <requestLimits> 節點,並將 maxAllowedContentLength 屬性的值改為 2147483648
    • CLI 預設即允許 2 GB 的最大上傳檔案大小。

  • 上傳程式碼壓縮檔案後,你收到以下錯誤訊息:

      The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
    

    這個問題發生於程式碼壓縮檔案中一些檔案的路徑太長。

    若系統執行 Windows Server 2016(OS 組建 14393)或更新,開啟長路徑支援可移除此限制。要深入了解如何開啟長路徑支援,,請參考 Lucent Sky 知識庫:
    CLEAR Engine 和 Web UI 管理者指南

    若系統執行較早版本的 Windows,一個暫時的解決方法可以將路徑長度限制延伸到約 190 個字元。使用此方法會使 CLEAR Engine 無法產生較早掃描的報告和修正後的程式碼。依照以下步驟來套用此方法:

    1. 在一個磁碟的根目錄建立一個名稱較短的目錄,例如 C:\CLEAR。確認 LocalSystem 帳戶對該目錄有 full control 的權限及 NetworkService 帳戶對該目錄有 write 權限。
    2. 使用文字編輯器開啟 C:\Program Files\Lucent Sky\CLEAR Engine\SkyAnalyzer.config
    3. <appSettings> 區段中找到 <StorageRoot> 節點,並將其值改為 C:\CLEAR,其中 C:\CLEAR 是你在之前步驟建立的目錄。
    4. 以系統管理員身分開啟 Windows PowerShell,輸入以下命令還重新啟動 CLEAR Engine:

       Stop-Service "CLEAR Engine"; Start-Service "CLEAR Engine"