美文网首页CI/CDdrone技术也要去运维
体验基于gogs+Drone搭建的CI/CD平台

体验基于gogs+Drone搭建的CI/CD平台

作者: 阿呆少爷 | 来源:发表于2017-06-28 17:02 被阅读2816次

    gogs是Go实现的Git服务器,不看不知道,一看吓一跳,在github上的star数量居然快到两万了。在gitlab如此好用的情况下,能取得如此大的成就真的令人刮目相看。另外gogs主要的作者都是中国人,所以安装运行起来之后会让人感觉到扑面而来的亲切感。

    image.png

    Drone是一个CI/CD平台,支持通过docker来分发和使用。感觉它的主要特点就是基于docker来完成pipeline里面的任务。相对于fastlane里面的action脚本,基于docker感觉是有点重的。

    Drone is a lightweight, powerful continuous delivery platform built 
    for containers. Drone is packaged and distributed as a Docker 
    image and can be downloaded from Dockerhub.
    

    Docker、gogs和Drone都是使用go语言写的,这是它们的共同特点,也使得它们的关系非常密切。所以下面也通过docker在单机上把平台搭建起来。这样很方便,但是也有一些令人蛋疼的坑。

    在Mac OS上面首先需要安装docker,安装的方法请参考容器、微服务、深度学习和阿里云这篇文章里面Docker for Mac部分。

    使用docker安装gogs和Drone image,都使用最新版本就好。

    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    drone/drone         latest              6f6d25ca3e3a        2 days ago          25.8 MB
    gogs/gogs           latest              e2c7c23d0b12        3 days ago          128 MB
    

    接下来启动三个server,记得将里面的ip地址改成本机的。

    启动gogs server

    docker run --name=gogs -p 10022:22 -p 3000:3000 -v /tmp/gogs:/data gogs/gogs
    

    打开gogs的安装界面,记得将所有的localhost都改成本机的ip地址,否则Drone agent跑在自己的容器里面,使用http://localhost:3000/henshao/CQ001.git这样的地址是不可能把项目clone下来的,这是一个巨坑。

    image.png

    启动Drone server

    docker run -d \
         -e DRONE_GOGS=true \
         -e DRONE_GOGS_URL=http://30.8.60.50:3000 \
         -e DRONE_OPEN=true \
         -e DRONE_SECRET=hello1234 \
         -v /tmp/drone:/var/lib/drone \
         -p 9090:8000 \
         --restart=always \
         --name=drone \
         drone/drone
    

    启动Drone agent

    docker run -d \
         -e DRONE_SERVER=ws://30.8.60.50:9090/ws/broker \
         -e DRONE_SECRET=hello1234 \
         -v /var/run/docker.sock:/var/run/docker.sock \
         --name=drone-agent \
         drone/drone agent
    

    三个server都启动之后,通过docker ps -a可以看到三个容器都运行起来了。gogs的日志会直接打印在终端,drone和drone-agent的日志可以通过docker logs drone或drone-agent命令查看。

    5522f193c991        plugins/git:latest   "/bin/drone-git"         28 minutes ago      Exited (0) 28 minutes ago                                                   0_1094465437123776148_clone
    324913d65eb2        drone/drone          "/drone agent"           28 minutes ago      Up 28 minutes               80/tcp, 443/tcp, 8000/tcp                       drone-agent
    a9dc883b3a8e        gogs/gogs            "/app/gogs/docker/..."   41 minutes ago      Up 41 minutes               0.0.0.0:3000->3000/tcp, 0.0.0.0:10022->22/tcp   gogs
    4f188969d8fd        drone/drone          "/drone server"          44 minutes ago      Up 44 minutes               80/tcp, 443/tcp, 0.0.0.0:9090->8000/tcp         drone
    

    去gogs里面设置管理员账号,这个账号可以在Drone里面登录。

    创建一个空项目,然后拷贝一份.drone.yml进来,并且push到服务器端。这样便可以在Drone里面看到这个项目。

    pipeline:
      backend:
        image: golang
        commands:
          - go get
          - go build
          - go test
    
      frontend:
        image: node:6
        commands:
          - npm install
          - npm test
    
      notify:
        image: plugins/slack
        channel: developers
        username: drone
    

    .drone.yml是docker-compose的超集,所以应该可以表达docker-compose的能力,所以drone就非常适合测试微服务的场景,可以把依赖的服务通过docker运行起来,并且link好。

    Get started by placing a .drone.yml file in the root of your repository. 
    The .drone.yml is a superset of the [docker-compose](https://docs.docker.com/compose/) file format. 
    

    在Drone里面开启Web钩子。这样gogs仓库那边有相关的变动,会通知到Drone这边。

    image.png

    这里有一个坑是Web钩子里面要把推送地址里面的localhost也改成本地地址,要不然没法通知到Drone。

    image.png

    设置好Web Hooks之后,跑到Drone里面就可以看到项目和构建的过程啦。

    image.png

    一些悬而未解的问题。

    1. Drone对github的支持?Setting up a self-hosted drone.io CI server这篇文章讲得不错。
    2. Drone CLI的玩法
    3. Drone怎么管理构建集群的?迄今为止没见到过集群管理界面。

    相关文章

      网友评论

      • asaxing:gogs和drone都启动成功了,但是启动启动Drone agent的时候报错了, 显示level=fatal msg="version control system not configured", 可以帮忙解决一下吗?
      • c6dbbe9d3fb4:“在gitlab上的star数量居然快到两万了。” github写成gitlab了。
        阿呆少爷:哈哈,是啊,写错了,已经改正过来了。

      本文标题:体验基于gogs+Drone搭建的CI/CD平台

      本文链接:https://www.haomeiwen.com/subject/dliucxtx.html