02-Jenkins配置编译项目

简介: Jenkins配置编译任务,实现从GitLab拉取代码,通过Maven/Node编译打包,Docker构建镜像并推送到CCE仓库,kubectl更新服务。支持后台app-web、system-server及前端Vue项目自动化构建。结合86与164服务器特性,完成镜像导出tar包,实现跨版本兼容。

Jenkins配置编译任务
项目的大致流程:
从gitlab上拉取程序
运行 maven/Node 编译打包
运行Dockerfile打包成镜像
上传镜像到cce云上镜像仓库
使用kubectl更新cce云上的负载镜像
需要打包编译的内容:
后台项目的app-web模块
后台项目的system-server模块
前端VUE项目
后台编译
以admin登录Jenkins,选择新建任务。
任务名称:任意起,例如dev_myproject_java
选择构建一个自由风格的软件项目(也可以选择复制,填写需要复制的任务的任务名称)
General组:
限制项目的运行节点:填写节点服务器的标签表达式,限制只在该服务器上运行任务。myproject_dev
点击高级
使用自定义的工作空间:填写源程序下载到的服务器路径。/root/build/source/myproject/myproject-vue
显示名称:可以配置一个中文名,用于在列表页面展示。dev-后台-app
源码管理组:
选择Git
Repository URL:代码路径。填写git@xxxxxx那个。http:xxxxx的没有设置会报错。
从gitlab复制下来的路径需要进行调整,前面加上ssh://前缀,ip后面加上gitlab的22端口映射出来的端口号8022。例如:从gitlab复制出来的路径为git@192.168.xxx.xxx:myproject/myproject-vue.git,调整后为ssh://git@192.168.xxx.xxx:8022/myproject/myproject-vue.git
Credentials:选择前面创建的Jenkins用户私钥的那个凭据
Branches to build:指定要拉取的分支。例如本项目的*/dev_20240712
源码库浏览器:用于在jenkins上直接看本地构建时的代码差异。
源码库浏览器:gitlab
URL:gitlab的本项目页面:http://192.168.xxx.xxx:8090/myproject/myproject-vue/
version:gitlab版本:17.0
构建触发器组:
可以配置每次有代码push到gitlab时自动构建。为避免频繁构建,项目采用手动点击构建,不配置触发器。
构建环境组:
用于给节点服务器准备构建环境,使用Ant构建时可以配置。项目使用Maven、Node构建,且已经在节点服务器上手工部署了Maven、Node,无需进行配置。
Build Steps组:配置从gitlab拉取代码之后操作,即具体的构建执行步骤。项目全部使用shell方式执行。
登录CCE云:
执行Maven编译打包
执行Dockerfile制作镜像、推送CCE镜像仓库、更新cce上的负载镜像
登出CCE
前端VUE编译
与app-web模块的操作步骤类似,只是将Maven编译换成Node编译:
Jenkins打包docker镜像
86服务器上安装的Docker版本比较高,save出来的docker镜像tar文件无法直接在页面导入进CCE中。
164服务器上的Docker版本低,导出的镜像可以在页面导入CCE中,但是无法使用CCE客户端。
所以项目源码拉取、编译打包、生成镜像、kubectl更新等操作在86服务器上进行。如果需要导出docker镜像,则在164服务器上进行。
配置打包Docker的任务
在Jenkins上新建一个164节点。
新建一个任务save_docker,在164上运行,用于将docker镜像导出成tar文件。
勾选参数化构建过程:
字符参数IMAGE_LIST:需要打包的镜像列表(多个镜像以分号分隔)
布尔参数NEED_SAVE_TAR:是否需要导出成tar
增加一个执行shell的步骤:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
if [ "$NEED_SAVE_TAR" = true ] && [ -n "$NEED_SAVE_TAR" ]; then

# 检查 IMAGE_LIST 是否为空
if [ -z "$IMAGE_LIST" ]; then
    echo "IMAGE_LIST is empty."
else
    # 保存原始的 IFS
    OLD_IFS=$IFS

    # 设置 IFS 为分号
    IFS=';'

    # 遍历 IMAGE_LIST
    for image in $IMAGE_LIST; do
        # 还原 IFS 为默认的值
        IFS=''

        fullImagePath=${image}
        echo "开始下载镜像:${fullImagePath}"
        docker pull ${fullImagePath}
        echo '镜像下载完成.'

        # 提取 registry, namespace, image, 和 tag
        registry_and_namespace_and_image=${image%:*}
        tag=${image##*:}

        # 将 registry 和 namespace/image 分开
        registry=${registry_and_namespace_and_image%%/*}
        namespace_and_image=${registry_and_namespace_and_image#*/}

        # 提取 namespace 和 image
        namespace=${namespace_and_image%%/*}
        image=${namespace_and_image#*/}
        imageName=${image%%:*}

        echo "转换tag"
        newImageName=${namespace}/${imageName}:${tag}
        docker tag ${fullImagePath} ${newImageName}
        echo "转换完成"

        echo "开始将镜像打成tar包:${namespace}-${imageName}-${tag}.tar"
        docker save -o /root/DockerSaveTar/${namespace}-${imageName}-${tag}.tar  ${newImageName}
        echo "打成tar包完成."        

        echo "删除本地下载的镜像"
        docker rmi ${fullImagePath} ${newImageName}
        echo "删除完成"
    done

    # 恢复原始的 IFS
    IFS=$OLD_IFS
fi

else
echo "NEED_SAVE_TAR为false或空,不执行保存tar包的操作"
exit 0
fi
直接调用该任务
可以在Jenkins上直接调用该任务,需要传入参数。例如:
1
2
IMAGE_LIST=192.168.xxx.xxx:8889/myproject/app-web:20240903-194055;192.168.xxx.xxx:8889/myproject/system-server:20240903-194055
NEED_SAVE_TAR=true # 勾选即可
任务便会自动拉取这两个镜像导出成tar
在其他任务执行后自动调用该任务
例如在预警后台的编译任务中,生成docker镜像推送仓库后,将docker镜像名称写入一个文件中:
1
echo "IMAGE_LIST=192.168.xxx.xxx:8889/myproject/app-web:${VERSION_ALL_TAG};192.168.xxx.xxx:8889/myproject/system-server:${VERSION_ALL_TAG}" > /root/build/source/myproject/myproject-java-env.properties
新增一个构建后操作:选择Trigger parameterized build on other projects(需要安装对应插件后才会有该选项)。
Projects to build(构建后需要执行的任务,多个任务逗号分隔):save_docker(即打包docker任务)
Trigger when build is(什么情况下调用后续任务):Stable or unstable but not failed(稳定、有警告都执行,只要不是失败)
添加参数:
Parameters from properties file(从properties文件中获取参数):路径为前面写入的文件/root/build/source/myproject/myproject-java-env.properties
Boolean parameters(添加一个布尔参数):NEED_SAVE_TAR,手动修改该参数的值来控制是否生成tar

相关文章
|
存储 数据库 Docker
Docker Hub和镜像仓库
Docker Hub 是 Docker 公司提供的官方公共 Docker 镜像注册表,允许用户存储、分享和获取 Docker 镜像。在 Docker Hub 上,你可以找到许多官方和社区维护的 Docker 镜像,这些镜像涵盖了各种常见的应用程序和服务,如数据库、Web 服务器、应用程序框架等。
7286 0
阿里云商标注册申请官方入口(附商标自助申请流程)
阿里云商标分为商标智能注册申请、商标安心注册申请和商标顾问注册申请
33462 4
阿里云商标注册申请官方入口(附商标自助申请流程)
|
canal Kubernetes 关系型数据库
【K8S系列】深入解析k8s网络插件—Canal
【K8S系列】深入解析k8s网络插件—Canal
3979 0
|
Linux 开发工具 Python
CentOS7安装python3超详细教程
CentOS7安装python3超详细教程
2911 0
|
7月前
|
人工智能 Prometheus 运维
阿里云1分钟或本地部署OpenClaw+AIOps高效运维实战:Prometheus+夜莺MCP,轻量化监控分析指南
在运维场景中,传统监控架构往往存在链路复杂、定制化成本高、AI能力融合不足等问题。OpenClaw(俗称“龙虾”)作为功能强劲的AI智能体工具,虽具备强大的自动化执行能力,但直接部署面临权限过高、不符合生产环境安全要求的痛点。而夜莺MCP(管理控制平面)与Prometheus的组合,虽能实现监控数据的采集与可视化,却存在上下文交互Token消耗大、运维人员精力分散等问题。
2172 128
|
6月前
|
安全 数据建模 测试技术
2026阿里云SSL证书价格全解析:免费版与付费版对比及申请指南
阿里云SSL证书提供免费DV单域名(Digicert,3个月)及多品牌付费方案(DV/OV/EV),覆盖测试到金融级安全需求。2026年价格透明,含WoSign、GlobalSign等国际品牌,新老用户享5折起优惠,申请流程一键便捷。(239字)
|
9月前
|
机器学习/深度学习 算法 关系型数据库
🎮 强化学习
强化学习(RL)是一种通过智能体与环境交互,基于试错和延迟奖励学习最优策略的机器学习方法。核心要素包括状态、动作、奖励、策略与价值函数。常用算法有Q-learning、策略梯度、PPO、DPO等,广泛应用于游戏、机器人及大模型对齐人类偏好(如RLHF)。其关键挑战在于平衡探索与利用、偏差与方差,并提升样本效率与训练稳定性。
|
7月前
|
人工智能 安全 API
实测可用:OpenClaw阿里云1分钟部署+免费Kimi-k2.5配置+飞书远程操控教程
2026年,OpenClaw(原Clawdbot)凭借“中文友好+功能强大+生态开放”的核心优势持续爆火,2026.2.2版本新增飞书专属适配、更快构建速度与全面安全加固,成为国内AI玩家的首选智能执行引擎。其真正的魅力在于不仅能本地完成文件管理、代码开发等任务,还能通过免费AI模型与远程操控功能,实现“随时随地发指令,AI全程自动办”。
4074 3
|
7月前
|
人工智能 自然语言处理 安全
云上部署OpenClaw(Clawdbot)多少钱?2026年阿里云部署OpenClaw新手教程及收费标准参考
OpenClaw(前身为Clawdbot、Moltbot)作为一款开源AI代理与自动化平台,凭借自然语言控制、多工具集成、跨场景任务执行等核心优势,成为个人办公效率提升与轻量团队协作优化的重要工具。其不仅能实现文件处理、邮件管理、代码生成等基础操作,还可通过对接主流大语言模型构建个性化工作流,适配从个人日常办公到团队协同的多元需求。2026年阿里云推出的一键部署方案,通过预置专属镜像简化了环境配置流程,同时提供清晰透明的计费模式,让不同需求的用户都能精准规划成本并快速落地使用。本文将详细拆解阿里云部署OpenClaw的完整流程,结合官方计费标准梳理费用构成与成本控制方案,为用户提供从部署到运维
6624 4
|
9月前
|
Java Maven 数据安全/隐私保护
06-nexus私仓环境搭建
本文介绍Nexus Repository Manager OSS版的安装与配置,包括JDK环境准备、Nexus部署、用户创建、启动服务及Web界面登录。详细说明如何搭建Maven、Docker私仓,实现Jar包上传、本地仓库迁移、项目配置使用私仓,以及Docker镜像的推送拉取。同时简述npm、helm等其他类型仓库的启用方法,适用于企业级制品管理。

热门文章

最新文章