这个基于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测试。请注意,您可能还需要调整这些脚本(请参见上一节)。