Jenkins配置编译项目

简介: 基于Jenkins实现自动化编译部署,涵盖后台Java模块、前端Vue项目。流程包括:GitLab拉取代码,Maven/Node编译,Docker打包镜像,推送至CCE镜像仓库,kubectl更新服务。通过自由风格任务配置构建步骤,支持手动触发与参数化导出镜像为tar包,适配不同Docker版本环境,提升发布效率与兼容性。

Jenkins配置编译任务
项目的大致流程:
1
从gitlab上拉取程序
2
运行 maven/Node 编译打包
3
运行Dockerfile打包成镜像
4
上传镜像到cce云上镜像仓库
5
使用kubectl更新cce云上的负载镜像

需要打包编译的内容:

后台项目的app-web模块

后台项目的system-server模块

前端VUE项目

后台编译
1
以admin登录Jenkins,选择新建任务。
2
任务名称:任意起,例如dev_myproject_java
3
选择构建一个自由风格的软件项目(也可以选择复制,填写需要复制的任务的任务名称)

General组:
1
限制项目的运行节点:填写节点服务器的标签表达式,限制只在该服务器上运行任务。myproject_dev
2
点击高级
3
使用自定义的工作空间:填写源程序下载到的服务器路径。/root/build/source/myproject/myproject-vue
4
显示名称:可以配置一个中文名,用于在列表页面展示。dev-后台-app

源码管理组:
1
选择Git
2
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
3
Credentials:选择前面创建的Jenkins用户私钥的那个凭据
4
Branches to build:指定要拉取的分支。例如本项目的*/dev_20240712
5
源码库浏览器:用于在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方式执行。
1
登录CCE云:
2
执行Maven编译打包
3
执行Dockerfile制作镜像、推送CCE镜像仓库、更新cce上的负载镜像
4
登出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

目录
相关文章
|
云安全 运维 负载均衡
【纯干货】针对《等保2.0》要求的云上最佳实践——网络安全篇
伴随着国内企业上云步伐的加快,越来越多的企业需要对云上关键业务进行等级保护自查或完成相关认证。本文以《GB/T 22239-2019 信息安全技术 网络安全等级保护基本要求》中所要求的三级标准为参考,重点关注其中所涉及的网络安全高危风险部分,为企业提供阿里云上有针对性的安全建设最佳实践,助力企业构建层次化的云上网络安全防御体系,保障核心业务的安全运行。
3315 1
【纯干货】针对《等保2.0》要求的云上最佳实践——网络安全篇
|
运维 安全 Linux
Jumpserver堡垒机部署和基本使用
Jumpserver堡垒机部署和基本使用
1945 2
|
开发工具 Android开发 iOS开发
【教程】app备案流程简单三部曲即可完成
2. 应用信息登记:开发者需要在应用商店或应用发布平台上进行应用信息登记,填写应用名称、应用版本号、应用描述、应用类型、所属类别、收费方式、开发机构、联系方式等信息。这些信息将会被展示在应用商店或应用发布平台上,供用户查看。
|
2月前
|
人工智能 运维 API
阿里云OpenClaw汉化版零门槛部署指南:全中文界面+代码命令详解
在AI自动化办公全面普及的2026年,OpenClaw(前身为Clawdbot、Moltbot)凭借自然语言指令操控、多任务自动化执行、多平台适配的核心优势,成为个人与中小企业搭建专属AI助手的首选开源轻量级工具。它不仅能完成文档生成、文件解析、服务器运维等基础工作,更可通过阿里云一键部署实现7×24小时稳定运行。尤其适配的汉化版,以全中文界面彻底解决了原版英文操作门槛高的痛点,搭配零配置适配设计,让零基础用户也能快速上手,真正实现“零技术门槛解锁中文AI办公”。
4666 6
|
8月前
|
Web App开发 Ubuntu Linux
Linux之Ubuntu操作系统安装
1、在Ubuntu系统下,可以使用自带的U盘启动制作软件制作启动盘。使用方法和rufus类似。 2、或者用dd命令制作启动盘,关于dd命令的使用方法可以百度查看。经过亲自实践,archlinux系统和红旗9.0系统的启动U盘就是用dd命令制作成功。
|
8月前
|
应用服务中间件
HTTP协议中常见的状态码
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类,常见状态码包括:101(请求已接受)、200(请求成功)、302(重定向)、400(请求错误)、401(未认证)、403(无权限)、404(资源不存在),以及500(服务器错误)、502(网关错误)、503(服务不可用)、504(网关超时)等。
461 0
|
jenkins 持续交付 开发工具
jenkins学习笔记之一:流水线基础语法
jenkins学习笔记之一:流水线基础语法
|
API 定位技术
天气预报1天-中国气象局-IP查询版免费API接口教程
此接口基于IP地址自动判断并提供该地区当日的天气信息,数据源自中国气象局。支持POST/GET请求,需提供用户ID和KEY,可选输入IP地址,默认返回北京天气。返回参数包括天气详情、地理位置及IP等。示例请求与响应详见文档。
1214 8
|
网络协议 Linux 网络安全
在Linux中,如何配置Samba共享?
在Linux中,如何配置Samba共享?