Docker
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秒

涨知识了!
回复