Drone相关知识

526 阅读5分钟

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  

相关概念介绍

  1. Drone Volume Cache 插件相比于直接使用 volumes 缓存,有以下优点: 可以在缓存数据之前验证数据的完整性,以确保缓存不会因为错误的构建导致不完整或损坏。 可以在构建过程中监视缓存的使用情况,并提供实时日志,以便诊断缓存问题。 支持多种存储后端,包括 S3、GCS、Azure Blob Storage、MinIO 等,可以根据实际情况选择最适合的存储方案。 因此,使用 Drone Volume Cache 插件可以提高缓存的可靠性和可用性,并且方便管理和监控。

  2. 在 Drone Volume Cache 插件中,restoremount 分别用于指定缓存的恢复和挂载。 restore 用于指定在缓存中查找指定的缓存目录并将其恢复到本地目录。在 Drone 任务执行时,如果发现需要使用缓存,就会通过 restore 来恢复缓存。如果没有找到对应的缓存,就会跳过该步骤。 mount 则是用于指定将本地目录挂载到容器中的路径。在 Drone 任务执行时,通过 mount 将本地目录挂载到容器中,使得容器可以读取和写入该目录。这样就可以使用缓存目录中保存的文件,也可以将新生成的

  3. 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中的用户设置中的授权应用中,删除旧的令牌解决

1681722893110.jpg

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 1681727959550.jpg