私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下) (2)

可以使用 Gitea 测试推送 Webhook,进行重复测试。

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

查询具体执行信息,会发现其中大部分时间都浪费在了 npm install 命令。

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

这是因为每一个步骤都是在一个进程内执行的,每一次执行都是一个新进程,

但是往往会有挂载数据这种情况,针对这种需求,Drone 也提供了 Volume 机制。允许将容器内文件挂载到宿主机中。

PS: Drone 中代码目录在所有 步骤(step) 中共享,

Drone 中提供了两种 Volume

Host Volume:数据挂载到主机上,数据永久存在

Temporary Volume:数据挂载临时卷中用于步骤(step)间共享。管道(Pipeline) 执行完毕会清除数据卷

具体两者,可以参考官方文档。

挂载数据卷分为两步

声明数据卷

使用数据卷

kind: pipeline # 定义一个管道 type: docker # 定义管道类型 name: test # 定义管道名称 volumes: # 声明数据卷 - name: node_modules # 数据卷名称 host: # Host Volume path: /volumes/drone/volumes/web/node_modules # 宿主机目录 #绝对路径 clone: disable: false # 启用代码拉取 steps: - name: build-project # 步骤名称 image: node:16.13.2 # 使用镜像 depends_on: [clone] # 依赖的步骤, volumes: # 挂载数据卷 - name: node_modules # 数据卷名称 path: /drone/src/node_modules # 容器内目录 绝对路径 commands: # 执行命令 - pwd # 查看当前目录 - npm config set registry https://registry.npm.taobao.org # 切换淘宝镜像 - npm install # 安装node_modules包 - npm run build # 执行编译

注意:

数据卷中路径(path),必须为 绝对路径,不可以使用 相对路径

我使用 pwd 命令查询了当前目录为 /drone/src

也就是 node_modules 的目录为 /drone/src/node_modules

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

使用数据卷必须开启 Trusted 权限。 Trusted 权限需要管理员用户设置

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

第一次构建会在宿主机中挂载 node_modules 数据,之后再构建就可以省去了 npm install 执行时间,大大提高了构建速度

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(下)

构建镜像

代码编译完毕后,下一个操作就是制作镜像并推送仓库了。

Drone 社区中提供了 plugins/docker 镜像插件用于构建镜像并将镜像直接推送到镜像仓库。

kind: pipeline # 定义一个管道 type: docker # 定义管道类型 name: build # 定义管道名称 - name: build-image # 步骤名称 image: plugins/docker # 使用镜像 depends_on: [build-project] # 依赖步骤 settings: # 当前设置 username: XXXXXX # 账号名称 password: XXXXXX # 账号密码 dockerfile: deploy/Dockerfile # Dockerfile地址, 注意是相对地址 repo: yxs970707/deploy-web-demo # 镜像名称 tags: # 镜像标签 - latest - 1.0.2

settings 属性是配置账号、密码、镜像名称等操作的属性,这是 Drone 提供的属性。 settings 属性会传给容器 environment 属性。

plugins/docker 其它 settings 可以查询官方文档

在上述配置中使用了两个 Tag,加上了 latest 这个默认 Tag。

PS: 注意,Dockerfile 地址使用了相对路径

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwppxw.html