Linux基于gitlab搭建Drone CI自动集成,图文详细教程

drone简介:

drone官方文档:https://docs.drone.io/

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

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

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

一:gitlab设置

gitlab搭建参考:Linux安装gitlab、docker安装gitlab教程

在Applications选项填写Name 和 Redirect URI,Name取个好记得即可。
Redirect URI 为搭建drone的地址,后面需要以login结尾。
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第1张图片
scopes根据自己选择,最后Save applications即可
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第2张图片
保存后,记下相关信息,安装drone会用到。
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第3张图片

二:docker安装drone Server和Runner

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

Server:为Drone的管理提供了Web页面,用于管理从Git上获取的仓库中的流水线任务。
Runner(Agent):一个单独的守护进程,会轮询Server,获取需要执行的流水线任务,之后执行。

drone-runner不是必选的,官方不推荐吧runner和server安装在一个实例上

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

1:运行drone Server

$ openssl rand -hex 16
1d8ae98e6fd61c91b2e7dad6775ca771

拉取镜像,docker运行drone Server

#拉取镜像
docker pull drone/drone
#运行
docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_AGENTS_ENABLED=true   \
  --env=DRONE_GITLAB_SERVER=http://192.168.152.131  \
  --env=DRONE_GITLAB_CLIENT_ID=6873788c9b46a5c4faf49a2ea1ebaf9c8683d43371c4ec7bca8a2b1429d35165 \
  --env=DRONE_GITLAB_CLIENT_SECRET=b0fb674c1c00a48eea472281ad4c99609ea29fe66a3684e7ca5341385ab3f89f \
  --env=DRONE_SERVER_HOST=192.168.152.132 \
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_TLS_AUTOCERT=false \
  --env=DRONE_LOGS_DEBUG=true \
  --env=DRONE_RPC_SECRET=1d8ae98e6fd61c91b2e7dad6775ca771 \
  --env=DRONE_USER_CREATE=username:root,admin:true \
  --publish=80:80 --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone

可选选项(时区):-e TZ="Asia/Shanghai" \

注意选项(没有创建管理员选项,功能会少):
--env=DRONE_USER_CREATE=username:root,admin:true \

用户名需和gitlab登录用户一致,才会有Project Setting选项,我gitlab和drone都是root可见:
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第4张图片

浏览器访问192.168.152.132,点击继续Continue,自动跳转gitlab,授权即可进入drone。
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第5张图片

Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第6张图片
进入可看到gitlab所有项目,选择一个项目,进入点击activate 激活进入项目即可。
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第7张图片
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第8张图片
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第9张图片
注:如果项目无法激活,需要在admin设置里面,设置Network选择,如下:
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第10张图片

回到gitlab,在项目设置里面的钩子里,也自动生成了一个钩子。
Linux基于gitlab搭建Drone CI自动集成,图文详细教程_第11张图片

2:运行drone Runner(Agent)

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

docker pull drone/drone-runner-ssh
#如果时docker项目,则拉取docker的镜像
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=192.168.152.132 \
-e DRONE_RPC_SECRET=1d8ae98e6fd61c91b2e7dad6775ca771 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-ssh

运行成功后,查看日志,docker logs runner可查看是否连接成功。

$ docker logs runner 
time="2021-11-02T07:41:19Z" level=info msg="starting the server" addr=":3000"
time="2021-11-02T07:41:19Z" level=info msg="successfully pinged the remote server"
time="2021-11-02T07:41:19Z" level=info msg="polling the remote server" arch=amd64 capacity=2 endpoint="http://192.168.152.132" kind=pipeline os=linux type=docker

successfully pinged the remote serve连接成功。
到这里drone安装完成。

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

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

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

创建目录/docker_drone

#创建目录
sudo mkdir /docker_drone
#进入目录
cd /docker_drone
#编辑创建docker-compose.yml文件
vim docker-compose.yml

内容如下:

version: "3.7"
 
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环境

sudo vim .env

内容如下:

DRONE_GITLAB_SERVER=http://192.168.152.131
DRONE_GITLAB_CLIENT_ID=6873788c9b46a5c4faf49a2ea1ebaf9c8683d43371c4ec7bca8a2b1429d35165
DRONE_GITLAB_CLIENT_SECRET=b0fb674c1c00a48eea472281ad4c99609ea29fe66a3684e7ca5341385ab3f89f
DRONE_RPC_SECRET=1d8ae98e6fd61c91b2e7dad6775ca771
DRONE_SERVER_HOST=192.168.152.132
DRONE_SERVER_PROTO=http
DRONE_RPC_HOST=192.168.152.132
DRONE_RPC_PROTO=http

3:启动测试

docker-compose up -d

如果没有启动,用docker-compose up 不加参数-d,实时打印日志查看错误。

docker-compose up

到这里drone创建完成。

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

你可能感兴趣的:(运维笔记,docker,gitlab,linux,运维,ci)