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) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《DRONE构建过程自动清理产生镜像》
文章链接:https://www.xlin.cn/xlbk/22736.html
分享到: 更多 (0)

热门文章

评论 抢沙发

切换注册

登录

忘记密码 ?

切换登录

注册