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

"graph":"/data/docker",	
"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: banzaicloud/drone-kaniko
  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

Docker+Harbor+Jenkins+Gitlab自动化CICD构建

CICD实现方法之二--Gitlab+Jenkins+K8S