可以使用 Gitea 测试推送 Webhook,进行重复测试。
查询具体执行信息,会发现其中大部分时间都浪费在了 npm install 命令。
这是因为每一个步骤都是在一个进程内执行的,每一次执行都是一个新进程,
但是往往会有挂载数据这种情况,针对这种需求,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
使用数据卷必须开启 Trusted 权限。 Trusted 权限需要管理员用户设置
第一次构建会在宿主机中挂载 node_modules 数据,之后再构建就可以省去了 npm install 执行时间,大大提高了构建速度
构建镜像代码编译完毕后,下一个操作就是制作镜像并推送仓库了。
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.2settings 属性是配置账号、密码、镜像名称等操作的属性,这是 Drone 提供的属性。 settings 属性会传给容器 environment 属性。
plugins/docker 其它 settings 可以查询官方文档
在上述配置中使用了两个 Tag,加上了 latest 这个默认 Tag。
PS: 注意,Dockerfile 地址使用了相对路径