简单使用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自动化部署

之后等待即可,完成,收工

首页
评论
分享
Top