Drone-CI 運作時的指定runner
最近群裡小夥伴問了個 drone ci 的問題
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucDOwADMxEzM00SOwkDN1gTNwAjMxgDMyIDMy0iM4UTM4MTMvwFOwIjMwIzLcJDO1EDOzEzLcd2bsJ2Lc12bj5ycn9Gbi52YuIjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
是我不曾想到的場景, 由于我使用的是三塊樹莓派4b, 性能上沒有差別, 是以在使用的時候就沒考慮過指定在哪一塊的runner上運作, 反正都差不多
各個服務的管理是通過k3s做的, 也就用runner打個鏡像推送到nexus3上而已
但是在實際的場景中可能會有各種各樣的情況:
- runner 宿主配置差距大, 個别鏡像放到孱弱的機器上打包會浪費時間造成流程阻塞
- 不同runner對應不同OS, 蘋果應該可以摻一腳
- 不同機器擁有不同的鏡像緩存, 可以加快打包速度
- steps中包含具體部署的部分, 可以直接将服務部署到任務分發的機器上
- 甚至有可能針對不同時區專門配置了不同的runner
- ......
這樣看下來, 根據需要自由選擇runner就非常有意義了
重建runner
首先删除原來的runner
然後使用類似下面的指令建立一個新的runner
docker run -itd \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=${drone_proto} \
-e DRONE_RPC_HOST=${drone_server} \
-e DRONE_RPC_SECRET=${drone_rpc_secret} \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-e DRONE_LOGS_TRACE=true \
-e DRONE_AGENTS_ENABLED=true \
-e DRONE_RUNNER_LABELS=a:b,c:d \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-docker
與官方文檔不同的是, 這裡增加了一行
-e DRONE_RUNNER_LABELS=a:b,c:d
其中的
a:b,c:d
兩個鍵值對作為 辨別, 可以根據實際情況自己定義, 隻要遵循 {Key1}:{Value1},{Key2}:{Value2} 的格式即可
修改yml
在yml中可以根據上面的 辨別 指定運作時的runner
kind: pipeline
type: docker
name: default
node:
a: b
c: d
steps:
- name: ****
......
大概差不多就是這個樣子