原理图
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
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.重新加载配置登陆访问页面
gitlab-ctl stop
gitlab-ctl restart
gitlab-ctl reconfigure
默认用户名密码root 5iveL!fe 普通账号自行注册
3.安装gitlab-runner
3.1.Gitlab注册(shell)
3.1内容可以忽略注重看3.2
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的命令空间
- 用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 <<EOF
[[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的基本命令。