网站首页 > 博客文章 正文
当我们推送代码到Gitlab时,Gitlab会主动地通知Jenkins对应的任务,它会通过设置的源码管理去拉取Gitlab上对应地址的代码。
然后执行我们预先设置好的构建的脚本(脚本是我们在之前做的构建镜像以及推送到阿里云)。
接着再通过我们上面Publish over SSH配置好的信息登陆到Kubernetes的部署节点。
最后执行部署脚本进行部署,更新pod。
系统组件准备
组件 | 说明 |
GitLab | 源码管理工具,支持 Webhook |
Jenkins | 持续集成工具,触发构建和部署流程 |
Docker | 构建容器镜像 |
Kubernetes | 运行生产环境容器 |
Harbor(可选) | 私有镜像仓库,替代 DockerHub |
Helm(推荐) | Kubernetes 的包管理工具 |
CI/CD 流程触发示意
- 开发者 Push 代码到 GitLab。
- GitLab Webhook 通知 Jenkins。
- Jenkins 拉取代码 → 构建镜像 → 推送镜像 → 更新 K8s 应用部署。
- K8s 滚动更新,应用上线。
详细部署流程
1 Jenkins 安装及配置(在 K8s 或物理机)
- 安装 Jenkins(可用 Helm chart 安装在 K8s 上):
helm repo add jenkins https://charts.jenkins.io
helm repo update
helm install jenkins jenkins/jenkins --set controller.adminPassword=admin
- 安装插件(必须):
- GitLab Plugin
- Kubernetes CLI Plugin
- Docker Pipeline
- Git Parameter Plugin
- SSH Agent Plugin
- 配置 GitLab 凭据(SSH / Access Token)
2 GitLab 配置 Webhook(推送时触发 Jenkins)
在 GitLab 项目中:
- Settings → Webhooks
- 添加 Jenkins 触发地址,例如:
http://<jenkins-ip>/project/<job-name>
3 Jenkinsfile 编写(放入 GitLab 仓库)
Jenkinsfile 示例:构建并部署到 K8s
pipeline {
agent any
environment {
IMAGE_NAME = "registry.example.com/myapp:${BUILD_NUMBER}"
}
stages {
stage('Clone') {
steps {
git 'git@gitlab.com:yourgroup/yourrepo.git'
}
}
stage('Build Docker Image') {
steps {
script {
docker.build("${IMAGE_NAME}")
}
}
}
stage('Push to Registry') {
steps {
script {
docker.withRegistry('https://registry.example.com', 'harbor-credentials') {
docker.image("${IMAGE_NAME}").push()
}
}
}
}
stage('Deploy to Kubernetes') {
steps {
sh '''
kubectl set image deployment/myapp myapp=${IMAGE_NAME} --namespace=default
'''
}
}
}
}
4 K8s 中部署 Helm 应用或 YAML 文件
- 示例 YAML(Deployment):
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: registry.example.com/myapp:latest
ports:
- containerPort: 8080
- 初始部署方式:
kubectl apply -f deployment.yaml
猜你喜欢
- 2025-05-11 idea整合dockerfile插件,打包镜像(docker环境可不安装)
- 2025-05-11 超详细!基于k8s+docker+jenkins的一站式 DevOps 环境搭建教程-下
- 2025-05-11 docker的镜像和仓库(docker镜像仓库地址)
- 2025-05-11 轻量容器如何改变开发世界?Docker 基本概念与架构详解
- 2025-05-11 微服务时代,运维必须了解的那些事(服务架构演变)
- 2025-05-11 目前还能用的Docker容器加速方案和可用镜像源
- 2025-05-11 替代虚拟机的容器Docker安装教程——(Windows版)
- 2025-05-11 k8s系列-06-containerd的基本操作
- 2025-05-11 K8s+Jenkins+Harbor+Gitlab+Pipeline+Rust 持续集成(三)
- 2025-05-11 揭秘!GitLab CI/CD 配置的秘诀(gitlab ci trigger)
你 发表评论:
欢迎- 05-14JAVA程序员自救之路——Elasticsearch向量搜索
- 05-14探秘Java程序的“内存大爆炸”:JVM内存溢出问题排查
- 05-14Java 探秘:如何找出数组中重复的数字
- 05-14线上问题解决:java内存溢出问题分析,定位及解决
- 05-14Java虚拟机内存管理深度解读
- 05-14Java程序内存泄漏问题优化全攻略
- 05-14Jprofile解析dump文件使用详解
- 05-14Java中常见的内存泄漏场景解析
- 366℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 352℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 343℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)