如何在Docker容器中转换.drawio为.png以适配GitLab CI自动化流程
轻量级.drawio转PNG的Docker+GitLab CI实现方案
一、基于Alpine构建轻量转换镜像(最推荐)
Alpine镜像体积远小于Ubuntu,适合CI场景,结合drawio官方CLI工具实现转换:
1. 编写Dockerfile
FROM alpine:3.18 # 安装运行依赖:无头OpenJDK、证书工具、fuse(用于运行AppImage) RUN apk add --no-cache openjdk17-jre-headless ca-certificates wget fuse3 # 下载drawio的CLI AppImage(去drawio官方发布页找对应版本的下载链接替换占位符) RUN wget -O /usr/local/bin/drawio <drawio AppImage下载地址> \ && chmod +x /usr/local/bin/drawio
2. 本地测试转换
构建镜像后,挂载本地目录执行转换:
docker build -t drawio-converter . docker run --rm -v $(pwd):/data drawio-converter drawio --export --format png --output /data/result.png /data/your-diagram.drawio
二、直接使用社区预构建镜像(省事儿)
不想自行构建的话,直接用基于Alpine的lucaswerkmeister/drawio-cli镜像:
docker run --rm -v $(pwd):/data lucaswerkmeister/drawio-cli export --format png --output /data/result.png /data/your-diagram.drawio
三、GitLab CI流水线配置
在项目根目录创建.gitlab-ci.yml,自动完成转换并上传制品:
stages: - convert - store convert_diagrams: stage: convert image: drawio-converter # 替换为自己构建的镜像名,或lucaswerkmeister/drawio-cli script: - mkdir -p converted_pngs # 批量转换所有.drawio文件到指定目录 - drawio --export --format png --output converted_pngs/ *.drawio artifacts: paths: - converted_pngs/ expire_in: 30d # 按需调整制品过期时间 store_artifacts: stage: store dependencies: - convert_diagrams script: - echo "转换后的PNG已作为制品上传" artifacts: paths: - converted_pngs/ expire_in: 90d # 可设为never实现永久存储
关键细节
- 轻量优势:Alpine基础镜像仅5MB左右,加上依赖后最终镜像体积仅几十MB,远小于Ubuntu镜像。
- CLI参数说明:
--export:开启导出模式--format png:指定输出格式为PNG--output:指定输出目录/文件名- 支持批量转换,用
*.drawio可处理同目录下所有.drawio文件
- GitLab制品:转换后的PNG会自动存储为流水线制品,可在流水线页面下载,也可集成到后续流程中
内容的提问来源于stack exchange,提问作者eXor420
相关产品推荐
相关产品推荐

