简单使用gogs+drone搭建ci/cd自动化部署
文章正文
发布时间:2025-05-14 16:17
系列文章:
简单使用gogs+drone搭建ci/cd自动化部署
单机部署CI/CD进阶版:宝塔+gitea+drone
日常的开发工作中,如果没有专业的运维工程师,我们的CI/CD工作会非常的困难,尤其是二三线城市,很多公司的技术团队是没有全职的运维工程师,这时候,掌握代码提交和自动化代码部署的能力,就会显得更有竞争力。
首先,什么是CI/CD
CI : 持续集成
通俗一点说,就是把代码提交到代码托管平台
CD : 持续交付+持续部署
简单的说,就是自动化轻松的部署到生产坏境,且全程自动更新代码
具体实现,需要借助docker,使用docker-compose来编排容器
新建docker-compose.yml文件
以下内容可以拿来直接使用,需要确保3000、10022、8080三个端口没有占用,且外网可以访问,且创建drone同名数据库数据表,
帐号密码为drone和b7RLreDWrycdnBA3
如想修改,修改DRONE_DATABASE_DATASOURCE配置项
version
: '3'
services
:
gogs
:
image
: gogs
/gogs
:0.12.3
container_name
: gogs
ports
:
# 安装配置gogs需要访问
3000的端口
- "3000:3000"
- "10022:22"
volumes
:
- /data
/gogs
:/data
restart
: always
drone
-server
:
image
: drone
/drone
:latest
container_name
: drone
-server
ports
:
# 访问drone的时候需要访问的
8080的端口
- "8080:80"
- "8443:443"
volumes
:
# 挂载外部的目录
- /data
/drone
:/var/lib
/drone
/
- /var/run
/docker
.sock
:/var/run
/docker
.sock
restart
: always
environment
:
- DRONE_DEBUG=true
# 启动日志,默认是关闭的
- DRONE_LOGS_TRACE=true
# 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
- DRONE_OPEN=true
# 设置 drone
-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_SERVER_HOST=drone
-server
- DRONE_GIT_ALWAYS_AUTH=false
# 开启 gogs
- DRONE_GOGS=true
- DRONE_GOGS_SKIP_VERIFY=false
# gogs 服务地址,使用容器名
+ 端口号
---注意点这里需有前面的
HTTP
- DRONE_GOGS_SERVER=http
://gogs
:3000
# drone 的提供者,本项目中为 gogs服务
- DRONE_PROVIDER=gogs
# 配置 drone 数据库
- DRONE_DATABASE_DRIVER=mysql
# 配置 drone 数据库文件
- DRONE_DATABASE_DATASOURCE=drone
:b7RLreDWrycdnBA3@
tcp(172.17.0.1:3306)/drone
?parseTime
=true
# 协议,可选 http、https
- DRONE_SERVER_PROTO=http
# 秘钥信息设置,主要是用在 drone
-server 与 drone
-agent 之间的
RPC 请求
- DRONE_RPC_SECRET=secret
# 秘钥信息设置,主要是用在 drone
-server 与 drone
-agent 直接的请求
- DRONE_SECRET=secret
drone
-agent
:
image
: drone
/agent
:latest
container_name
: drone
-agent
depends_on
:
- drone
-server
volumes
:
- /var/run
/docker
.sock
:/var/run
/docker
.sock
restart
: always
environment
:
- DRONE_DEBUG=true
# 开始日志,默认是关闭的
- DRONE_LOGS_TRACE=true
# 启动 debug 日志,默认是关闭的
- DRONE_LOGS_DEBUG=true
# 设置 drone
-server 使用的 host 名称,可以是 ip 地址加端口号;容器中可以使用容器名称代替
- DRONE_RPC_SERVER=http
://drone
-server
# 秘钥,用于 drone
-server 与 drone
-agent 之间的
RPC 请求
- DRONE_RPC_SECRET=secret
- DRONE_SERVER=drone
-server
:9000
# 秘钥,用于 drone
-server 与 drone
-agent 直接的请求
- DRONE_SECRET=secret
- DRONE_MAX_PROCS=5
- DROCK_HOST=tcp
://127.0.0.1:2375
运行编排文件
docker
-compose up
-d
可以使用Portainer来可视化管理docker
下载镜像
docker pull portainer
/portainer
运行
docker run
-d
-p
9000:9000 --restart
=always
-v
/var/run
/docker
.sock
:/var/run
/docker
.sock
--name prtainer portainer
/portainer
首次进入portainer管理界面需要设置登录账号密码,进入后按提示,进入容器管理界面,访问地址为服务器IP:9000,如下图
![简单使用gogs+drone搭建ci/cd自动化部署]()
表示已经运行成功
运行gogs
访问地址为服务器IP:3000
![简单使用gogs+drone搭建ci/cd自动化部署]()
![简单使用gogs+drone搭建ci/cd自动化部署]()
在用户设置-SSH秘钥里上传电脑秘钥
![简单使用gogs+drone搭建ci/cd自动化部署]()
之后找一个vue项目上传上去
![简单使用gogs+drone搭建ci/cd自动化部署]()
设置drone
访问 服务器IP:8080 打开drone界面
![简单使用gogs+drone搭建ci/cd自动化部署]()
如果打不开,去查看容器日志,解决问题
![简单使用gogs+drone搭建ci/cd自动化部署]()
输入gogs里设置的管理员帐号密码
![简单使用gogs+drone搭建ci/cd自动化部署]()
drone会自动同步gogs里的仓库
![简单使用gogs+drone搭建ci/cd自动化部署]()
![简单使用gogs+drone搭建ci/cd自动化部署]()
点击,激活仓库
![简单使用gogs+drone搭建ci/cd自动化部署]()
这个时候,我们回到gogs里,在仓库设置-管理web钩子中,就会看到gogs已经自动帮我们设置好了
![简单使用gogs+drone搭建ci/cd自动化部署]()
点击编辑,进入查看详情
![简单使用gogs+drone搭建ci/cd自动化部署]()
编写.drone.yml文件
需要注意两点
1、后缀为yml
2、文件是隐藏文件,所以是.开头的
在项目根目录,创建.drone.yml文件
kind
: pipeline
type
: docker
name
: build
steps
:
- name
: 编译文件
image
: node
:10.16
pull
: if-not
-exists # always never
commands
:
- node
-v
- npm
-v
- yarn
--version
- yarn config
set cache
-folder
.yarn
-cache
- yarn install
- yarn run build
- name
: 同步文件
image
: drillster
/drone
-rsync
settings
:
user
: root
key
:
from_secret
: ssh_key
hosts
:
- 172.17.0.1
# 来源项目目录
source
: ./dist
/*
# 目标服务器目录
target: /www/wwwroot/www
script:
- cd /www/wwwroot/www
- ls
- name: 钉钉推送
pull: if-not-exists # always never
image: guoxudongdocker/drone-dingtalk
settings:
token:
from_secret: dingding_token
type: markdown
message_color: true
message_pic: true
sha_link: true
when:
status: [failure, success]
需要注意的是,这里用到了drone配置的secret
![简单使用gogs+drone搭建ci/cd自动化部署]()
特别注意的是
ssh_key的值,是 秘钥,不是公钥
是宿主机的 /root/.ssh/id_rsa 文件里的所有内容
需要全部复制进去
之后,把宿主机公钥的内容,复制到宿主机的authorized_keys文件里
这两步很重要
之后,git push提交,将触发构建任务
(钉钉推送这里被我注释了代码,所以看不到构建任务)
![简单使用gogs+drone搭建ci/cd自动化部署]()
之后等待即可,完成,收工