gitlab+drone+harbor之CI自动化流程
Posted Sicc1107
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gitlab+drone+harbor之CI自动化流程相关的知识,希望对你有一定的参考价值。
流程结构
提交代码至gitlab仓库,drone自动同步gitlab项目,使用gitlab中的.drone.yaml文件执行,使用gitlab中的dockerfile构建镜像,推送至仓库。
服务器
服务器电脑vmware安装的虚拟主机
cpu:2核
内存:4G
IP:192.168.137.128
域名:raisehands.cn
域名用的是阿里云个人免费域名 解析到内网的虚拟机192.168.137.128
[root@localhost ~]# uname -r
3.10.0-1160.el7.x86_64
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
初始设置
#临时不重启关闭selinux 重启失效
setenforce 0
#关闭防火墙
systemctl stop firewalld
docker 安装配置
- 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置stable镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
或
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 从高到低列出ce 稳定版本
yum list docker-ce.x86_64 --showduplicates | sort -r
- 安装
#安装指定版本
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# 例如:
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
#安装最新版本
yum -y install docker-ce
- 启动
systemctl start docker
systemctl enable docker
- 配置docker优化
tee /etc/docker/daemon.json << EOF
{
"oom-score-adjust": -1000, #设置守护程序的oom_score_adj(默认值为-500)
"log-driver": "json-file", #容器日志的默认驱动程序(默认为“ json-file”)
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"max-concurrent-downloads": 10, #设置每个请求的最大并发下载量(默认为3)
"max-concurrent-uploads": 10, #设置每次推送的最大同时上传数(默认为5)
"registry-mirrors": ["https://5biptv7a.mirror.aliyuncs.com"], #镜像加速地址
"insecure-registries" : ["0.0.0.0/0"], #任意仓库能访问
"storage-driver": "overlay2", #要使用的存储驱动程序
"storage-opts": [
"overlay2.override_kernel_check=true" #存储驱动程序选项
]
}
EOF
gitlab 安装配置
- 安装 防止端口冲突使用 8443 8080 端口
docker pull gitlab/gitlab-ce #下载gitlab 稳定版本
#运行 将配置文件,数据日志等外挂方便查看修改 --hostname 宿主机IP
docker run -itd \\
--hostname 192.168.137.128 \\
-p 8443:443 \\
-p 8080:80 \\
-p 1022:22 \\
-v /heme/gitlab/config:/etc/gitlab \\
-v /heme/gitlab/logs:/var/log/gitlab \\
-v /heme/gitlab/data:/var/opt/gitlab \\
-e TZ=Asia/Shanghai \\
--name gitlab \\
--restart always \\
--privileged=true \\
gitlab/gitlab-ce
docker exec -it gitlab bash
vi /etc/gitlab/gitlab.rb
external_url = 'http://192.168.137.128:8080'
gitlab_rails['gitlab_ssh_host'] = '192.168.137.128'
gitlab_rails['gitlab_shell_ssh_port'] = 1022
vi /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
production: &base
#
# 1. GitLab app settings
# ==========================
## GitLab settings
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.137.128
port: 8080
https: false
ssh_host: 192.168.137.128
ssh_port: 1022
gitlab-ctl reconfigure #让修改后的配置生效
gitlab-ctl restart #重启gitlab
exit #推出容器
- 访问测试
http://raisehands.cn:8080/ root/qwer1234
第一次设置root登录密码密码至少8位数,出现如下界面就基本上部署成功了,并且登陆
设置密码
登陆界面
创建用户
给用户设置密码
部署Harbor
- 安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose #下载二进制文件 如果需要安装其他版本的话,请修改上面命令中的版本号。
chmod +x /usr/local/bin/docker-compose #给予执行权限
docker-compose --version #查看版本
- harbor安装方式
安装分为在线安装和离线安装两种方式,我这里选择的是在线安装。
wget -P /home/harbor/ https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-online-installer-v1.2.0.tgz
cd /home/harbor/
tar zxf harbor-online-installer-v1.2.0.tgz
#修改配置文件
vim /home/harbor/harbor/harbor.cfg
hostname = raisehands.cn #harbor域名或IP
ui_url_protocol = http #默认使用的protocol
db_password = root123 #harbor数据库ROOT用户链接的密码
max_job_workers = 3
self_registration = off #不允许注册用户
customize_crt = on
project_creation_restriction = adminonly #设置只有管理员可以创建项目
harbor_admin_password = Harbor12345 #admin用户登录密码Harbor12345
#执行安装脚本
/home/harbor/harbor/install.sh
#Harbor 的日常运维管理是通过docker-compose来完成的,Harbor本身有多个服务进程,都放在docker容器之中运行,我们可以通过docker-compose ps命令查看
#启动Harbor
docker-compose start
#停止Harbor
docker-comose stop
#重启Harbor
docker-compose restart
- 访问测试
使用你的域名或者IP直接访问Harbor,Harbor默认使用的是80端口 admin/Harbor12345
部署Drone
1 配置gitlba获取
DRONE_GITLAB_CLIENT_ID
DRONE_GITLAB_CLIENT_SECRET
登录gitlab并配置gitlab外部认证 Url为drone访问地址:http://raisehands.cn:8081/login,按自身部署drone环境修改Url。
- drone安装
DRONE_GITLAB_SERVER gitlab地址
DRONE_GITLAB_CLIENT_ID 上面生成的ID
DRONE_GITLAB_CLIENT_SECRET 上面生成的SECRET
DRONE_SERVER_HOST 需要和 gitlab中配置的 drone的Url访问地址一致:http://raisehands.cn:8081/login
docker run -itd \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-v /home/drone:/data \\
-e DRONE_LOGS_DEBUG=true \\
-e DRONE_GIT_ALWAYS_AUTH=false \\
-e DRONE_GITLAB_SERVER=http://raisehands.cn:8080 \\
-e DRONE_GITLAB_CLIENT_ID=da0ff940fb1e9e250e3b9243ac354f38a997c1e483811cf36a828bacb12b2fd9 \\
-e DRONE_GITLAB_CLIENT_SECRET=2924584c59cbcd72c8afbccc5e9e229cc9f08c7208502287f35e82bba7706d21 \\
-e DRONE_RPC_SECRET=12345678 \\
-e DRONE_RUNNER_CAPACITY=3 \\
-e DRONE_SERVER_HOST=raisehands.cn:8081 \\
-e DRONE_SERVER_PROTO=http \\
-e DRONE_TLS_AUTOCERT=false \\
-p 8081:80 \\
-p 9443:443 \\
--restart=always \\
--detach=true \\
--name=drone_server \\
drone/drone:1
启动 runner
docker run -d \\
-v /var/run/docker.sock:/var/run/docker.sock \\
-e DRONE_RPC_PROTO=http \\
-e DRONE_RPC_HOST=raisehands.cn:8081 \\
-e DRONE_RPC_SECRET=12345678 \\
-e DRONE_RUNNER_CAPACITY=2 \\
-e DRONE_RUNNER_NAME=${HOSTNAME} \\
-p 3000:3000 \\
--restart always \\
--name runner \\
drone/drone-runner-docker:1
- 访问测试
http://raisehands.cn:8081/ 此时已经把gitlab默认的项目推送过来了
搭建CI
- 在gitlab中新增的项目redis,同步至drone
- 在gitlab 项目中 创建.drone.yml文件,此文件作用是按文件内容将任务传送至drone应用,进行CI动作。
kind: pipeline
type: kubernetes
name: default
steps:
- name: redis
image: raisehands.cn/redis
settings:
repo: raisehands.cn/commom-reids/redis #项目仓库地址/镜像名
tags: v1 #标签名 dron会自动调用dockerfile 生产镜像并且推送
contest: ./ #dockerfile文件所在目录 表示当前目录下
cache: false
username:
from_secret: docker_username #harbor登陆账号
password:
from_secret: docker_password #harbor登陆密码
- 在gitlab 项目中 创建dockerfile 文件 会被.drone.yml调用
FROM redis:latest
COPY redis.conf /home/redis.conf
- 在gitlab 项目中 创建redis.conf 文件 会被dockerfile调用
- 回到drone 页面 配置 harbor账号密码,为key value类型
-
可以看到已经正在构建,拉镜像,点击进去可以 看到具体日志
修改gitlab中redis代码,可以再次出发build,下面我就不截图了 内存完全不够,一直报错内存溢出
所有容器截图
总结:买不起服务器,实属无奈使用vmware创建的2核4G
1.千万不要像我一样 只用一台2核4G,内存完全不够,至少用2核8G测试
2.所有服务在一台服务器上,端口冲突,且gitlab不好休要 要进容器去改,重启不然 配置会失效,被初始化
3.gitlab还有个坑 Gitlab 10.6 版本以后为了安全,不允许向本地网络发送Webhook请求。
导致我全部部署在同一台服务器上 drone 无法拉去 gitlab文件
解决方法:
Admin area->settings->Network->OutBound Request,点击Expand
勾选上Allow requests to the local network from hooks and services ,其他勾全部去掉,保存
4 如果harbor是http,一定要修改 docker配置文件加上 “insecure-registries” : [“0.0.0.0/0”], 不然默认https 你就传不了
5全是docker部署的,记得出问题报错 用docker logs --tail=100 -f 容器名 看报错哦
加油sicc 20210517
以上是关于gitlab+drone+harbor之CI自动化流程的主要内容,如果未能解决你的问题,请参考以下文章
使用GitLab+Drone CI持续集成自动部署web项目,图文详细
基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作
Jenkins + Gitlab + harbor + Kubernetes实现CI/CD
Jenkins + Gitlab + harbor + Kubernetes实现CI/CD