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

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怎么管理构建集群的?迄今为止没见到过集群管理界面。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容