Drone构建过程自动清理产生镜像

Drone构建过程自动清理产生镜像

       最近一次提交代码,构建项目的时候,发现构建失败,一看失败原因居然是磁盘占满了,执行命令一查看是Docker镜像占满了,通过下一步排查,原来是Drone构建过程产生的镜像导致服务器磁盘被占满,清理掉这些镜像之后,重新提交之后构建成功。

       为了避免服务器磁盘再次因为Drone构建过程留下的镜像占满,所以打算对项目的Drone配置文件修改,再推送镜像到镜像仓库之后,主动清理镜像,这样就保证磁盘不会被占满。

       在推送镜像到镜像仓库使用的插件是plugins/docker,通过查看使用文档是有提供了一个参数purge: true这样来清理镜像,但是通过阅读源码,他在执行清理本次产生的镜像的时候,也会执行

docker system prune -f

这样会把我一些构建过程中使用到的镜像也给删除,这样肯定是不行,并且我一开始也是配置了purge: true,发现没能删除镜像,所以打算弃用这一个配置,直接自己再写一个流程节点,来删除。

       由于他每次推送的时候都会产生一个随机字符串的镜像,格式是字符串+数字,长度是16位,但是我拿不到这个镜像Id,所以只能用到匹配来进行删除,如果你们有更优的方案,可以留言提供给我。

       下面贴出我新加的清理镜像流程节点,我们将这一步放在推送镜像流程的后面,配置如下

#清理构建产生的中间镜像
- name: cleanup
  image: docker:19.03.1
  pull: if-not-exists
  network_mode: host
  volumes:
    - name: docker
      path: /var/run/docker.sock
  environment:
    REPO_URL:
      from_secret: repo
  commands:
    - docker rmi -f $REPO_URL:${DRONE_COMMIT} || true
    - docker rmi -f $REPO_URL:latest || true
    - docker images --format '{{.Repository}}:{{.Tag}}' | grep -E '[a-z0-9]{16}:latest' | xargs -r docker rmi  || true

这一步会清理构建产生的镜像以及推送过程产生的镜像,构建过程产生的镜像名其实就是我们推送的镜像仓库的地址,这个是可以获得的,我将这一步配置在Secrets中,参数名是repo,我在推送镜像步骤也会用到这个配置,算是共用了,这里不写死也可以防止信息泄露。最后一句执行命令是清理推送过程产生镜像,这里是根据产生的规则进行匹配,通过测试提交发现,这样是可以清理本次过程产生的镜像。

0条评论

发表评论