0

我繼承了SonarQube Linux服務器的責任,該服務器運行5.1版本並分析了許多Unity C#項目。將其升級到SQ 6.1後,我發現在5.5版本中,對非Windows系統上的C#項目的分析支持已被刪除,因此我現在將其降級到了5.4版本。通過Jenkins分析非Visual Studio,Unity C#代碼與MSBuild/SonarQube通過Jenkins

我隨後設置了一個Windows系統作爲Jenkins節點和SonarQube服務器。然而,我希望通過SonarQube評估的項目(大部分)是在Unity上開發的,並且(始終)構建在Unity中的macOS上,因此缺少MSbuild解決方案文件。我是否可以在這些限制內使用SonarQube,而不是將Visual Studio特定的代碼添加到項目中?是否有某種虛擬解決方案文件可以添加到項目中,以便在不期望生成正在運行的二進制文件的情況下進行分析(沿解析/標記化而無需編譯/鏈接)?謝謝。

+0

什麼是你用於這個項目的編譯器?我們的C#分析器依賴於Roslyn。 MaxOSX上有Roslyn官方支持嗎? –

+0

Unity是一個編譯器。我知道Roslyn,並想用它來編寫我們自己的一些編碼檢查。之後,我得知Unity確實創建瞭解決方案文件,即使在macOS上也是這樣,所以我將能夠在啓動SonarQube中的分析之前使用Jenkins在Unity中打開項目,以創建解決方案文件。當我有這一切工作,我會爲後代發表一個答案。 – SGDave

回答

1

這是我開發的用於通過Jenkins分析SonarQube中的Unity項目的過程。

  1. 面向用戶的Jenkins作業包含以下設置和選項,以及其他特定於我的環境的作業。

    1. 一般,這個項目是參數
      1. 字符串參數PROJECTKEY
      2. 字符串參數PROJECTNAME
      3. 字符串參數PROJECTVERSION
    2. 通用 - 限制可以運行此項目的地方設置爲用於SonarQube服務器的Jenkins構建節點名稱。
    3. 源代碼管理
      1. 庫URL設置爲你想要分析的存儲庫。
      2. 分行建立設置爲主分行,即refs/heads/master
      3. 其他行爲 - 遞歸更新子模塊根據您的存儲庫進行檢查。
    4. 構建觸發
      1. 投票SCM檢查,但沒有指定的時間表。
    5. 構建環境
      1. 運行buildstep SCM之前運行,進樣的環境變量設置爲HOME=C:\Users\Jenkins(或適合您的系統)。這個環境變量使得git能夠找到正確的ssh憑證來與Git服務器一起使用。你需要把你的git私鑰放在%HOME%\.ssh;這是在其他地方記錄並作爲練習留給讀者。
      2. 使用另一個項目的構建環境 - 指向第二個Jenkins作業的Template Project。礦被稱爲SonarQube_Scanner(見下文)。從另一個項目模板項目
    6. 構建
      1. 使用構建指向同詹金斯工作SonarQube_Scanner
    7. 生成後操作
      1. 存檔文物檔案歸檔設置爲log.zip
  2. 的非面向用戶的詹金斯作業(SonarQube_Scanner)具有以下設置和選項。

    1. 常規 - 禁用此項目檢查。
    2. 通用 - 限制可運行此項目的地方已檢查並設置到您的SonarQube服務器。
    3. 源代碼管理設置爲無。
    4. 構建環境 - 將環境變量注入構建過程已檢查。

      1. 屬性內容包含

        `LANG=en_US.UTF-8` 
        
    5. 構建

      1. 執行Windows批處理命令包含

        set FILENAME=%WORKSPACE%\client\Assets\Editor\SQMenuItems.cs 
        REM Yes, this syntax works and is sooo much more readable 
        > %FILENAME% ECHO using UnityEditor; 
        >> %FILENAME% ECHO public static class SQMenuItems { 
        >> %FILENAME% ECHO static void AssetsOpenCSharpProject() { 
        >> %FILENAME% ECHO #if UNITY_5 
        >> %FILENAME% ECHO  EditorApplication.ExecuteMenuItem("Assets/Open C# Project"); 
        >> %FILENAME% ECHO #else 
        >> %FILENAME% ECHO  EditorApplication.ExecuteMenuItem("Assets/Sync MonoDevelop Project"); 
        >> %FILENAME% ECHO #endif 
        >> %FILENAME% ECHO  EditorApplication.Exit(0); 
        >> %FILENAME% ECHO } 
        >> %FILENAME% ECHO } 
        "C:\Program Files\Unity_5.5.2\Editor\Unity.exe" -quit -batchmode -nographics -logFile "%WORKSPACE%\log.txt" -buildTarget android -projectPath %WORKSPACE%\client -executeMethod SQMenuItems.AssetsOpenCSharpProject 
        "C:\Program Files\7-zip\7z.exe" -tzip a log.zip log.txt 
        
        • SQMenuItems。cs觸發Unity創建MSBuild需要的.sln.*proj文件。 .sln.*proj文件通常位於.gitignore文件中,因此不在存儲庫中。
      2. SonarQube掃描儀的MSBuild的 - 開始分析

        1. SonarQube安裝設置爲您用於SonarQube服務器詹金斯建立節點名稱。
        2. 項目密鑰設置爲${PROJECTKEY}
        3. 項目名稱設置爲${PROJECTNAME}
        4. 項目版本設置爲${PROJECTVERSION}
        5. 其他參數

          /d:sonar.exclusions=**\\SQMenuItems.cs

      3. 執行Windows批處理命令

        "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /maxcpucount /nr:false /nologo /target:rebuild /verbosity:quiet client\client.sln 
        
        • 您可能需要更改client\client.sln高於T o符合你的環境。我還沒有嘗試用面向用戶的Jenkins作業中定義的環境變量替換它。
      4. SonarQube掃描儀的MSBuild的 - 最終分析
  3. DONE
  4. 陷阱
    1. 如果因爲統一將無法完成作業失敗,因爲它不能找到projectPath,它可能已經忘記了它的l許可密鑰。將遠程桌面連接到SonarQube服務器並啓動Unity GUI。如果彈出詢問您的許可證密鑰,請重新輸入密鑰,然後退出。隨後的工作應該成功。
    2. 讓它動起來的信息很難將信息傳遞給SonarQube。
      1. 2.5.1「執行Windows批處理命令」中定義的Windows環境變量不保留到2.5.2「用於MSBuild的SonarQube掃描器 - 開始分析」。
      2. SonarQube.Analysis.xml文件明確禁止分配屬性sonar.projectName,sonar.projectKeysonar.projectVersion
  5. 我可能忽略了一些;請不要猶豫詢問。