ubuntu上安装jenkins后怎么构建windows项目
Jenkins部署在Linux上,可通过Jenkins的主从(Agent)架构,添加Windows节点来实现Windows环境下的构建
一、开发环境
win10、VMware17.6.1、ubuntu20.04、jdk21、jenkins2.516.3
目前由于缺少电脑,开发环境都是在我本地电脑上搭建,后面会专门配置一台电脑用于部署jenkins服务器
二、前言
Jenkins的构建行为和最终产物,主要取决于你为它配置的构建环境,而不是Jenkins本身安装在哪个操作系统上。 对于跨平台项目,更推荐将jenkins部署在Linux系统上,然后通过Jenkins的主从(Agent)架构,添加Windows节点来实现Windows环境下的构建。
Jenkins主控(Ubuntu)负责任务的调度和管理,而实际的编译、链接和打包等构建工作,是在你指定的Windows节点上执行的 。Windows节点上需要安装和配置项目的构建环境,例如CMake、Qt等必要的编译工具和库
添加Windows构建节点、启动连接、配置构建参数的步骤如下
三、构建Windows项目
1、在Jenkins网站上添加Windows构建节点
进入Jenkins网站主页->点左侧栏中的 构建执行状态(或者点设置图标->点Nodes)进入节点列表->点New Node新建节点
节点名称设置为 WindowsNode(任意)->Type选择 Permanent Agent->点Create,进行如下配置,详细每个设置的含义点击选项上方的 “?”

其中 Number of executors 表示Jenkins 可以在此节点上执行并发构建的最大数目

设置完成后点保存,得到节点WindowsNode,此时处于未连接状态,如下图所示

2、在windows下安装代理,启动代理服务
点WindowsNode,进入如下界面,查看 、复制 Run from agent command line: (Windows) 中的脚本,用来下载 agent.jar 代理以及启动代理服务

之前Windows构建节点中配置的本地Windows目录为:E:\Nodes,在这个目录下安装代理程序,本地Windows下需要安装java环境,java版本需要保持与ubuntu中安装的java版本一致,我这里为JDK21,去Oracal官网选择对应的版本下载,地址:Java Downloads | Oracle

下载之后按照提示安装,并配置好系统环境变量

在本地 E:\Nodes目录下通过命令行执行之前复制的脚本,下载下载 agent.jar 代理以及启动代理服务与jenkins服务器建立连接。为了方便后续快速建立连接,可以将:
java -jar agent.jar -url http://localhost:8080/ -secret 9515805275015a8243c4bd47fbbabf29b89f40925e1122750eafdb0f2938154c -name WindowsNode -webSocket -workDir "E:\Nodes"
写入一个.bat文件 runnode.bat,双击启动。连接之后Jenkins/Nodes上的WindowsNode节点连接状态发生改变,如下图,表示该节点与Jenkins服务器已经建立连接。

注意:这里的 localhost 表示本机的ip,如果将windows构建节点配置在其他电脑上,并且使用了端口转发的方式访问jenkins,这里应该改为宿主机的ip地址。如下图所示:

3、在jenkins上配置构建脚本,使用之前添加的Windows节点构建
在Jenkins上创建一个Item,选择 限制项目的运行节点,标签表达式填之前创建好的节点名称 WindowsNode

对于同一个跨平台项目,其他配置参数可保持不变;只需修改Build Step 就行了,Linux下选择 Execute Shell,Windows下选择 Execute Windows batch command,然后执行对应的脚本进行编译,打包。
使用以上创建的Windows节点进行自动构建,构建后生成的文件位于本地Windows的 E:\Nodes\workspace 目录下
4、检出策略选择

-
Always check out a fresh copy:简称全新完整检出,逻辑是丢弃本地副本,全量拉取最新干净代码,冲突规避是完全杜绝(无合并),优势是代码 100% 一致、零冲突、操作省心,劣势是全量拉取稍慢,场景是团队协作、怕冲突、追求代码干净、CI/CD 构建。
-
Emulate clean checkout + svn update:简称模拟干净检出 + 增量更新,逻辑是先删未版本化 / 忽略文件,再执行 svn update,冲突规避是几乎杜绝(仅极端同行修改冲突),优势是增量拉取速度快、兼顾干净与效率,劣势是极端情况需手动解冲突,场景是追求更新效率、需保留受控文件、团队协作。
-
Use'svn update' as much as possible:简称纯增量更新,逻辑是无条件优先执行 svn update,直接合并本地与远端修改,冲突规避是极易触发(多人协作必现),优势是增量拉取速度最快,劣势是冲突频发、需频繁解冲突,场景是单人开发、无其他协作人员。
-
svn revert → svn update:简称还原本地 + 增量更新,逻辑是先撤销所有本地未提交修改,再执行 svn update,冲突规避是完全杜绝,优势是无冲突、增量拉取快,劣势是丢失本地未提交修改(高风险),场景是本地仅临时测试、无需保留未提交修改、纯验证代码场景。
-
Do not touch working copy (外部脚本更新):简称交由外部脚本管控,逻辑是 SVN 不干预,全由外部脚本维护副本,冲突规避是冲突泛滥(无管控),优势是高度自定义(适配自研脚本),劣势是代码易错乱、无版本保障,场景是公司有成熟自研更新脚本体系、专业运维管控。
5、常见问题及解决方法
5.1 jenkins构建报错
[1/432] Automatic MOC and UIC for target Common
FAILED: src/Common/Common_autogen/timestamp src/Common/Common_autogen/mocs_compilation.cpp
原因:没有安装独立的cmake,系统环境变量中也没有配置,导致无法通过CMake 找到 Qt 工具链
解决办法:安装独立的cmake,并在系统环境变量中进行配置
Visual Studio 自带的 CMake 特点:
1、不是全局的:VS 的 CMake 通常只在其 Developer Command Prompt 中可用
2、版本可能不兼容:VS 自带的 CMake 可能版本较旧或针对特定配置
3、路径特殊:通常位于 C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
更多推荐



所有评论(0)