安装Gogs
此步骤不再赘述,另外一篇文章有记录:https://www.jianshu.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
结尾
出错多看日志,多动脑