Drone文件挂载和环境变量提高构建速度

Drone文件挂载和环境变量提高构建速度

       之前跟大家分享过如何使用Drone自动化部署Go,但由于没有使用缓存以及每次都重复拉取镜像,导致整改部署过程会很慢,昨晚对构建流程进行了一次优化,加入了缓存以及环境变量,最终实现速度上的提升,今天跟大家分享Drone自动化部署通过文件挂载和环境变量提高构建速度。

       一、创建宿主机项目缓存目录

       我们在Drone工作的服务器上创建一个缓存目录,假设地址为/home/drone/cache/project-go-api/cache。

       二、设置挂载

       我们在.drone.yml文件设置挂载目录,配置如下

kind: pipeline
type: docker
name: project-go-api

#设置挂载
volumes:
  #Go编译缓存
  - name: pkgdeps
    host:
      path: /home/drone/cache/project-go-api/cache
  #Docker环境
  - name: docker
    host:
      path: /var/run/docker.sock
  #Docker配置
  - name: docker-daemon
    host:
      path: /etc/docker/daemon.json

这里我们分别命名了Go包工作目录、docker环境目录。

       三、初始化缓存

kind: pipeline
type: docker
name: project-go-api

#设置挂载
volumes:
  #Go编译缓存
  - name: pkgdeps
    host:
      path: /home/drone/cache/project-go-api/cache
  #Docker环境
  - name: docker
    host:
      path: /var/run/docker.sock
  #Docker配置
  - name: docker-daemon
    host:
      path: /etc/docker/daemon.json
#构建步骤
steps:
#设置缓存
- name: clean
  image: docker:19.03.1
  network_mode: host
  # 将宿主机的 docker和配置挂载到运行的 docker 容器中,那么在容器中运行 docker 命令时,等同于在宿主机中运行该docker 命令
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: images
      path: /images
    - name: docker-daemon
      path: /etc/docker/daemon.json

       四、构建使用缓存

#构建镜像
- name: build
  image: golang:latest
  pull: if-not-exists
  volumes:
    - name: pkgdeps
      path: /go/pkg
  environment:
    GOPROXY: "https://goproxy.cn,direct"  # 懂的都懂
  commands:
    - CGO_ENABLED=0 go build -o project-go-api

构建镜像时,我们设置服务器目录映射到/go/pkg目录,实现缓存加载。

       五、打包镜像使用缓存

#推送镜像至镜像仓库
- name: publish
  image: plugins/docker
  pull: if-not-exists
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: pkgdeps
      path: /cache
  mirrors:       #镜像仓库加速地址,不需要加速,可以直接删除
    from_secret: registry_mirrors
  settings:
    purge: false
    registry:   #镜像仓库域名
      from_secret: registry
    repo:        #镜像仓库详细地址
      from_secret: repo
    tags:
      - latest
    username:    #镜像仓库账户
      from_secret: registry_user_name
    password:    #镜像仓库密码
      from_secret: registry_password

推送镜像时,我们分别使用宿主机的docker环境以及将宿主机缓存到/cache目录。

       六、完整配置构建

       经过上面分析,下面我们直接贴出完整的构建目录

kind: pipeline
type: docker
name: project-go-api

#设置挂载
volumes:
  #Go编译缓存
  - name: pkgdeps
    host:
      path: /home/drone/cache/project-go-api/cache
  #Docker环境
  - name: docker
    host:
      path: /var/run/docker.sock
  #Docker配置
  - name: docker-daemon
    host:
      path: /etc/docker/daemon.json
#构建步骤
steps:
#设置缓存
- name: clean
  image: docker:19.03.1
  network_mode: host
  # 将宿主机的 docker和配置挂载到运行的 docker 容器中,那么在容器中运行 docker 命令时,等同于在宿主机中运行该docker 命令
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: images
      path: /images
    - name: docker-daemon
      path: /etc/docker/daemon.json
#构建镜像
- name: build
  image: golang:latest
  pull: if-not-exists
  volumes:
    - name: pkgdeps
      path: /go/pkg
  environment:
    GOPROXY: "https://goproxy.cn,direct"  # 懂的都懂
  commands:
    - CGO_ENABLED=0 go build -o project-go-api
#推送镜像至镜像仓库
- name: publish
  image: plugins/docker
  pull: if-not-exists
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: pkgdeps
      path: /cache
  mirrors:       #镜像仓库加速地址,不需要加速,可以直接删除
    from_secret: registry_mirrors
  settings:
    purge: false
    registry:   #镜像仓库域名
      from_secret: registry
    repo:        #镜像仓库详细地址
      from_secret: repo
    tags:
      - latest
    username:    #镜像仓库账户
      from_secret: registry_user_name
    password:    #镜像仓库密码
      from_secret: registry_password
#部署镜像服务
- name: ssh commands
  image: appleboy/drone-ssh
  pull: if-not-exists
  settings:
    host:
      from_secret: ssh_ip
    port: 22
    username:
      from_secret: ssh_user_name
    password:
      from_secret: ssh_password
    script:
      - cd /home/dockerConfig/project/go-gin
      - docker-compose pull && docker-compose up --force-recreate -d
      - docker rmi $(docker images | grep go-fblsj/person-api | grep none | awk  '{print $3}')

下面贴出构建速度,直接压缩到35秒

微信截图_20220622173319.png

1条评论

  • drone 2022-06-22 19:01:01

    涨知识了!

    回复

发表评论