简单使用gogs+drone搭建ci/cd自动化部署

日常的开发工作中,如果没有专业的运维工程师,我们的CI/CD工作会非常的困难,尤其是二三线城市,很多公司的技术团队是没有全职的运维工程师,这时候,掌握代码提交和自动化代码部署的能力,就会显得更有竞争力。
首先,什么是CI/CD
CI : 持续集成
通俗一点说,就是把代码提交到代码托管平台
CD : 持续交付+持续部署
简单的说,就是自动化轻松的部署到生产坏境,且全程自动更新代码

具体实现,需要借助docker,使用docker-compose来编排容器
新建docker-compose.yml文件
以下内容可以拿来直接使用,需要确保3000、10022、8080三个端口没有占用,且外网可以访问,且创建drone同名数据库数据表,
帐号密码为drone和b7RLreDWrycdnBA3
如想修改,修改DRONE_DATABASE_DATASOURCE配置项

version: '3'
services:
  gogs:
    image: gogs/gogs:0.12.3
    container_name: gogs
    ports:
      # 安装配置gogs需要访问3000的端口
      - "3000:3000"
      - "10022:22"
    volumes:
      - /data/gogs:/data
    restart: always

  drone-server:
    image: drone/drone:latest
    container_name: drone-server
    ports:
      # 访问drone的时候需要访问的8080的端口
      - "8080:80"
      - "8443:443"
    volumes:
      # 挂载外部的目录
      - /data/drone:/var/lib/drone/
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - DRONE_DEBUG=true
      # 启动日志,默认是关闭的
      - DRONE_LOGS_TRACE=true
      # 启动 debug 日志,默认是关闭的
      - DRONE_LOGS_DEBUG=true
      - DRONE_OPEN=true
      # 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
      - DRONE_SERVER_HOST=drone-server
      - DRONE_GIT_ALWAYS_AUTH=false
      # 开启 gogs
      - DRONE_GOGS=true
      - DRONE_GOGS_SKIP_VERIFY=false
      # gogs 服务地址,使用容器名 + 端口号---注意点这里需有前面的HTTP
      - DRONE_GOGS_SERVER=http://gogs:3000
      # drone 的提供者,本项目中为 gogs服务
      - DRONE_PROVIDER=gogs
      # 配置 drone 数据库
      - DRONE_DATABASE_DRIVER=mysql
      # 配置 drone 数据库文件
      - DRONE_DATABASE_DATASOURCE=drone:b7RLreDWrycdnBA3@tcp(172.17.0.1:3306)/drone?parseTime=true
      # 协议,可选 http、https
      - DRONE_SERVER_PROTO=http
      # 秘钥信息设置,主要是用在 drone-server 与 drone-agent 之间的 RPC 请求
      - DRONE_RPC_SECRET=secret
      # 秘钥信息设置,主要是用在 drone-server 与 drone-agent 直接的请求
      - DRONE_SECRET=secret

  drone-agent:
    image: drone/agent:latest
    container_name: drone-agent
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - DRONE_DEBUG=true
      # 开始日志,默认是关闭的
      - DRONE_LOGS_TRACE=true
      # 启动 debug 日志,默认是关闭的
      - DRONE_LOGS_DEBUG=true
      # 设置 drone-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
      - DRONE_RPC_SERVER=http://drone-server
      # 秘钥,用于 drone-server 与 drone-agent 之间的 RPC 请求
      - DRONE_RPC_SECRET=secret
      - DRONE_SERVER=drone-server:9000
      # 秘钥,用于 drone-server 与 drone-agent 直接的请求
      - DRONE_SECRET=secret
      - DRONE_MAX_PROCS=5
      - DROCK_HOST=tcp://127.0.0.1:2375

运行编排文件

docker-compose up -d

可以使用Portainer来可视化管理docker
下载镜像

docker pull portainer/portainer

运行

docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer portainer/portainer

首次进入portainer管理界面需要设置登录账号密码,进入后按提示,进入容器管理界面,访问地址为服务器IP:9000,如下图

简单使用gogs+drone搭建ci/cd自动化部署
表示已经运行成功

运行gogs
访问地址为服务器IP:3000

简单使用gogs+drone搭建ci/cd自动化部署

简单使用gogs+drone搭建ci/cd自动化部署

在用户设置-SSH秘钥里上传电脑秘钥

简单使用gogs+drone搭建ci/cd自动化部署

之后找一个vue项目上传上去

简单使用gogs+drone搭建ci/cd自动化部署

设置drone
访问 服务器IP:8080 打开drone界面

简单使用gogs+drone搭建ci/cd自动化部署

如果打不开,去查看容器日志,解决问题

简单使用gogs+drone搭建ci/cd自动化部署

输入gogs里设置的管理员帐号密码

简单使用gogs+drone搭建ci/cd自动化部署

drone会自动同步gogs里的仓库

简单使用gogs+drone搭建ci/cd自动化部署

简单使用gogs+drone搭建ci/cd自动化部署
点击,激活仓库

简单使用gogs+drone搭建ci/cd自动化部署
这个时候,我们回到gogs里,在仓库设置-管理web钩子中,就会看到gogs已经自动帮我们设置好了

简单使用gogs+drone搭建ci/cd自动化部署
点击编辑,进入查看详情

简单使用gogs+drone搭建ci/cd自动化部署

编写.drone.yml文件
需要注意两点
1、后缀为yml
2、文件是隐藏文件,所以是.开头的
在项目根目录,创建.drone.yml文件

kind: pipeline
type: docker
name: build
steps:
- name: 编译文件
  image: node:10.16
  pull: if-not-exists # always never
  commands:
    - node -v
    - npm -v
    - yarn --version
    - yarn config set cache-folder .yarn-cache
    - yarn install
    - yarn run build

- name: 同步文件
  image: drillster/drone-rsync
  settings:
    user: root
    key:
      from_secret: ssh_key
    hosts:
      - 172.17.0.1
    # 来源项目目录
    source: ./dist/*
    # 目标服务器目录
    target: /www/wwwroot/www
    script:
      - cd /www/wwwroot/www
      - ls

 - name: 钉钉推送
   pull: if-not-exists # always never
   image: guoxudongdocker/drone-dingtalk
   settings:
     token:
       from_secret: dingding_token
     type: markdown
     message_color: true
     message_pic: true
     sha_link: true
   when:
     status: [failure, success]

需要注意的是,这里用到了drone配置的secret

简单使用gogs+drone搭建ci/cd自动化部署

特别注意的是
ssh_key的值,是 秘钥,不是公钥
是宿主机的 /root/.ssh/id_rsa 文件里的所有内容
需要全部复制进去
之后,把宿主机公钥的内容,复制到宿主机的authorized_keys文件里
这两步很重要

之后,git push提交,将触发构建任务
(钉钉推送这里被我注释了代码,所以看不到构建任务)
简单使用gogs+drone搭建ci/cd自动化部署

之后等待即可,完成,收工

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!