您现在的位置是:首页 >技术交流 >基于gitlab搭建Drone CI网站首页技术交流

基于gitlab搭建Drone CI

兴乐安宁 2024-06-14 17:18:30
简介基于gitlab搭建Drone CI

drone简介:

drone官方文档:https://docs.drone.io/
drone跟Jenkins一样,可实现持续集成,就是可以帮助我们解决重复的代码构建,自动化测试,发布等重复劳动,通过简单一个提交代码的动作,解决接下来要做的很多事。

Drone是一种基于容器技术的连续运输系统,所以安装也是基于docker安装。

相对于Jenkins,Jenkins虽然有100多种插件可实现复杂的功能,所以操作部署也是同样的复杂。
而drone,短小精悍,部署简单,比 Jenkins 语法简单,更加适合 云原生应用。

一、gitlab设置

gitlab搭建参考:Gitlab教程

在Applications选项填写Name 和 Redirect URI,Name取个好记得即可。
Redirect URI 为搭建drone的地址,后面需要以login结尾。

在这里插入图片描述
scopes根据自己选择,最后Save applications即可
在这里插入图片描述
保存后,记下相关信息,安装drone会用到。
在这里插入图片描述
设置Network,后续drone激活项目会使用到
在这里插入图片描述

二:docker安装drone Server和Runner

drone有个Server和Runner(Agent)的概念,我们先来理解下:

Server:为Drone的管理提供了Web页面,用于管理从Git上获取的仓库中的流水线任务。
Runner(Agent):一个单独的守护进程,会轮询Server,获取需要执行的流水线任务,之后执行。
drone-runner不是必选的,官方不推荐吧runner和server安装在一个实例上

先生产共享密钥,用于连接Server和Runner之间,两者需一致。

1.运行drone Server

(172.16.11.2这台服务器)

openssl rand -hex 16

在这里插入图片描述
拉取镜像

docker pull drone/drone

docker运行drone Server

docker run 
  --volume=/var/lib/drone:/data 
  --env=DRONE_AGENTS_ENABLED=true   
  --env=DRONE_GITLAB_SERVER=http://172.16.11.1:82  
  --env=DRONE_GITLAB_CLIENT_ID=3810dcd600b97a6e329b15ff1d4d1d57745672c510e5ded042d4649355819c96 
  --env=DRONE_GITLAB_CLIENT_SECRET=4aced0924a86a0a9a2dc0da0e9cb63a7a3feb51a2de7b2a078ab1fa28e2a59e1 
  --env=DRONE_SERVER_HOST=172.16.11.2 
  --env=DRONE_SERVER_PROTO=http 
  --env=DRONE_TLS_AUTOCERT=false 
  --env=DRONE_LOGS_DEBUG=true 
  --env=DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22 
  --env=DRONE_USER_CREATE=username:root,admin:true 
  --publish=80:80 --publish=443:443 
  --restart=always 
  --detach=true 
  --name=drone 
  -e TZ="Asia/Shanghai" 
  drone/drone

解释:
http://172.16.11.1:82这个是我的gitlab服务,因为我的端口是配置了82
172.16.11.2 是drone本机

浏览器访问172.16.11.2,点击继续Continue,自动跳转gitlab,授权即可进入drone。
在这里插入图片描述
在这里插入图片描述
进入可看到gitlab所有项目,选择一个项目,点击进入activate 激活进入项目即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.运行drone Runner(Agent)

拉取镜像,根据自己项目需要选择合适的runner。如有docker,k8s,exec,ssh等。
这里,我需要远程ssh部署,就选择ssh的runner,如果runner不合适,在构建时,会一直pending状态。

如果是docker项目,则拉取docker的镜像

docker pull drone/drone-runner-ssh
docker pull drone/drone-runner-docker

drone 已经正常,接下来需要Runner执行工作了。

docker run -d 
-v /var/run/docker.sock:/var/run/docker.sock 
-e DRONE_RPC_PROTO=http 
-e DRONE_RPC_HOST=172.16.11.2 
-e DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22 
-e DRONE_RUNNER_CAPACITY=2 
-e DRONE_RUNNER_NAME=${HOSTNAME} 
-p 3000:3000 
--restart always 
--name runner 
drone/drone-runner-ssh

在这里插入图片描述
运行成功后,查看日志,docker logs ffd3ef3090fc可查看是否连接成功。
在这里插入图片描述
在这里插入图片描述
successfully pinged the remote serve连接成功。

到这里drone安装完成。

三、用docker-compose安装drone(拓展)

既然可以用docker安装drone,那可以用docker-compose编排,更简单,不用每次run 很多命令参数,参数直接写在环境.env文件即可,有任何改动,只需要更改.env参数即可。

1.创建docker-compose工作目录及docker-compose文件

创建目录/docker_drone

mkdir /docker_drone
cd /docker_drone
vim docker-compose.yml

内容如下:

version: "3.3"
 
services:
  drone-server:
    image: drone/drone:latest
    container_name: drone-server
    networks: 
      - drone_net        # 让drone-server和drone-agent处于一个网络中,方便进行RPC通信
    ports:
      - '80:80'      # Web管理面板的入口 PROTO=http  时使用该端口
      - '443:443'     # Web管理面板的入口 PROTO=https 时使用该端口
      - '9000:9000'    # RPC服务端口
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock   # docker.sock [1]
      - /var/data/drone/:/var/lib/drone             # drone数据存放路径
    environment:
      - DRONE_AGENTS_ENABLED=true                   # 使用Runner
      - DRONE_GITLAB_SERVER=${DRONE_GITLAB_SERVER}                     # gitlab的地址
      - DRONE_GITLAB_CLIENT_ID=${DRONE_GITLAB_CLIENT_ID}          # gitlab获得的ClientID
      - DRONE_GITLAB_CLIENT_SECRET=${DRONE_GITLAB_CLIENT_SECRET}  # gitlab获得的ClientSecret
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}                      # RPC秘钥    [2]
      - DRONE_SERVER_HOST=${DRONE_SERVER_HOST}                    # RPC域名(在一个实例上可以不用)
      - DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO}                  # git webhook使用的协议(建议http)
      - DRONE_OPEN=true                                           # 开发drone
      - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite     # 数据库文件
      - DRONE_DATABASE_DRIVER=sqlite3                             # 数据库驱动,我这里选的sqlite
      - DRONE_DEBUG=true                                          # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_DEBUG=true                                     # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_TRACE=true                                     # 调试相关,部署的时候建议先打开
      - DRONE_USER_CREATE=username:root,admin:true          # 初始管理员用户
      - TZ=Asia/Shanghai                                          # 时区
    restart: always
  drone-runner:
    image: drone/drone-runner-ssh:latest
    container_name: drone-runner
    networks: 
      - drone_net     # 让drone-server和drone-agent处于一个网络中,方便进行RPC通信
    depends_on:
      - drone-server 
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # docker.sock [1]
    environment:
      - DRONE_RPC_HOST=${DRONE_RPC_HOST}  # RPC服务地址
      - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}  # RPC秘钥
      - DRONE_RPC_PROTO=${DRONE_RPC_PROTO}    # RPC协议(http || https)
      - DRONE_RUNNER_CAPACITY=2               # 最大并发执行的 pipeline 数
      - DRONE_DEBUG=true                      # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_DEBUG=true                 # 调试相关,部署的时候建议先打开
      - DRONE_LOGS_TRACE=true                 # 调试相关,部署的时候建议先打开
      - TZ=Asia/Shanghai
    restart: always
networks:
      drone_net:                  
      # 注意空格格式,否则报错,让drone-server和drone-agent处于一个网络中,方便进行RPC通信

2.编辑.env环境

cd /docker_drone
vim .env

根据自己实际的参数修改
内容如下:

DRONE_GITLAB_SERVER=http://172.16.11.1
DRONE_GITLAB_CLIENT_ID=3810dcd600b97a6e329b15ff1d4d1d57745672c510e5ded042d4649355819c96
DRONE_GITLAB_CLIENT_SECRET=4aced0924a86a0a9a2dc0da0e9cb63a7a3feb51a2de7b2a078ab1fa28e2a59e1
DRONE_RPC_SECRET=c99981a5bf29c1c9b2a4c94e894fad22
DRONE_SERVER_HOST=172.16.11.2
DRONE_SERVER_PROTO=http
DRONE_RPC_HOST=172.16.11.2
DRONE_RPC_PROTO=http

在这里插入图片描述

3.启动测试

docker-compose up -d

在这里插入图片描述
到这里drone创建完成。

搭建完成,开始下一步,使用Drone自动构建项目

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。