Drone安装使用
docker安装
前置介绍: Server(drone):为 Drone 的管理提供了 Web 页面,用于管理从 Git 上获取的仓库中的流水线任务 Runner(drone-runner):一个单独的守护进程,会轮询 Server,获取需要执行的流水线任务,之后执行
1、先安装drone的web端
#要点:
-e DRONE_USER_CREATE=username:coder,admin:true 设置一个管理员用户(很重要)
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GOGS_SERVER=http://192.168.124.44:3000 \ #gogs地址
--env=DRONE_RPC_SECRET=自定义密钥如(asjdajlk) \ #于下面drone-runner保持一致即可(值自己随便定)
--env=DRONE_SERVER_HOST=192.168.124.44:3080 \ #drone web端地址
--env=DRONE_SERVER_PROTO=http \ #drone访问模式
-e DRONE_USER_CREATE=username:coder,admin:true \ #设置管理员
--publish=3080:80 \
--publish=3441:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2
2、安装drone-runner
docker run --detach \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=192.168.124.44:3080 \ #drone web端地址
--env=DRONE_RPC_SECRET=自定义密钥如(asjdajlk) \
--env=DRONE_RUNNER_CAPACITY=2 \
--env=DRONE_RUNNER_NAME=docker-runner \
--publish=3005:3000 \
--restart=always \
--name=drone-runner \
drone/drone-runner-docker:1
.drone.yml文件以及插件Drone Volume Cache的用法
参考文章1,基本介绍和基本用法
参考文章2,Drone 教程
参考文章3,构建速度优化
(在文章中有不理解的可以试着在上面的参考文章中寻找答案)
每一个步骤的镜像工作路径都在drone/src中(步骤不同,所在的容器环境也不同只是工作路径相同而已,drone-volume-cache插件会在这些容器间加载缓存)
kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: report-cli-pipeline # 定义流水线名称
#声明挂载卷
volumes:
- name: cache #挂载卷名称
host:
path: /root/cache #挂载卷挂载到主机的目录
steps:
- name: restore-cache #步骤名称,读取缓存
image: drillster/drone-volume-cache #使用的镜像
settings:
restore: true #restore: true会将文件从主机复制到容器
mount: #需要缓存的文件夹
- ./.npm-cache
- ./node_modules
volumes: #使用的缓存和容器内挂载目录
- name: cache #使用的缓存名称,和上面对应
path: /cache #把主机命为cache的缓存挂载到/cache下面在容器内挂载的目录
- name: install
pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
image: node:alpine
commands:
- npm config set cache ./.npm-cache --global #设置npm缓存
- npm install
- name: build
pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
image: jarmour/vue-cli:latest
commands:
- npm run build:h5
- name: rebuild-cache #步骤名称,构建缓存
image: drillster/drone-volume-cache
settings:
rebuild: true #把容器内容复制到主机
mount: #先加载缓存
- ./.npm-cache
- ./node_modules
volumes: #再复制到主机
- name: cache
path: /cache
相关概念介绍
-
Drone Volume Cache插件相比于直接使用volumes缓存,有以下优点: 可以在缓存数据之前验证数据的完整性,以确保缓存不会因为错误的构建导致不完整或损坏。 可以在构建过程中监视缓存的使用情况,并提供实时日志,以便诊断缓存问题。 支持多种存储后端,包括 S3、GCS、Azure Blob Storage、MinIO 等,可以根据实际情况选择最适合的存储方案。 因此,使用 Drone Volume Cache 插件可以提高缓存的可靠性和可用性,并且方便管理和监控。 -
在 Drone Volume Cache 插件中,
restore和mount分别用于指定缓存的恢复和挂载。restore用于指定在缓存中查找指定的缓存目录并将其恢复到本地目录。在 Drone 任务执行时,如果发现需要使用缓存,就会通过 restore 来恢复缓存。如果没有找到对应的缓存,就会跳过该步骤。mount则是用于指定将本地目录挂载到容器中的路径。在 Drone 任务执行时,通过mount将本地目录挂载到容器中,使得容器可以读取和写入该目录。这样就可以使用缓存目录中保存的文件,也可以将新生成的 -
npm config set cache命令用于设置npm包的缓存路径。 具体用法为:npm config set cache ,其中为缓存路径。例如:npm config set cache /path/to/cache通过这个命令,我们可以将npm的缓存路径设置为指定的目录,从而避免每次下载和安装包时都从网络上下载,加快包的安装速度,并且可以在多个项目之间共享缓存,节省磁盘空间。不使用npm config set cache也可以从本地找,为什么还用npm config set cache呢?
虽然本地已经有了已下载的安装包,但是如果没有使用npm config set cache,npm仍然需要从远程仓库检查该包的最新版本,并比较本地版本和最新版本,确定是否需要更新。而如果使用npm config set cache,npm将首先检查本地缓存,如果缓存中存在该包的版本,则直接从本地缓存中读取,从而大大提高了安装速度。此外,使用npm config set cache还可以避免频繁地从远程仓库下载包,节省了网络带宽和时间成本。
遇到的问题
1、登录时报错Unauthorized,账号密码是gogs的,确认没错。最后通过在gogs中的用户设置中的授权应用中,删除旧的令牌解决
2、Drone执行流水线一直处于loading状态 请检查drone-runner是否运行正常
#查看日志
docker logs -f drone-runner
创建容器时,参数DRONE_RPC_SECRET 的值务必与创建drone(web端)保持相同
3、Drone untrusted repositories cannot mount host volumes
原因:你的流水线使用了挂载目录
解决方法:
- 取消挂载
- 登录 drone 的用户不是管理员或者在 SETTINGS 中,未勾选 Trusted
4、Drone SETTINGS 页面没有 Trusted
原因:当前账号不是drone的管理员账号,需要在启动docker是指定一个管理员,如果你没有在启动的时候指定
-e DRONE_USER_CREATE=username:coder,admin:true \ #设置管理员
那么你可以直接删除容器,重新启动一个
docker rm -f drone