1

最近研究了一下drone,尝试将drone1.0和gitea集合在一起,做CI服务;drone官方是有说明文档,支持gitea的,见drone server的安装文档;我个人安装过程中碰了一些坑,在这里记下安装过程。

先上docker-compose.yml文件:

version: "3.6"
services:
  mysql:
    image: mysql:${MYSQL_VERSION}
    container_name: mysql
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${MYSQL_DATA_DIR}:/var/lib/mysql/:rw
    restart: always
    networks:
      - default
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      TZ: Asia/Shanghai

  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /var/lib/gitea:/data
    restart: always
    networks:
      - default
    ports:
      - "10022:22"
      - "10080:3000"

  drone-server:
    image: drone/drone:latest
    container_name: drone-server
    ports:
      - "8080:80"
      - "8000:8000"
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dnmp/drone/:/var/lib/drone/:rw
    restart: always
    environment:
      - DRONE_GITEA_SERVER=http://192.168.88.190:10080
      #- DRONE_GITEA_SERVER=http://127.0.0.1:10080
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_SERVER_HOST=192.168.88.190
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=9c3921e3e748aff725d2e16ef31fbc42
      - DRONE_TLS_AUTOCERT=false
      - DRONE_LOGS_DEBUG=true
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - default

  drone-agent:
    image: drone/agent:latest
    container_name: drone-agent
    command: agent
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      #- DRONE_RPC_SERVER=http://192.168.88.190:9000
      - DRONE_RPC_SERVER=drone-server:9000
      - DRONE_RPC_SECRET=9c3921e3e748aff725d2e16ef31fbc42
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=192.168.88.190
      - DRONE_LOGS_DEBUG=true
      - TZ=Asia/Shanghai
    restart: always
    #detach: true
    networks:
      - default

networks:
  default:

我的环境是本地虚拟机centos7,上面IP地址是虚拟机的ip地址。
因为gitea是采用mysql数据库,所以要启动一个msyql的容器服务;通过命令docker-compose -f docker-compose.yml build命令先将镜像构建,其实都是用官方的镜像,构建这一步是很快的,只是做一个检查;

然后docker-compose -f docker-compose.yml up -d 将容器运行起来,通过docker ps -a可以查看到容器的状态:

clipboard.png
status这一栏都是正常的,表明服务就可以使用了。

先要配置gitea,通过http://192.168.88.190:10080/进入gitea的web页面,点击登录后,就会出现安装向导,填写信息,点击安装,等几分钟就ok了。安装的细节稍微要注意填写的地址和端口,容器内部要填写3000,对外开放的是10080。记住设置的管理员账号和密码,后面drone登录时也要用到。

然后通过http://192.168.88.190:8080/进入drone的web页面,如下:

clipboard.png
输入刚才在gitea设置的管理员账号和密码,就可以登录成功,就能看到如下页面:

clipboard.png

刚开始repositories是空的,点击右上方的sync按钮,等一分钟就会自动同步gitea项目过来;同步过来的gitea仓库,默认状态是没开启的。可以点击setting页面,进入设置,如下:

clipboard.png

填写配置文件名字,默认是.drone.yml。点击save,就会开启。点击save的时候,drone会将配置信息同步给你的gitea,gitea项目那边会响应,然后配置一个webhook,这里有个坑,后面再讲。

顺利的话,你在gitea项目添加.drone.yal后,就会触发构建,我在gitea仓库test下建的.drone.yml文件:

workspace:
  base: /go
  path: src/web_api

pipeline:
  build:
    image: golang    
    environment:
      TZ: Asia/Shanghai
    commands:
      - pwd
      - go env
      - date
      - go version
      - go build
      - ls -a

提交gitea后,查看drone的状态:

clipboard.png
第一步是clone代码,第二步是build,因为我的.drone.yml超级简单,没有后面的步骤,只是测试用的。第二步build的结果:
clipboard.png
看到正常运行,drone+gitea的服务就初步搭建起来了。后面通过在.drone.yml添加内容和服务,就能达到快速CI/CD的效果。

顺便记录一下踩的坑,刚开始我按照drone集成gitea的安装文档,将docker-compose.yml文件写好,运行docker-compose -f docker-compose.yml up -d 将容器运行起来,通过docker ps -a看到drone-server容器怎样都起不来,docker logs drone-server也看不出报错。

在网上找到drone+gitea的贴子,大部分都是drone0.8版本,鉴于此,我将drone的latest改为0.8,安装0.8版本的配置,重新运行,竟然跑起来了。跑起来后,我就摸索drone的配置和服务,后面发现1.0版本有一些配置跟0.8不一样,官方有说明,但不明显。见:

clipboard.png

clipboard.png

1.0版本跑不起来的配置,是因为drone-server的服务,80端口没对外开放,据我目前的了解,1.0版本默认是开放80端口,我当时按照0.8版本的端口,配置了"8000:8000"和"9000:9000",就差80端口,所以服务一直不正常。

这里也会涉及到gitea的webhook,上面说的在drone将gitea设置为开启状态时,这两者会交互的,我们看下gitea的webhook:

clipboard.png
drone关联gitea项目时,就会有添加这个,但是端口不是8080,默认是80,就是没有端口的,类似:
http://192.168.88.190/hook?secret=TzY9LahcXEiQ8eoBDvqPYaw2VN5dJGG2
点击修改,加上前面设置的端口8080,点击保存,然后test 一下webhook,就能看到效果。

至此,drone1.0+gitea,docker部署安装的步骤就完成了。

drone更多细节,还有待继续研究。


bigticket
22 声望2 粉丝

会蛙泳,正在学自由泳...会一点点php,正在学golang...很想学swift和scala...