CI/CD------使用Jenkins实现自动化部署与持续集成
https://blog.csdn.net/xiaochenXIHUA/article/details/160737557
一、Jenkins的基础配置
1.1、Jenkins必须安装的插件
| 插件类型 | 插件名称 | 插件用途 | 插件核心场景 |
|---|---|---|---|
| 可视化与流水线核心 | Blue Ocean | Jenkins 现代化 UI,专为 Pipeline 设计,可视化 CI/CD 流程,支持拖拽编辑流水线 | 替代传统视图,直观展示阶段 / 步骤状态、失败定位,支持分支与 PR 可视化 |
| 可视化与流水线核心 | Pipeline(workflow-aggregator) | Jenkins 流水线核心,支持代码化定义 CI/CD(Jenkinsfile),含声明式 / 脚本式语法 | 所有自动化流程,如拉代码→构建→测试→打包→部署,支持共享库扩展 |
| SSH远程操作(发布+代理) | Publish Over SSH | 通过 SSH/SCP远程传输文件 + 执行命令,支持密码 / 密钥认证,构建前后均可执行。 | 传统部署(如将 Jar / 静态文件传到远程服务器并启动),支持失败重试、伪终端。 |
| SSH远程操作(发布+代理) | SSH Agent Plugin | 在构建中通过ssh-agent提供 SSH 密钥,免密执行远程命令 / 拉取代码 ,Pipeline 用sshagent步骤。 |
流水线中免密 SSH(如 Git SSH 拉取、远程 Docker 操作),无需手动管理密钥文件。 |
| SSH远程操作(发布+代理) | SSH Plugin(SSH) | 基础 SSH 连接与命令执行,轻量版 Publish Over SSH,适合简单远程操作。 | Freestyle 项目快速执行远程命令,配置简单、依赖少。 |
| 容器与云原生 | Docker | Jenkins 与 Docker 守护进程交互,构建 / 推送 / 运行容器镜像,管理本地 / 远程 Docker 主机。 | 容器化构建(如打包应用为镜像)、镜像仓库推送、容器启动 / 停止。 |
| 容器与云原生 | Docker Pipeline | Pipeline 专用 Docker 集成,在 Jenkinsfile 中直接定义容器化步骤,支持镜像构建、推送、多容器并行。 | 流水线内 Docker 全流程(如构建镜像→推送到 Harbor→部署),语法简洁、原生支持。 |
| 容器与云原生 | Kubernetes Plugin | 动态分配 K8s Pod 作为 Jenkins Agent,按需创建 / 销毁构建 Pod,弹性扩缩容,支持 Pod 模板定义多容器 | 云原生 CI/CD,大规模构建集群,隔离构建环境,支持微服务并行构建 / 测试 |
1.2、Jenkins必备的插件组合
| 插件组合 | 说明 |
|---|---|
| 传统部署(无容器) | * 必备:Pipeline + Blue Ocean + Publish Over SSH + SSH Agent * 流程:Blue Ocean 编辑 Pipeline → 拉代码构建 → SSH Agent 免密 → Publish Over SSH 传包 + 远程启动 |
| 容器化部署(Docker) | * 必备:Pipeline + Blue Ocean + Docker + Docker Pipeline + SSH Agent * 流程:Pipeline 内 Docker 构建镜像 → 推送仓库 → SSH 免密远程部署容器 |
| 云原生(K8s) | * 必备:Pipeline + Blue Ocean + Kubernetes + Docker + Docker Pipeline * 流程:K8s 动态 Agent → 容器化构建 → 镜像推送 → K8s 部署 |
1.3、Jenkins安装插件的注意事项
安装路径:Jenkins → Manage Jenkins → Manage Plugins → Available Plugins,搜索插件名后勾选需要安装的插件安装并重启。
依赖关系:
Docker Pipeline 依赖 Docker 插件
SSH Agent 依赖 SSH Credentials 插件
Kubernetes 需集群权限与 kubeconfig 配置
安全建议:密钥凭证加密存储,最小权限配置,避免暴露敏感信息。





1.4、Jenkins的全局工具配置
登录到jenkins的web后台,点击右上角的【齿轮图标】(Manage Jenkins)-->【System Configuration下的"全局工具配置"】界面对JDK、git、Maven进行配置。
| jenkins的全局配置内容 | 配置内容 |
|---|---|
| JDK | 别名(name):【jdk21】 JAVA_HOME:【/data/openjdk2109010】 |
| git | Name:【git】 Path to Git executable:【/usr/bin/git】 |
| Maven | Name:【maven3.9.15】 MAVEN_HOME:【/usr/local/maven】 |




1.5、凭据配置
登录到jenkins的web后台,点击右上角的【齿轮图标】(Manage Jenkins)-->【Security下的"Credentials"】-->【Add Credentials】即可添加新的凭据;常用【Username with password】与【SSH Username with private key】,如下图所示:



1.5.1、jenkins生成并添加gitlab的SSH密钥凭据
首先在jenkins所在服务器生成自己的密钥对,然后将生成的公钥(结尾是.pub)的文件内容在gitlab中配置;其次将生成的私钥文件内容(注意:文件内容必须合并为一个字符串,不能是回车的多个字符串)到凭据中,如下图所示:
bash
#在jenkins所在服务器上生成密钥对
#1-在指定路径新生成指定名称的密钥对
ssh-keygen -t ed25519
/root/.ssh/id_ed25519_gitlab
#由于没有使用默认的文件名称,因此需要配置SSH
vi ~/.ssh/config
#【~/.ssh/config】文件的内容
Host gitlab.ck.com
HostName gitlab.ck.com
User git
Port 22222
IdentityFile ~/.ssh/id_ed25519_gitlab
IdentitiesOnly yes
#2-查看密钥对的公钥信息
cat ~root/.ssh/id_ed25519_gitlab.pub
#3-在jenkins的hosts文件末尾添加gitlab服务器的域名解析
cat >>/etc/hosts <<EOF
192.168.1.39 gitlab.ck.com
EOF
#4-查看密钥对的私钥信息
cat ~root/.ssh/id_ed25519_gitlab






在jenkins上配置登录gitlab的凭证,如下图所示:


1.5.2、jenkins配置用户密码凭据


二、gitlab与jenkins集成实现自动化部署流程
2.1、基础架构
jenkins自动从gitlab的指定仓库中拉取代码,然后jenkins将拉取到的代码进行编译、打包等工作,最后将打包好的内容发送到对应的应用服务器上部署,如下图所示:


2.2、gitlab与jenkins部署java maven项目流程
jenkins调用git从远程仓库(如:gitlab)克隆代码到本地仓库;然后jenkins使用本机的maven编译代码打包放到JENKINS_HOME中;接着将war包通过SSH发生到远程主机的指定目录中;最后拷贝远程主机指定目录中的war包部署到tomcat中进行发布,如下图所示:

2.3、gitlab与jenkins部署docker容器项目流程
开发电脑将项目代码提交到远程仓库中;jenkins调用git从远程仓库中拉取到项目代码,然后将项目代码进行编译、构建docker镜像,接着将docker镜像推送到镜像仓库中;最后jenkins部署(先对测试环境进行拉取项目的docker镜像部署测试);稳定后再对生产环境部署。

2.4、gitlab与jenkins部署k8s流程
开发电脑将项目代码提交到远程仓库中;jenkins监控远程仓库的项目代码库,一旦远程仓库的项目代码有变化,就会触发构建项目操作(构建出项目的docker镜像),构建完成后将项目docker镜像推送到镜像仓库;与ks8有两种交互方式:
《1》最简单粗暴的方法:jenkins直接通过ssh连接到k8s的某个节点,登录到节点后使用【kubectl】操作节点部署docker镜像。
《2》jenkins直接通过k8s提供的API接口,将需要操作的任务提交到这个接口中,让k8s内部去执行【更推荐,但是需要在jenkins上配置很多插件内容,较为复杂】。
详细的操作流程如下图所示:

| spring Cloud与K8S |
|---|
| **Spring Cloud:**基于Java的微服务框架,用来管理微服务,提供了服务发现、负载均衡、配置管理等功能。 |
| Kubernetes: 是一个容器编排平台,也可以用来管理微服务,提供了服务发现、负载均衡、自动修复、滚动升级等功能。 |
| 两种部分功能重合,Spring Cloud侧重于开发,Kubernetes侧重与运维。 |
| 不建议两者混用,推荐使用Spring boot+Kubernetes,使用Spring boot构建微服务,然后通过k8s管理微服务。 |
