gogs是Go實現的Git服務器,不看不知道,一看嚇一跳,在github上的star數量居然快到兩萬了。在gitlab如此好用的情況下,能取得如此大的成就真的令人刮目相看。另外gogs主要的作者都是中國人,所以安裝運行起來之后會讓人感覺到撲面而來的親切感。
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下來的,這是一個巨坑。
啟動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這邊。
這里有一個坑是Web鉤子里面要把推送地址
里面的localhost也改成本地地址,要不然沒法通知到Drone。
設置好Web Hooks之后,跑到Drone里面就可以看到項目和構建的過程啦。
一些懸而未解的問題。
- Drone對github的支持?Setting up a self-hosted drone.io CI server這篇文章講得不錯。
- Drone CLI的玩法
- Drone怎么管理構建集群的?迄今為止沒見到過集群管理界面。