- Jenkins CI/CD 部署
- Linux Jenkins 安装
- Linux Jenkins CI/CD
- Linux Jenkins K8S CI/CD
- K8S Jenkins 安装
- K8S Jenkins CI/CD
1.0 Linux Jenkins 安装
- 在Linux主机环境下安装Jenkins服务
1.1 Jenkins 官方下载
1.2 Jenkins 依赖配置
1 | # tar -xf jdk-21.0.10_linux-x64_bin.tar.gz |
1 | # cat /etc/profile.d/jdk.sh |
1 | # tar -xf apache-maven-3.8.5-bin.tar.gz |
1.3 Jenkins 安装启动
1 | # mkdir -p /data/apps/jenkins/jenkins-work |
1 | # cat /usr/lib/systemd/system/jenkins.service |
1.4 Jenkins 页面配置
- 1、配置解析,浏览器访问: https://jenkins.ink8s.com/
- 2、自定义Jenkins: 选择插件来安装(不安装任何插件)
- 3、创建第一个管理员用户
- 用户名: admin
- 密码: ink8s.com
- 确认密码: ink8s.com
- 全名: admin
- 电子邮件: admin@ink8s.com
1.5 Jenkins 插件安装
1 | // 更新插件之前,将国外下载源改为国内 |
常用插件:
- blue ocean (流水线可视化经典版界面)
- Localization (语言)
- Git (拉取代码)
- Git Parameter (Git参数化构建)
- Eclipse Temurin(JDK Tool) (选择 jdk 版本进行构建)
- Pipeline (流水线)
- Kubernetes (连接Kubernetes动态创建Slave代理)
- Config File Provider (存储配置文件)
- Extended Choice Parameter (扩展选择框参数,支持多选)
- Pipeline Stage View (阶段视图)
手动上传插件(上传 .hpi 文件方式来安装插件)
- jenkins 官网下载插件: https://plugins.jenkins.io/
- 清华源下载插件: https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/git/latest/
- 上传 .phi 插件: 系统设置 –> 插件管理 –> 高级
离线安装插件:
- 将其它机器上已经安装好的 plugins 目录打包,拷贝到需要安装插件的 jenkins 机器上
- war 包安装的 jenkins, 默认 plugins 在 /root/.jenkins/
2.0 Linux Jenkins CI/CD
- 基于Linux环境的Jenkins部署java应用到Linux主机
- 提前配置Jenkins主机与java应用主机的ssh-key互通
- java应用主机应用目录提前创建
2.1 Jenkins 构建前环境配置
2.1.1 JDK1.8 配置
- Jenkins安装依赖的是jdk21。但众多java后端代码编译依然依赖jdk1.8,所以这里单独配置一个jdk1.8。
- 将jdk1.8放到指定目录然后在Jenkins页面进行JDK配置,用于在Pipeline中引用。

2.1.2 mvn 编译参数说明
1 | # mvn clean package -Dmaven.test.skip=true -P prod -am -amd -pl ${build_options} # 打包指定模块,同时打包依赖于所指定模块的模块。常用! |
2.1.3 jenkins 配置gitlab验证
- 系统管理 –> 凭据管理 –> 全局凭据 –> Add Credentials:
- 范围: 全局(Jenkins,nodes,items,all child items, etc)
- 用户名: Gitlab 有权限拉取代码的用户
- 密码: Gitlab 密码
- ID: 不填写(自动生成)
- 描述: GITLAB_AUTH(根据自己需求填写描述)

2.1.4 软件包安装
- Jenkins 本地拉取代码需要使用Git命令
1 | // Git 官网: https://git-scm.com/ |
2.1.5 nodejs 配置
- Jenkins 前端编译以来 nodejs
1 | # tar -xf node-v16.18.0-linux-x64.tar.xz |
2.2 Pipeline 前后端流水线
2.2.1 业务主机环境配置
- jar包启动以来jdk1.8需要配置
1 | // 每个模块的启动项都需要实现配置并开机自启 |
2.2.2 java 后端多模块并发部署
- CD 部分采用并发部署
- 首次构建需要构建2次才能部署成功
1 | pipeline { |
2.2.3 vue 前端构建
1 | pipeline { |
3.0 Linux Jenkins K8S CI/CD
- 基于Linux环境的Jenkins部署java应用到K8S环境
- jdk、nodejs、插件等基础环境延用(1.0|2.0)部分
3.1 Jenkins 构建前环境配置
3.1.1 创建应用部署空间等信息
1 | // 创建空间 |
3.1.2 K8S应用部署权限
- 将 kubectl 和 .kube 目录 scp 到 jenkins 服务器
1 | // 将 k8s master 服务器的 kubectl 文件拷贝到 jenkins 服务器 |
3.1.3 k8s接入外部服务
1 |
3.2 Pipeline 前后端流水线
3.2.1 后端模块部署文件
- 此处仅采用一个模块的相关文件作为参考,实际应是每个构建模块都需配置相关文件
3.2.1.1 Dockerfile 文件
- Dockerfile 文件需要存放于 ink8s/ink8s-admin-api/Dockerfile 路径(此路径为gitlab代码存放路径)
1 | # FROM openjdk:8-jre-alpine |
3.2.1.2 entrypoint.sh 启动脚本文件
- entrypoint.sh 文件需要存放于 ink8s/ink8s-admin-api/entrypoint.sh 路径(此路径为gitlab代码存放路径)
1 | # 设定端口,默认不传参则为9196端口 |
3.2.1.3 deploy.yaml 文件
- deploy.yaml 文件需要存放与 ink8s/nk8s-admin-api/deploy.yaml 路径(此路径为gitlab代码存放路径)
1 | apiVersion: apps/v1 |
3.2.1.4 中间件连接配置修改
- MySQL、Redis等等
- 路径:ink8s/ink8s-admin-api/src/main/resources/application-test.yaml(此路径为gitlab代码存放路径)
1 | spring: |
3.2.1.5 Jenkinsfile 文件
- Pipeline 仅展示3个模块,可供参考
- 路径: ink8s/ink8s-ops/Jenkinsfile(此路径为gitlab代码存放路径)
1 | pipeline { |
3.2.2 前端部署文件
3.2.2.1 Dockerfile
1 | FROM harbor.ink8s.com/ops_apps_tools/nginx:1.20 |
3.2.2.2 nginx配置文件
- 根据实际情况配置nginx配置文件,这里仅供参考
1 | server { |
3.2.2.3 deploy 文件
1 | apiVersion: apps/v1 |
3.2.2.3 tls 配置
1 | # kubectl create secret tls test-ink8s-com -n ink8s-item --key=test.ink8s.com.key --cert=test.ink8s.com.pem |
3.2.2.4 Jenkinsfile 文件
1 | pipeline { |
4.0 K8S Jenkins 安装
4.1 Jenkins 安装
1 | // 创建空间 |
4.1.1 Jenkins 镜像下载
1 | # docker pull jenkins/jenkins:2.346.3-2-lts |
4.1.2 Jenkins RBAC授权
- 创建 RBAC,为 Jenkins 授权
1 | # serviceaccount |
4.1.3 部署 Jenkins
1 | # kubectl create secret tls jenkins-ink8s-com --cert=jenkins.ink8s.com.pem --key=jenkins.ink8s.com.key -n ops |
1 | apiVersion: apps/v1 |
4.1.4 初始化 Jenkins
- 配置解析并访问Jenkins: https://jenkins.ink8s.com
4.1.5 插件安装
- 中文插件: localization: chinese
- git插件: git、gitlab
- sonar插件: sonarqube scanner
- pipeline插件: pipeline、stage view、blue ocean
- kubernetes插件: kubernetes
- kubeconfig插件 Config File Provider
- 扩展选择框,支持多选 Extended Choice Parameter
- Git参数化构建 Git Parameter
4.2 Jenkins Slave 架构
4.2.1 架构说明
- 所谓 Jenkins Master/Slave 架构,及在Master上进行任务分配。然后由Slave来完成,不过Slave运行方式有2种:
- 静态Slave: 需要固定的节点,配置其对应环境,手动注册到Master,然后执行任务,任务完成节点处于空闲等待状态
- 动态Slave: 由Master动态创建Slave的Pod,自动注册到Master,然后执行任务,任务结束Pod自动销毁
4.2.1.1 静态Jenkins Slave
能够分担主节点上的压力,加快构建速度(所有任务都由Master执行,造成构建速度缓慢,且任务多会出现排队现象)
能够将特定的任务在特定的主机上运行(比如: 不同任务需要不同的编译环境)
缺点:
- Master发生单点故障时,整个Jenkins都没办法使用
- 每个Slave的环境不一样,用于完成不同项目的编译打包工作,但这些不同环境的配置管理及维护都特别困难
- 有的Slave构建任务频繁,可能出现排队等待,而有的Slave又处于空闲状态,所以会出现资源分配严重不均衡
- 因为每个Slave都需要一台虚拟机,当Slave空闲时,等于就空跑,资源浪费明显
4.2.1.2 动态Jenkins Slave
- 所谓动态Slave,就是根据任务进行动态供应和动态删除。Jenkins Master 和 Jenkins Slave 都是以Pod的形式运行在Kubernetes集群节点上,Master 运行在其中一个节点上,其配置数据存储在一个持久卷声明中。而Slave则随机运行在各个节点上,但它不会一直处于运行状态,而是根据需求动态创建并自动删除
- 工作流程: 当 Jenkins Master 收到构建请求,会根据标签动态创建一个Pod,该Pod就是Jenkins Slave,然后Jenkins Slave会自动注册到Jenkins Master上。当Slave运行完任务后,会自动释放,相关的Pod也会被删除
- 优点:
- 高可用性: (当Jenkins Master 故障时,kubernetes会自动创建一个新的Jenkins Master容器,并将持久卷挂载至新创建的容器,保证数据不会丢失,从而实现Jenkins的高可用性)
- 高可用扩展性: (当kubernetes集群因资源不足而导致任务长时间排队等待时,可以向集群新增节点,来缓解压力)
- 资源分配合理: (kubernetes动态分配Slave至空闲节点,避免因单个节点资源利用率高而导致排队等待)
4.2.2 Jenkins 动态 Slave 配置
系统管理 -> 节点管理 -> Configure Clouds -> Add a New Cloud -> Kubernetes:
- 点击: Kubernetes Cloud details …
- Kubernetes 地址: https://kubernetes.default.svc.cluster.local
- Kubernetes 命名空间: ops # 这里表示拉起来的 pod 是在什么空间下运行
- Jenkins 地址: http://jenkins-svc.ops.svc.cluster.local:8080
- Jenkins 通道: jenkins-svc.ops.svc.cluster.local:50000
- 点击: Kubernetes Cloud details …
解析jenkins地址: # dig @10.96.0.10 jenkins-svc.ops.svc.cluster.local +short
4.2.3 测试动态 Slave
1 | pipeline { |
4.3 Jenkins 动态 Slave Pod模板
- jnlp 镜像是用来连接Jenkins Master以及共享Master的WORKSPACE。但该镜像并没有maven、docker、kubectl等常用命令
- 为此需要指定几个镜像,后期通过pipeline将不同的任务交由同一个pod的不同容器来执行
4.3.1 Maven
1 | # cd /root/ops/maven |
1 | # cat settings_docker.xml # 修改依赖地址为阿里云地址 |
4.3.2 NodeJs
1 | # cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/epel.repo ./ |
4.3.3 Docker
- 镜像 build 时的 Dockerfile 和 entrypoint.sh 2个文件在 gitlab 代码中, build 时会用到
1 | # docker pull docker:20.10 |
4.3.4 Containerd
- 1.24.0 以后的 kubernetes 版本采用 containerd 方式,如下为使用 containerd 起 Pod
1 | 1. 准备 containerd 所需文件 |
1 | // Dockerfile 文件(里面文件需要提前准备好到当前目录) |
1 | // 使用的时候同 docker 方式一样,采用 volumeMounts |
4.3.5 kubectl
1 | # cat Dockerfile |
4.3.6 测试模板镜像
- 运行一个流水线任务,定义Pod模板中的容器名称以及容器镜像地址,而后定义任务,不同的任务由不同的容器来执行
1 |
|
1 | pipeline { |
5.0 K8S Jenkins CI/CD
- 有点懒,不是很想更新。有需要的话加微信催我更新吧…
- 本文作者: [email protected]
- 本文链接: https://www.ink8s.com/2025/09/23/jenkins-ci-cd-部署/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!