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