当前位置: 首页 > >

gitlab ci/cd+harbor+k8s实现一键部署(python项目)

发布时间:

原理图


1.安装gitlab

1.1.首先配置yum源


vim /etc/yum.repos.d/gitlab-ce.repo#增加下面内容
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key


1.2.更新本地yum缓存
执行命令:sudo yum makecache


1.3.安装gitlab社区版
执行命令:


yum install gitlab-ce-12.3.5#不带版本号,默*沧白钚掳姹尽


1.4.更改配置文件
1.4.1.更改访问地址


vim /etc/gitlab/gitlab.rb


1.4.2.更改邮箱配置


vim /etc/gitlab/gitlab.rb

直接写在文件最后。
这里用qq邮箱。需要自己去设置授权码


1.4.3.设置数据存储设置
vim /etc/gitlab/gitlab.rb
找到git_data_dirs


git_data_dirs({ "default" => { "path" => "/home/gitlab-data" } })


1.4.4.GitLab服务器IP地址设置


vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml


1.4.5 .登陆服务器 http://10.101.3.158/ #对应自己的服务器IP地址


服务器能响应说明没问题。至此gitlab ok


2.汉化gitlab(12.3.5自带汉化可不用替换,进入设置)

2.1.配置版本查看
1:查看gitlab 安装版本


cat /opt/gitlab/embedded/service/gitlab-rails/VERSION


2:下载对应的汉化包


wget https://gitlab.com/xhang/gitlab/-/archive/v12.3.5-zh/gitlab-v12.3.5-zh.tar.gz

3:解压文件,停止gitlab服务


tar -zxf gitlab-v12.3.5-zh.tar.gz
gitlab-ctl stop

4:备份原文件


cp -fr /opt/gitlab/embedded/service/gitlab-rails{,gao-`date +%Y%m%d`}

5:cp汉化包
这条命令需要不停的手动执行Y(有重名文件)执行之前先做个小优化


Vim ~/.bashrc


在执行下面的命令 前面的不要弄丢了。(cp 则直接调用cp的原始命令)


cp -rf ./gitlab-v12.3.5-zh/* /opt/gitlab/embedded/service/gitlab-rails/

执行完毕后出现下面错误可直接忽略


cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/log’ with directory ‘./log’
cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/tmp’ with directory ‘./tmp’

2.2.重新加载配置登陆访问页面,服务器上要关闭防火墙


systemctl stop firewalld

gitlab-ctl stop
gitlab-ctl restart
gitlab-ctl reconfigure

默认用户名密码root 5iveL!fe 普通账号自行注册


3.安装gitlab-runner

3.1.Gitlab注册(shell)
3.1内容可以忽略注重看3.4
gitlab-runner register


服务器执行命令


登陆页面也可以查看新增一条runner


点击刚才的runner 启用项目会新增一条指派的项目


3.2.安装docker
本次演示环境,安装服务器地址与gitlab不在同一个服务器
3.3.安装k8s集群
本次演示环境,安装服务器地址与gitlab不在同一个服务器
3.4.部署helm+k8s+gitlab-runner
3.4.1.服务器*沧癶elm包,解压安装包


tar -zxvf helm-v2.16.10-linux-amd64.tar.gz

3.4.2.把解压后的文件夹内的helm文件放入/usr/local/bin/:


mv linux-amd64/helm /usr/local/bin/

3.4.3.验证命令


helm version


3.4.4.部署gitlab-runner
3.4.4.1.这里我创建的是:specific 各个类型的区别自行研究


3.4.4.2.选择一个已经上传的项目,浏览器访问GitLab,
打开用来做CI的代码仓库,点击设置 -> CI/CD -> Runner ->展开记住途中url 和token的值


3.5.创建名为gitlab-runners的namespace:
1:执行命令:


kubectl create namespace gitlab-runners

2:K8s服务器上显示gitlab-runners的命令空间



    用helm部署GitLab Runner之前,先把chart的仓库添加到helm的仓库列表中:

helm repo add gitlab https://charts.gitlab.io

4.下载GitLab Runner的chart:


helm fetch gitlab/gitlab-runner

    当前目录会多出一个文件gitlab-runner-0.20.0.tgz,解压:

tar -zxvf gitlab-runner-0.20.0.tgz

    解压后是名为gitlab-runner的文件夹,内容如下图所示,接下来要修改里面的三个文件:

    打开values.yaml,修改配置参数:

    第一处,找到已被注释掉的gitlabUrl参数位置,添加gitlabUrl的配置,其值就是前面在GitLab网页取得的gitlab url参数,如下图红框:

    第二处,找到已被注释掉的runnerRegistrationToken参数位置,添加runnerRegistrationToken的配置,其值就是前面在GitLab网页取得的registration token参数

    第三处找到rbac的配置,将create和clusterWideAccess的值都改成true(创建RBAC、创建容器gitlab-bastion用于管理job的容器):

    第四处,设置此GitLab Runner的tag为k8s,在pipeline脚本中可以通过指定tag为k8s,这样pipeline就会在这个Gitlab Runner上允许:


12.第五处,找到cache的配置,在修改之前,cache的配置如下图,可见值为空内容的大括号,其余信息全部被注释了:


将其修改为:


13.步骤12中的s3CacheInsecure参数等于false表示对minio的请求为http(如果是true就是https),但实际证明,当前版本的chart中该配置是无效的,等到运行时还是会以https协议访问,解决此问题的方法是修改templates目录下的_cache.tpl文件,打开此文件,删除原先的if判断和对应的end这两行,直接给CACHE_S3_INSECURE赋值:
原文件为:


改为:


    接下来要修改的是templates/configmap.yaml文件,在这里面将宿主机的docker的sock映射给runner executor,这样job中的docker命令就会发到宿主机的docker daemon上,由宿主机来执行,打开templates/configmap.yaml,添加一段内容:

cat >>/home/gitlab-runner/.gitlab-runner/config.toml < [[runners.kubernetes.volumes.host_path]]
name = "docker"
mount_path = "/var/run/docker.sock"
read_only = true
host_path = "/var/run/docker.sock"
EOF


    修改完毕,回到values.yam所在目录,执行以下命令即可创建GitLab Runner:

helm install
--name-template gitlab-runner
-f values.yaml .
--namespace gitlab-runners

16.回到GitLab的runner页面,可见gitlab页面新增一个runner,k8s界面也新增一个资源
K8s界面



Gitlab界面:


4:实现CI和CD

4.1 安装harbor
1:执行以下脚本,创建必要目录并且下载和解压harbor安装包


mkdir ~/harbor-1.10.3
&& mkdir ~/harbor-1.10.3/log
&& mkdir ~/harbor-1.10.3/data
&& mkdir ~/harbor-1.10.3/data/secret
&& cd ~/harbor-1.10.3
&& wget https://github.com/goharbor/harbor/releases/download/v1.10.3/harbor-online-installer-v1.10.3.tgz
&& tar -zxvf harbor-online-installer-v1.10.3.tgz
&& mkdir -p ~/harbor-1.10.3/harbor/common/config

2:打开文件~/harbor-1.10.3/harbor/harbor.yml,有以下几处需要修改;
修改hostname,如果有域名就用域名,否则改成IP地址:


如果不打算使用https,就要注释所有https的配置:


修改存储数据的位置


修改日志存储路径


执行准备命令


cd ~/harbor-1.10.3/harbor
&& sudo ./prepare

开始安装


cd ~/harbor-1.10.3/harbor
&& sudo ./install.sh

浏览器登录harbor http://10.101.3.158:5888/ 用户名admin Harbor12345


4.2 配置yml文件和dockerfile文件
以python项目为例:实现每秒打印时间


Yml文件内容:具体语法规则,自行查阅资料


简要概述逻辑
2个流程bulid和deploy_prod。顺序执行
Bulid实现镜像上传harbor


docker login 10.101.30.101 -u admin -p Hbbw654123
docker build -t 10.101.30.101/spider_test/time:$CI_COMMIT_SHORT_SHA .
echo "=============== 推送到镜像仓库 ==============="
docker push 10.101.30.101/spider_test/time:$CI_COMMIT_SHORT_SHA
deploy_prod 实现更新镜像
kubectl set image deployment testtime time=10.101.30.101/spider_test/time:$TAG -n spider-test

Dockerfile文件,具体语法规则查阅资料


运行完毕后
登陆harbor可查看到新增镜像文件


登陆k8s可查看到资源运行情况


进入testtime 点击追踪日志。可以查看到打印日志程序执行的结果



后记:
Yml 和dockerfile ,需要自己理解其语法规则,以及要熟悉k8s的基本命令。



友情链接: