最近产品希望把PRD部署到服务器上,方便大家查看,为了让产品可以方便的把PRD部署到服务器上,于是想到了自动部署,但是公司用的Jenkins,感觉过于雍总,而且对于环境还有些要求,所以我就想到了自建持续集成服务,这时候,Gogs+Drone的组合就很方便了。
相关工具
- Docker
- Gogs: A painless self-hosted Git service
- Drone CI – Automate Software Testing and Delivery
Gogs安装
参考使用Docker + Gogs搭建git私服
Drone安装
Drone也使用docker安装
先启动drone server
docker run \
-v /var/lib/drone:/data \
-v /etc/localtime:/etc/localtime \
--env=DRONE_DEBUG=true \
--env=DRONE_LOGS_TRACE=true \
--env=DRONE_LOGS_DEBUG=true \
--env=DRONE_LOGS_PRETTY=true \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GOGS_SERVER=http://gogs.fan-x.fun \
--env=DRONE_SERVER_HOST=1.2.3.4:10080 \
--env=DRONE_RPC_SECRET=123456 \
--env=DRONE_SERVER_PROTO=http \
--publish=10080:80 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2
DRONE_GOGS_SERVER:gogs的访问地址,这个根据Gogs的部署来设置
DRONE_SERVER_HOST:Drone的访问地址和端口,跟浏览器访问地址保持一致,port跟下面--publish
设置的保持一致
DRONE_RPC_SECRET:Drone的连接密码,后面runner访问server时会用到
DRONE_SERVER_PROTO:请求协议,http或者https
再启动runner,我这儿是用的ssh执行器,具体用啥执行器,根据业务自定判定
docker run --detach=true \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=1.2.3.4:10080 \
--env=DRONE_RPC_SECRET=123456 \
--restart always \
--name drone-ssh \
drone/drone-runner-ssh
runner的设置参考server即可
至此,环境搭建就好了,接下来就是配置自动部署了
使用
因为我的服务器上已经安装了nginx,我这边需要做的事情就是每次产品提交prd后,将对应的文件复制到nginx的目录下,所以我这儿是通过shell命令来操作的
drone通过在仓库中添加.drone.yml
来实现自定义流程,具体配置可以参考drone官方文档
附上我的文件
---
kind: pipeline
type: ssh
name: default
server:
host: 127.0.0.1
user: root
ssh_key:
from_secret: mac
steps:
- name: greeting
commands:
- rm -rf /etc/nginx/www/prd/*
- cp ./* /etc/nginx/www/prd/ -R
ssh_key里有个from_secret,这个是在drone管理界面中管理的