gogs是Go實(shí)現(xiàn)的Git服務(wù)器盼砍,不看不知道碾盟,一看嚇一跳,在github上的star數(shù)量居然快到兩萬(wàn)了锄俄。在gitlab如此好用的情況下局劲,能取得如此大的成就真的令人刮目相看。另外gogs主要的作者都是中國(guó)人奶赠,所以安裝運(yùn)行起來(lái)之后會(huì)讓人感覺到撲面而來(lái)的親切感鱼填。
Drone是一個(gè)CI/CD平臺(tái),支持通過docker來(lái)分發(fā)和使用毅戈。感覺它的主要特點(diǎn)就是基于docker來(lái)完成pipeline里面的任務(wù)苹丸。相對(duì)于fastlane里面的action腳本,基于docker感覺是有點(diǎn)重的苇经。
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語(yǔ)言寫的,這是它們的共同特點(diǎn)扇单,也使得它們的關(guān)系非常密切商模。所以下面也通過docker在單機(jī)上把平臺(tái)搭建起來(lái)。這樣很方便,但是也有一些令人蛋疼的坑施流。
在Mac OS上面首先需要安裝docker凉倚,安裝的方法請(qǐng)參考容器、微服務(wù)嫂沉、深度學(xué)習(xí)和阿里云這篇文章里面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
接下來(lái)啟動(dòng)三個(gè)server杏糙,記得將里面的ip地址改成本機(jī)的。
啟動(dòng)gogs server
docker run --name=gogs -p 10022:22 -p 3000:3000 -v /tmp/gogs:/data gogs/gogs
打開gogs的安裝界面蚓土,記得將所有的localhost都改成本機(jī)的ip地址宏侍,否則Drone agent跑在自己的容器里面,使用http://localhost:3000/henshao/CQ001.git
這樣的地址是不可能把項(xiàng)目clone下來(lái)的蜀漆,這是一個(gè)巨坑谅河。
啟動(dòng)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
啟動(dòng)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
三個(gè)server都啟動(dòng)之后,通過docker ps -a可以看到三個(gè)容器都運(yùn)行起來(lái)了确丢。gogs的日志會(huì)直接打印在終端绷耍,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里面設(shè)置管理員賬號(hào)鲜侥,這個(gè)賬號(hào)可以在Drone里面登錄褂始。
創(chuàng)建一個(gè)空項(xiàng)目,然后拷貝一份.drone.yml
進(jìn)來(lái)描函,并且push到服務(wù)器端崎苗。這樣便可以在Drone里面看到這個(gè)項(xiàng)目。
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的超集舀寓,所以應(yīng)該可以表達(dá)docker-compose的能力胆数,所以drone就非常適合測(cè)試微服務(wù)的場(chǎng)景,可以把依賴的服務(wù)通過docker運(yùn)行起來(lái)互墓,并且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倉(cāng)庫(kù)那邊有相關(guān)的變動(dòng)轰豆,會(huì)通知到Drone這邊胰伍。
這里有一個(gè)坑是Web鉤子里面要把推送地址
里面的localhost也改成本地地址齿诞,要不然沒法通知到Drone酸休。
設(shè)置好Web Hooks之后,跑到Drone里面就可以看到項(xiàng)目和構(gòu)建的過程啦祷杈。
一些懸而未解的問題斑司。
- Drone對(duì)github的支持?Setting up a self-hosted drone.io CI server這篇文章講得不錯(cuò)。
- Drone CLI的玩法
- Drone怎么管理構(gòu)建集群的宿刮?迄今為止沒見到過集群管理界面互站。