安裝Gogs
此步驟不再贅述,另外一篇文章有記錄:http://www.lxweimin.com/p/a867f1f39f0f
安裝Drone
請參考官方文檔進行安裝,鏈接:https://docs.drone.io/
運行起來一個完整的Drone,需要安裝Drone Server和Drone Runner,這里注意:Runner會去實際執行pipline,如果沒有安裝運行對應的runner,那么不會執行pipline,比方說,yaml文件寫的type是ssh,則需要另外安裝drone-runner-ssh,type為docker則需要安裝drone-runner-docker:1,因為本人實際需要,本文將會將這兩個鏡像都拉下來運行。
直接run鏡像,找不到會自動前去拉取
docker run -d \
-v /export/drone/data:/data \
-e DRONE_AGENTS_ENABLED=true \
-e DRONE_GOGS_SERVER=http://gogs的域名或ip地址:端口 \
-e DRONE_RPC_SECRET=密鑰key \
-e DRONE_SERVER_HOST=drone的web網頁域名或ip地址:端口 \
-e DRONE_SERVER_PROTO=http \
-e DRONE_USER_CREATE=username:管理員名稱(gogs用戶),admin:true \
-e TZ="Asia/Shanghai" \
-p web端口:80 \
--restart=always \
--name=drone \
drone/drone:1
docker run -d \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=web域名或ip地址:端口 \
-e DRONE_RPC_SECRET=密鑰key \
-p 4001:3000 \
--restart always \
--name runner-ssh \
drone/drone-runner-ssh
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=web域名或ip地址:端口 \
-e DRONE_RPC_SECRET=密鑰key \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=runner-docker \
-e TZ="Asia/Shanghai" \
-p 4002:3000 \
--restart=always \
--name=runner-docker \
drone/drone-runner-docker:1
檢查配置是否正常
請細心檢查以下步驟是否正常,某一步出錯將可能導致無法正常使用
- 登錄drone激活倉庫,登錄地址為上面的drone的web網頁域名或ip地址:端口
- 登錄后,正常會出現gogs的倉庫,第一次點進倉庫后,會出現Activate repository字樣的按鈕,點擊進行激活
- 在倉庫編寫正確規范的
.drone.yml
文件 - 登錄gogs,進入倉庫設置,找到
管理 Web 鉤子
,進入鉤子,注意檢查推送地址是否有誤,比方說出現2個http
,如果有,進行修正 - 找到最底部的最近推送記錄,右邊有個測試推送,點擊進行測試推送
- 登錄drone后臺,查看是否收到推送,并且成功執行相應的操作(yaml文件寫的命令操作)
如果無法正常執行,應當登錄服務器,查看對應drone-runner的docker日志觀察Runner與Drone的連接是否正常,如果是正常,則查看drone-server的docker日志,進行排查問題,docker 查看日志指令:
docker logs -f 容器ID
- 如果上述能正常推送,drone-runner也能正常按照yaml文件指定的命令進行操作,則說明整套流程已經正常完成,如果中途出現異常,應當多查看drone-server和drone-runner的docker日志,另外yaml文件配置也務必正確規范
重新部署
如果發現鏡像有誤,需要重新部署,則停止容器,刪除容器及鏡像,重新正確設置run起來即可
docker stop 容器ID
docer rm 容器ID
docker rmi 鏡像ID
Yaml文件撰寫
https://nodeca.github.io/js-yaml/ 可以檢查yml語法是否正常,注意:一次只能檢查一個文檔
ssh demo(注:下面的用戶名、密碼通常不會使用明文,而是使用drone后臺的Secrets)
---
kind: pipeline
type: ssh
name: default
server:
host: 服務器地址
user: 用戶名
password:
from_secret: 密碼
steps:
- name: greeting
commands:
- echo hello world
docker demo
kind: pipeline
type: docker
name: default
steps:
- name: greeting
image: alpine
commands:
- echo hello
- echo world
根據git TAG觸發的pipline(比方說:git打上某個tag,則觸發某個操作,例如:pull代碼,build鏡像,重啟容器等)
---
kind: pipeline
type: ssh
name: default
server:
host: 服務器地址
user: 用戶名
password:
from_secret: 密碼
steps:
- name: greeting
commands:
- echo hello world
when:
event:
- tag
結尾
出錯多看日志,多動腦