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.服务器上安装helm包,解压安装包

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的命令空间

在这里插入图片描述

  1. 用helm部署GitLab Runner之前,先把chart的仓库添加到helm的仓库列表中:
helm repo add gitlab https://charts.gitlab.io

4.下载GitLab Runner的chart:

helm fetch gitlab/gitlab-runner
  1. 当前目录会多出一个文件gitlab-runner-0.20.0.tgz,解压:
tar -zxvf gitlab-runner-0.20.0.tgz
  1. 解压后是名为gitlab-runner的文件夹,内容如下图所示,接下来要修改里面的三个文件:
    在这里插入图片描述

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

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

  4. 第二处,找到已被注释掉的runnerRegistrationToken参数位置,添加runnerRegistrationToken的配置,其值就是前面在GitLab网页取得的registration token参数
    在这里插入图片描述

  5. 第三处找到rbac的配置,将create和clusterWideAccess的值都改成true(创建RBAC、创建容器gitlab-bastion用于管理job的容器):
    在这里插入图片描述

  6. 第四处,设置此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赋值:
原文件为:
在这里插入图片描述

改为:
在这里插入图片描述

  1. 接下来要修改的是templates/configmap.yaml文件,在这里面将宿主机的docker的sock映射给runner executor,这样job中的docker命令就会发到宿主机的docker daemon上,由宿主机来执行,打开templates/configmap.yaml,添加一段内容:
cat >>/home/gitlab-runner/.gitlab-runner/config.toml <<EOF
            [[runners.kubernetes.volumes.host_path]]
              name = "docker"
              mount_path = "/var/run/docker.sock"
              read_only = true
              host_path = "/var/run/docker.sock"
    EOF

在这里插入图片描述

  1. 修改完毕,回到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的基本命令。

猜你喜欢

转载自blog.csdn.net/qq_34237321/article/details/109160948