這個基於Docker的開發環境是針對Jenkins警告和覆蓋插件的新貢獻者,以減少最初的升級時間。它由以下部分組成:
我在2022年1月的詹金斯在線聚會上介紹了這種開發環境。
開發環境已在MACOS,Ubuntu Linux(MacOS上運行的虛擬機)和Windows上進行了測試。始終歡迎拉動請求。
以下工具的最新版本:
此外,需要以下工具的最新版本:
如果發生錯誤,請注意下面的故障排除提示。對於Windows用戶:使用Git Bash執行Shell腳本。
./bin/clone-repos-https.sh (或./bin/clone-repos.sh )構建插件模塊。您必須等到構建成功之前,才打開Intellij,否則Intellij將找不到所有生成的類。第一次使用Maven用戶需要等待幾分鐘,直到從Maven Central下載了所有依賴項。warnings-ng-plugin-devenv./bin/jenkins.sh啟動Jenkins。此命令構建了Jenkins Docker Image,下載所有註冊插件,並用一些作業初始化Jenkins工作區。這也需要幾分鐘(請參閱第9步)。如果所有下載都成功了,但是由於錯誤而導致的安裝失敗,請修復它們並執行mvn -V -U -e install –DskipTests僅重試安裝。
如果錯誤“命令行太長”。發生,執行以下步驟:
@argfile (Java9+)如果由於Jenkins測試超時而導致測試失敗,請執行以下步驟:
-Djenkins.test.timeout=1000 。這將超時限制提高到1000秒。 您可以使用一個簡單的Shell腳本( ./bin/clone-repos.sh )來克隆並在一個步驟中構建模塊。該腳本使用GIT SSH協議檢查以下模塊。這就要求您已在Github註冊了公共密鑰。如果您在GitHub中沒有密鑰,則可以使用腳本./bin/clone-repos-https.sh腳本。使用HTTPS協議。
當您打算為其中一個插件提供拉動請求時,您需要創建存儲庫的叉子並在此叉中進行所有更改。我在編碼樣式項目中創建了一個GitHub協作文檔。
Intellij(Ultimate)是警告插件的主要支持開發環境。一個預定義的項目存儲在文件夾.idea中,該項目引用了警告插件的所有模塊。該項目包含我的編碼樣式和其他一些有用配置的預設。
也應該使用其他IDE(Eclipse,Netbeans,Visual Studio Code)。
All in [module-name]使用提供的Intellij Run配置,以運行相應模塊的單元和集成測試。這些配置已經配置為記錄相應模塊軟件包的分支覆蓋範圍(使用Run with Coverage )。
在調試更改之前,您首先需要找出代碼在哪裡運行:在控制器或代理上?如果不確定,請運行兩個遠程調試者,設置一些斷點並等待相應的調試器停止。
Docker組成的配置啟動Jenkins Controller以“調試”模式自動啟動,即,它正在收聽遠程調試請求。如果您的代碼在控制器中運行,則需要在localhost:8000 (映射到Docker容器中的同一端口)。使用提供的Jenkins Controller (Remote Debugger)調試配置來連接Intellij中的調試器。
Docker組成的配置還可以在“調試”模式下自動啟動Jenkins代理,即它正在收聽遠程調試請求。將localhost:8001 (映射到Docker容器中的同一端口)附加遠程調試器上的調試代碼。使用提供的Jenkins Agent (Remote Debugger)調試配置來連接Intellij中的調試器。
可以使用相應的啟動器UI Tests [module] (Firefox)或UI Tests [module] (Chrome)開始使用UI測試。請注意,兩個發射器都需要安裝相應的硒驅動器。如果這些驅動程序未安裝在本地計算機上的/opt/bin中,則需要調整啟動器配置以匹配您的設置。
所有UI測試都需要在測試的給定主題中運行(即,正在測試的Jenkins,JUT),有關更多詳細信息,請參見接受測試安全帶項目。
此開發環境包含定制的Jenkins安裝,您可以在其中將修改的插件部署到,因此您可以在使用這些插件的一些預配置的作業中直接看到更改。
在此項目中啟動提供的Jenkins控制器(您需要安裝Docker和Docker-Compose)。打開終端並在頂級文件夾中運行./jenkins.sh 。該命令是一個包裝器,可以進行docker-compose up :它使用正確的用戶和組設置,以便正確設置了Jenkins Home文件夾的Docker卷的權限。該命令為Jenkins控制器創建一個Docker容器,一個為Java代理創建了一個。這將需要一些時間,因為將首次調用Docker圖像。創建圖像後,將啟動以下兩個容器:
然後,您可以在URL http:// localhost:8080/。使用以下憑據作為管理員登錄:
Jenkins控制器(Jenkins_home)的主目錄被安裝為Docker卷。即,在主機上可見在./docker/volumes/jenkins-controller上是普通目錄。它將在會議上倖存下來,可以直接在主機上更改,請參閱官方文檔以獲取詳細信息。這有助於檢查詹金斯控制器創建的文件。
由於Jenkins的作業DSL插件中的性能問題,設置新的Jenkins實例非常慢。因此,在創建作業後,刪除jenkins.yaml文件的配置部分是有意義的。您可以在新創建的Jenkins jenkins-no-jobs.yaml中的內容中覆蓋文件的內容./docker/volumes/jenkins-home/jenkins.yaml 。
MacOS下的捲非常慢。在我的MacBook上,在Docker容器中運行analysis-model的Jenkins作業比在同一MacBook上的Linux虛擬機中運行的Docker容器中運行相同的Jenkins作業要慢(聽起來有點荒謬?)。
完成本地開發更改後(即,單位測試都是綠色的),您就應該測試詹金斯的更改。這也有助於為您的更改準備集成測試或UI測試。
如果您僅在analysis-model模塊中具有更改(並且不添加新的API方法),則需要重建和安裝Maven模塊analysis-model.jar ,然後重建相關的Jenkins warpper插件analysis-model-api-plugin 。然後,此插件需要部署到Jenkins。
通過在analysis-model模塊中運行腳本./bin/go.sh來簡化此過程,它將在您的本地Maven存儲庫中安裝模塊analysis-model.jar 。然後,此腳本將構建實際的插件並將其部署到Jenkins。
如果您僅在警告NG插件中更改,則需要重建Jenkins插件warnings-ng.jpi並將其部署到Jenkins。您可以將以下Shell腳本之一用於此任務:
./bin/clean.sh :使用mvn clean install構建插件,並將其成功部署到Jenkins實例中。./bin/go.sh :使用mvn clean install -DskipITs (跳過集成測試)構建插件,並將其成功部署到Jenkins Instace中。./bin/skip.sh :使用mvn clean install -DskipTests (跳過所有測試和靜態分析),將其成功地將其部署到Jenkins實例中。托多
如果您在一個foresics插件(API或GIT實現)中具有更改,則需要重建這些Jenkins插件並將其部署到Jenkins實例中。
為了簡化此過程在相應的插件文件夾中運行腳本./go.sh ,它將構建插件並將其成功部署到Jenkins。
在做出破壞之前,請與我聯繫。通常,可以使更改向後兼容。
也可以使用Intellij Launcher Build and Deploy [module-name]的一個構建腳本。這些發射器構建了相應的插件,並將其部署到Jenkins中。
可以使用Intellij啟動器配置或使用命令行腳本開始UI測試。如前所述,所有UI測試都需要在被測試的給定主題中運行。在我們的情況下,我們使用最新可用的Jenkins LTS版本和Docker Image的預定義插件集。
可以使用相應的啟動器UI Tests Warnings (Firefox)或UI Warnings Tests (Chrome)開始使用UI測試。請注意,兩個發射器都需要安裝相應的硒驅動器。如果這些驅動程序未安裝在本地計算機上的/opt/bin中,則需要調整啟動器配置以匹配您的設置。
您還可以使用提供的Shell Scrips testFirefox.sh或testChrome.sh啟動UI測試。請注意,您可能還需要調整這些腳本(請參見上一節)。