逐步搭建gogs+drone自动化---drone篇

drone

什么是drone

Drone 是一个基于 Docker 的云原生的持续集成/部署工具,能支持四种 git 托管服务(github, gitlab, gogs, gitea) 而 drone-server 预先知晓了对应托管服务的 API,drone 的很多功能比如拉取 git repo list/add webhook to repo 都是通过这些 API 完成的。

前期准备

首先准备好服务器(也可以本地搭建),其次了解一些基础的docker操作和linux命令。因为此次是基于阿里云服务器进行,所以本地搭建不做介绍。

  • 服务器: 阿里云(1核2G) centOS 7.7.1908
  • mysql:5.7 (5.7及以上,低版本会产生gogs报错主索引长度不够 Specified key was too long; max key length is 764 bytes )
  • drone/drone:1.0.0-rc.5 #关联git仓库,解析yml 注入变量
  • drone/drone-runner-docker:1.0.1 #运行yml解析的drone流水线

安装drone

  1. 拉取镜像。

    docker pull drone/drone:1.0.0-rc.5
    docker pull drone-runner-docker:1.0.1
    
  2. 网上大多数据采用的docker-compose(详情直接搜gogs+drone),但是我们这里采用分步搭建。

    1. 安装drone
       docker run   \
       --publish=3000:80   \
       --volume=/opt/data:/data   \
       --env=DRONE_OPEN=true  \
       --env=DRONE_GIT_ALWAYS_AUTH=false  \
       --env=DRONE_SERVER_HOST=drone.mydomain.club  \
       --env=DRONE_DEBUG=true  \
       --env=DRONE_SERVER_PROTO=http  \
       --env=DRONE_PROVIDER=gogs  \
       --env=DRONE_GOGS=true  \
       --env=DRONE_GOGS_SERVER=http://git.mydomain.club  \
       --env=DRONE_DATABASE_DATASOURCE=drone:drone@tcp(xxx.xx.xx.xx:3306)/drone?parseTime=true  \
       --env=DRONE_DATABASE_DRIVER=mysql  \
       --env=DRONE_RPC_SECRET=drone.mydomain.com \
       --env=DRONE_USER_CREATE=username:zRainy,admin:true \
       --restart=always   \
       --detach=true  \
       --name=drone  \ 
       drone/drone/drone:1.0.0-rc.5
    
     -  需要特别注意的几个变量(--env):
         - `DRONE_GIT_ALWAYS_AUTH`   使用gogs的使用必须为false,因为gogs不支持验证登录。
         - `DRONE_SERVER_HOST` 最后访问的网址host,可以用ip+端口,使用域名需要代理到对应的端口上,例如我这里是用的主机3000端口映射容器80端口,就需要代理到3000端口上。
         - `DRONE_PROVIDER,DRONE_GOGS,DRONE_GOGS_SERVER` 使用gogs作为git的固定配置,需要特别注意的是,这里的git地址,需要测试http和ssh方式clone是能完成,否则会影响后续的构建。
         - `DRONE_DATABASE_DRIVER,DRONE_DATABASE_DATASOURCE` 使用mysql数据库的默认配置,需要自己建库,测试能链接上即可,需要注意版本不小于于5.7,避免`Specified key was too long; max key length is 764 bytes `错误。
         - `DRONE_RPC_SECRET` 与drone-runner-docker通讯的秘钥,这个字段可以随便定义,但是需要和后续在drone-runner-docker中配置的这个字段一致即可。
         - `DRONE_USER_CREATE` 超级管理用户,这个可以用能设置drone构建的时候仓库为可信任的,只有这种模式下才能运行通过yml挂载主机的卷。
     
     - 查看安装成果,访问`DRONE_SERVER_HOST`对应的http地址,能打开使用gogs账号登录即成功。(第一次建议直接使用ip+port方式搭建,能少很多坑和步骤。)
    
    1. 安装drone-runner-docker
    $ docker run -d \
        -v /var/run/docker.sock:/var/run/docker.sock \
        --env=DRONE_RPC_PROTO=http \
        --env=DRONE_RPC_HOST=drone.mydomain.club \
        --env=DRONE_RPC_SECRET=drone.mydomain.com \
        --env=DRONE_LOGS_TRACE=true
        --env=DRONE_LOGS_DEBUG=true
        --restart always \
        --name runner \
        drone/drone-runner-docker:1
    
    • 这里的挂载文件/var/run/docker.sock:/var/run/docker.sock是必须的,没有这个参数没有使用主机docker操作的权限。
    • 需要特别注意的变量:
      DRONE_RPC_HOST 与上面drone的配置的DRONE_SERVER_HOST字段相同。
      DRONE_RPC_SECRET 与上面drone的配置的DRONE_RPC_SECRET字段相同。

至此,安装drone完毕。

  1. 测试gogs和drone是否关联。

    1. 打开gogs的链接,用户登录,建造仓库。
    2. 打开drone的链接,用户登录,更新列表,将新建的仓库设置为Activate repository
    3. 在gogs对应仓库>仓库设置>管理web钩子查看是否有一个名为 drone的链接/hook的钩子。有就点击,没有检查1 2 是否完成。
    4. 点击之后的页面是设置这个钩子的页面,直接滚动到底部,点击测试推送。
    5. 如果正确返回了证明gogs和drone已经关联上了。
    6. 准备一个.drone.yml文件,请用下文件测试,避免yml文件编写bug影响判断结果。
    kind: pipeline
    name: default
    
    steps:
    - name: test
    image: alpine
    commands:
        - echo 'echo success'  
    
    1. 推送到仓库之后,drone的链接icon应该已经开始转动,点击查看这个仓库的构建,在详情内能看输出success即成功。(这里如果gogs设置了必须验证密码会导致git clone失败。拉不下来仓库,需要进行配置密码账号或者ssh,如果是第一次搭建建议在搭建gogs的时候,install环境不要勾选 需要登录后浏览
  2. 基于gogs+drone的流程已经完成,下一篇会分享几个常用的.drone.yml配置文件,方便自己自己copy,需要的可以看看。

你可能感兴趣的:(解决方案,个人学习,docker,linux)