Gogs+Drone搭建CI/CD平台过程

Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署。本文介绍如何通过 Docker 搭建 Gogs+Drone 环境。

环境

linux
Docker && docker-compose

部署

  1. 创建目录(不是必须的,可以放在任何目录里面)
mkdir drone
cd drone
mkdir gogs drone # 存放相关数据
  1. 编写 docker-compose.yaml
version: "2"
services:
  gogs:
    container_name: gogs
    image: gogs/gogs:0.11.86
    ports:
      - 3000:3000
      #- 22:22
    volumes:
      - ./gogs/data:/data
    environment:
      - TZ=Asia/Shanghai
    restart: always

  drone-server:
    image: drone/drone:1.2.1
    container_name: drone-server
    ports:
      - 8000:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./drone/:/var/lib/drone
    environment:
      - DRONE_DEBUG=true
      - DRONE_OPEN=true
      - DRONE_LOGS_TRACE=true
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_AGENTS_ENABLED=true
     
      - DRONE_SERVER_HOST=drone-server
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=${SECRET}

      - DRONE_PROVIDER=gogs
      - DRONE_GOGS=true
      - DRONE_GOGS_SKIP_VERIFY=false
      - DRONE_GOGS_SERVER=http://gogs:3000

      - DRONE_USER_CREATE=username:${ACCOUNT},admin:true
      - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
      - DRONE_DATABASE_DRIVER=sqlite3
      - TZ=Asia/Shanghai
    restart: always

  drone-agent:
    image: drone/agent:1.2.1
    container_name: drone-agent
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_DEBUG=true
      - DRONE_MAX_PROCS=5
      # 内部分配ip
      - DOCKER_HOST=tcp://docker-bind:2375
      - DRONE_RPC_SERVER=http://drone-server:80
      - DRONE_RPC_SECRET=${SECRET}

      - TZ=Asia/Shanghai
    restart: always

  docker-bind:
     image: docker:dind
     privileged: true
     command: --storage-driver=overlay

在当前目录下创建 .env 文件,内容根据实际情况填写

account 注意:gogs安装过程中会有注册账号,注意这个账号和这个要相同

SECRET=123456
ACCOUNT=xxx
  1. 运行
    docker-compose up -d
    待启动完成之后,访问Gogs(ip/域名:3000),进入安装界面
    Install
    数据库类型按照实际环境选择,本文采用 SQLite3 方式。将域名和应用 URL 中的 IP/域名 换成本地 IP/域名,然后安装,其余不用修改,安装成功之后,注册账号

账号填写 .env 文件中配置的账号

注册的账号同样可以在Drone(ip/域名:8000)中登录。

  1. 测试
    创建一个 demo 项目并提交到 git 仓库,登录Drone,同步并激活仓库
    回到gogs,点击仓库设置->管理web钩子,此时自动生成了一个钩子,测试

在你的项目根目录,添加.drone.yml 文件,
在这里插入图片描述

并写入内容如下

kind: pipeline
name: greeting

steps:
- name: demo
  image: alpine
  commands:
  - echo Hello World

注意,没有.drone.yml文件,web钩子测试将会失败

另附参考:

https://segmentfault.com/a/1190000023161472

后记:推送是已经没问题了,可是drone的ACTIVITY FEED
的记录始终是pending状态,百度了下,资料少的可怜,暂时没解决!法克尔!!!


版权声明:本文为qq_15273019原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。