GitLab CI 构建过程中映射Kubernetes上的MySQL端口

GitLab CI 配置 Kubernetes MySQL 端口转发
本文介绍如何在GitLab CI流程中配置Kubernetes集群上的MySQL端口转发,以便在测试环境中执行接口测试脚本时能够访问数据库。通过设置GitLab项目变量、修改.gitlab-ci.yml文件并使用screen命令后台运行端口转发,确保测试过程顺利进行。

1. 前言

我所在团队一样,测试环境的MySQL在阿里云的Kubernetes集群上,但是又没有映射一个固定地址来让我们访问。
所以每次连接测试环境,需要本地用kubectl端口转发MySQL 3306到本地才能访问。

而我的接口测试脚本执行时需要去访问数据库,这样就必须要在GitLab执行过程中,在Runner中映射测试环境的MySQL端口

如果你所在的团队和我一样,那么这篇文章或许会给你一定的帮助

建议先看上一篇手动端口转发的文章
https://blog.youkuaiyun.com/tomoya_chen/article/details/107868913
*如果不会获取kube集群鉴权信息,或者对端口转发命令感兴趣,可以看这篇文章

阿里云官方说明文档
https://help.aliyun.com/document_detail/106968.html
*不需要从头配置新Runner的话直接从【设置全局变量】这一章开始看,本文也是参考此篇文章

2. Gitlab项目配置变量

你的gitlab项目 -> Settings -> Variables,添加kube_config 变量
变量值来自 【前言】中我上一篇文章中【2.2节】的配置内容,此处使用需要转编码为 base64

# 转码 shell 命令
echo $(cat ~/.kube/config | base64) | tr -d " "

在这里插入图片描述

3. 修改.gitlab-ci.yml文件

红框内的内容,与本文章有关
大致逻辑是配置kubectl需要的鉴权信息,后台映射端口,执行测试脚本,结束后杀死kubectl进程
*注意后台命令一定要使用screen,不能用nohup。nohup会导致gitlab-ci无法结束的问题

# 创建一个变量,指定kubeconfig文件地址
KUBECONFIG: ./kubeconfig

# 根据$KUBECONFIG地址,创建文件,并且重新编码
touch $KUBECONFIG | echo $kube_config | base64 -d > $KUBECONFIG

#使用screen命令,后台运行mysql端口转发命令
screen -dmS connect-mysql kubectl -n dev port-forward $(kubectl -n dev get pods | grep ^mysql | grep Running | awk 'NR==1{print $1}') 3306:3306

# 找出kubectl相关进程,并杀死进程
ps -ef | grep "kubectl" | grep -v grep | awk '{print $2}' | xargs kill -9

在这里插入图片描述

在使用 Docker Compose 构建 MySQL 容器时,为了实现端口映射和卷挂载功能,需要在 `docker-compose.yml` 文件中进行相应的配置。以下是一个完整的示例说明: ### 端口映射 通过 `ports` 字段可以将宿主机的端口映射到容器内部的端口MySQL 默认监听的端口是 3306,因此可以通过如下方式将宿主机的 3306 映射到容器的 3306: ```yaml ports: - "3306:3306" ``` 如果希望将宿主机的不同端口(如 3300)映射到容器的 3306,则可以修改为: ```yaml ports: - "3300:3306" ``` ### 卷挂载 通过 `volumes` 字段可以将宿主机的目录或文件挂载到容器中的指定路径。例如,为了持久化存储 MySQL 的数据,可以将宿主机的 `/data/mysql/data` 挂载到容器的 `/var/lib/mysql`;同时,也可以将自定义的 `my.cnf` 配置文件从宿主机的 `/data/mysql/conf/my.cnf` 挂载到容器的 `/etc/mysql/my.cnf`。 ```yaml volumes: - /data/mysql/data:/var/lib/mysql - /data/mysql/conf/my.cnf:/etc/mysql/my.cnf ``` ### 完整的 `docker-compose.yml` 示例 以下是一个完整的 `docker-compose.yml` 示例,用于部署 MySQL 容器,并配置端口映射、卷挂载以及环境变量设置: ```yaml version: '3.8' services: mysql: image: mysql:8.0.36 container_name: mysql restart: unless-stopped ports: - "3300:3306" environment: MYSQL_ROOT_PASSWORD: your_password_here volumes: - /data/mysql/data:/var/lib/mysql - /data/mysql/conf/my.cnf:/etc/mysql/my.cnf command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci ``` ### 注意事项 1. **数据持久化**:通过卷挂载 `/var/lib/mysql` 可以确保即使容器被删除,数据库的数据仍然保留在宿主机上。 2. **配置文件**:如果需要自定义 MySQL 的配置,可以在宿主机上准备一个 `my.cnf` 文件并挂载到容器中。 3. **字符集设置**:可以通过 `command` 字段指定默认的字符集,避免出现编码问题。 4. **密码设置**:通过 `MYSQL_ROOT_PASSWORD` 环境变量设置 root 用户的密码,确保安全性[^3]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值