GitLab CI + Jenkins 双流水线模式Jenkins 端配置

Jenkins 一个核心结构

Jenkins 里所有配置,都在某个项目(Job)里面 实际使用中一般会建一个专门的 Job,比如叫: deploy-service-xxx(发布任务) 下面所有操作,全部在这个 Job 里配置


1. Jenkins 选择环境:参数化构建(下拉框)

在哪里配置?

进入 Job → 左侧【配置 】→ 往下拉找到 This project is parameterized(参数化构建过程) 勾选开启

点【添加参数 】→ 选择 Choice Parameter(选项参数) 配置:

  • 参数名:ENV
  • 选项:

plaintext

复制代码
dev
test
pre
prod
  • 描述:选择发布环境

效果

手动点【Build with Parameters(使用参数构建) 】 就会弹出下拉框,选 dev/test/pre/prod,就是你们说的确认发布环境


2. Jenkins 部署:执行 kubectl 操作 K8s

在哪里配置?

还是同一个 Job → 【配置】→ 往下找到 构建(Build) → 【增加构建步骤】→ 选择 执行 shell

在 shell 框里写脚本:

bash

运行

复制代码
# 获取前面选择的环境
ENV=$ENV
# 部署到对应k8s命名空间
kubectl set image deployment/demo demo=镜像地址:$IMAGE_TAG -n $ENV
# 等待Pod启动
kubectl rollout status deployment/demo -n $ENV

前置条件

Jenkins 服务器上:

  1. 安装 kubectl
  2. 配置好 k8s 集群的 kubeconfig 这样 Jenkins 才能调用 K8s。

kubectl 是 K8s 客户端工具,不需要部署在 K8s 集群节点上,只要安装 kubectl、配置 kubeconfig 文件,网络可访问 K8s apiserver,就可以远程操作集群。


3. 触发接口自动化:部署成功后自动跑测试脚本

在哪里配置?

和上面 kubectl 部署脚本在同一个【执行 shell】步骤里,顺序靠后 也就是: 构建步骤顺序:

  1. 第一步:kubectl 部署
  2. 第二步:自动跑对应环境接口自动化

shell 完整示例:

bash

运行

复制代码
# 1.部署
kubectl set image deployment/demo demo=镜像地址:$IMAGE_TAG -n $ENV
kubectl rollout status deployment/demo -n $ENV

# 2.部署成功后,自动跑对应环境接口自动化
if [ "$ENV" = "dev" ];then
  pytest api_test.py --env dev
elif [ "$ENV" = "test" ];then
  pytest api_test.py --env test
elif [ "$ENV" = "pre" ];then
  pytest api_test.py --env pre
elif [ "$ENV" = "prod" ];then
  pytest api_test.py --env prod
fi

失败阻断发布

测试失败脚本最后加:

bash

运行

复制代码
exit 1

Jenkins 直接标红,流程终止。


4. 镜像构建完成后,GitLab CI 怎么通知 Jenkins?

在 Jenkins Job 配置里开启: 【触发器 】→ 勾选 Trigger builds remotely(远程触发) 生成一个 token。

然后 GitLab CI 用 curl 调用这个地址:

plaintext

复制代码
http://jenkins地址/job/xxx/buildWithParameters?token=xxx&IMAGE_TAG=$tag
相关推荐
NexTunnel1 天前
公司老项目还在 SVN,远程维护怎么做更稳?
git·svn·gitlab·远程工作·nextunnel
Hy行者勇哥1 天前
用Cursor智能编写Ansible/Terraform脚本,打通CI/CD链路
ci/cd·ansible·terraform
想你依然心痛2 天前
AtomCode 在 DevOps 场景中的实战:CI/CD 流水线脚本自动生成
运维·ci/cd·docker·devops·自动化部署·github actions
IT二叔2 天前
Java项目部署-03-teamcity-cicd-docker镜像流水线方式部署
java·ci/cd·持续部署
想你依然心痛3 天前
持续集成在嵌入式开发中的实践:GitLab CI与交叉编译——自动化构建、固件生成
ci/cd·自动化·gitlab
Sean‘4 天前
GitLab 升级后 502:Puma 反复重启问题处理记录
docker·gateway·gitlab
NexTunnel4 天前
告别传统组网,也能安全访问公司 GitLab / SVN
安全·svn·gitlab
longze_74 天前
Github仓库一直拉取不了
github·jenkins
江畔柳前堤4 天前
第14章:Docker 与 CI/CD
运维·ci/cd·docker·容器·eureka·github
Bigger9 天前
从零搭建 AI 代码审查服务:一份前端也能看懂的 Python 学习笔记
前端·ci/cd·ai编程