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

1. 前言

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

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

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

建议先看上一篇手动端口转发的文章
https://blog.csdn.net/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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Dockerfile,用于在CentOS 9镜像构建MySQL 8.0: ``` FROM centos:9 # 安装MySQL 8.0 RUN yum install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm && \ yum install -y mysql-community-server && \ yum clean all # 配置MySQL RUN mkdir /docker-entrypoint-initdb.d COPY my.cnf /etc/ COPY init.sql /docker-entrypoint-initdb.d/ # 暴露3306端口 EXPOSE 3306 # 启动MySQL CMD ["mysqld"] ``` 这个Dockerfile包含以下步骤: 1. 基于CentOS 9构建镜像。 2. 安装MySQL 8.0。 3. 配置MySQL,包括复制my.cnf文件和将init.sql文件复制到/docker-entrypoint-initdb.d目录。 4. 暴露MySQL默认端口3306。 5. 启动MySQL。 你需要在与Dockerfile相同的目录创建一个my.cnf文件和一个init.sql文件,这些文件将用于配置MySQL和初始化数据库。以下是my.cnf文件的示例内容: ``` [mysqld] default-authentication-plugin=mysql_native_password character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` 以下是init.sql文件的示例内容: ``` CREATE DATABASE mydb; USE mydb; CREATE TABLE users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50)); INSERT INTO users (name) VALUES ('Alice'), ('Bob'), ('Charlie'); ``` 构建镜像命令: ``` docker build -t mysql8.0:centos9 . ``` 运行容器命令: ``` docker run --name mysql8.0 -p 3306:3306 -d mysql8.0:centos9 ``` 这将创建一个名为“mysql8.0”的容器,并将其映射到本地机器的3306端口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值