如今的项目或者个人项目中,大家的代码怎么部署呢?公司一般都有完整的持续集成以及持续交付平台,对于小公司可能也有各自搭建了一些,比如jenkins
,以及gitlab集成的gitlab-ci
等等,这些都可以完成我们部署的工作甚至是测试集成等等一系列流水化工作。
但是,即使如此,我依旧相信,很多公司或者前端开发者根本不太关注什么持续交付、持续集成等等。至于在部署这一块,不少走的还是本地npm run build
+ssh
+sftp
手动模式。当然我之前也一直这么干,为此还借助开源项目自己写了一个开源脚本@dllcnx/auto-deploy供团队使用(注意:此脚本密码模式因为要知道服务器用户密码且部署目录你的账户要有权限,虽然针对密码做了个加密,但是…)。
那么,我就想提交一下代码,其它啥都不想管。所以为什么不试试Drone呢?
Drone是一个现代持续集成平台,它使繁忙的团队能够使用强大的云原生管道引擎自动执行其构建、测试和发布工作流程。
所以Drone
的功能可不仅仅是部署,只是我针对这个需求可以使用它,所以一定不要被我的文章局限住,此文只是抛砖引玉。上篇docker服务系列的文章,我也介绍了搭建了一个git服务仓库06.搭建一个自己的私有仓库-Gitea,所以这篇文章也就以gitea仓库为例,来达到代码推送,由drone
去自动编译部署,其它如Github、Gitlab、Gitee、Bitbucket以及gitea/Gogs可以看各自文档。
为什么不用jenkins
呢?因为原来在公司就在用它,自己个人的代码就想试试其它的,并且jenkins
从界面到配置,再到内存占用,我个人都是不太喜欢的,当然不是说jenkins
不好,反而借助插件等等,它的能力是很强大的。
官方是这么说的: Drone是一个容器原生持续集成系统,旨在成为老旧Jenkins安装的自助服务替代品。
一、准备
创建 Gitea OAuth 应用程序。Client ID 和 Client Secret 用于授权访问 Gitea 资源。setting
->Applications
->create Applications
。
- 填入名称和回调地址(其实就是后边drone部署的访问地址)
注意: Client Secret只显示一次,确认关闭后就不再显示了,如果忘了就只能重置。
- 创建共享秘钥
创建一个共享密钥,以验证运行器与中央无人机服务器之间的通信。
您可以使用 openssl 生成共享密钥:
openssl rand -hex 16 // 796f8245fdba973216a5493b4c0b7f83
二、安装Drone服务
完整的drone服务由Drone和drone-runner构成。
drone服务启动并运行后,需要安装runner来执行生成管道。有关详细的安装说明,请参阅运行器安装文档。drone-runner轮询服务器以查找要执行的工作负载。有不同类型的运行器针对不同的用例和运行时环境进行了优化。您可以安装一个或多个一个或多个类型的流道。这一块我们采用drone-runner即可,它是一个通用运行器。
Docker runner是在临时 Docker 容器中执行管道步骤的守护程序。您可以安装单个 Docker runner,也可以在多台计算机上安装 Docker runner以创建自己的构建集群。
docker原生部署
- 拉取镜像
docker pull drone/drone:latest
docker pull drone/drone-runner-docker:latest
- 启动drone服务
docker run --detach=true --volume=/docker/drone:/data --env=DRONE_GITEA_SERVER=https://dllcnx.com:30000 \
--env=DRONE_GITEA_CLIENT_ID=06310187-3064-4cf8-92f3-4008dfaa810b \
--env=DRONE_GITEA_CLIENT_SECRET=gto_c4ytebo2jmorn3bihhyy6phbtet34hl6sbhomhk77x7x2iuv2hva \
--env=DRONE_RPC_SECRET=796f8245fdba973216a5493b4c0b7f83 \
--env=DRONE_SERVER_HOST=192.168.64.1:37078 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_USER_CREATE=username:test,admin:true \
--publish=37078:80 \
--publish=443:443 \
--restart=always \
--name=drone \
drone/drone:latest
-
DRONE_GITEA_CLIENT_ID: 必需的字符串,值提供您的 Gitea oauth 客户端 ID。
-
DRONE_GITEA_CLIENT_SECRET:必需的字符串,提供 Gitea oauth 客户端密码。
-
DRONE_GITEA_SERVER:必填字符串,提供您的 Gitea 服务器地址。
-
DRONE_GIT_ALWAYS_AUTH