Drone 0.8版本:如何实现按Git分支名自动为Docker镜像打标签?
解决Drone 0.8 Docker插件按Git分支自动打标签的问题
我之前刚好帮团队搞定过这个需求,Drone 0.8的Docker插件默认的auto_tag确实只对Tag触发的构建生效,分支构建只会打latest,所以得换个思路实现分支自动打标签,分享两个亲测可行的方案:
方案1:直接用Drone内置环境变量手动指定标签
禁用auto_tag,然后利用Drone提供的DRONE_BRANCH环境变量直接生成标签,配置示例如下:
pipeline: build-and-push: image: plugins/docker repo: your-docker-repo/your-image-name tags: ${DRONE_BRANCH} auto_tag: false # 按需添加 registry、username、password 等认证配置
如果你的分支名包含斜杠(比如feature/user-auth),Docker标签虽然支持斜杠,但有些场景可能不太友好,你可以用Shell替换语法把斜杠换成横杠:
tags: ${DRONE_BRANCH//\//-}
这样feature/user-auth就会变成feature-user-auth标签。
方案2:区分Master分支与其他分支(兼顾latest标签)
如果希望Master分支继续打latest,其他分支打对应分支名,可以用Drone的条件判断拆分两个Docker步骤:
pipeline: # 非Master分支打分支名标签 docker-branch: image: plugins/docker repo: your-docker-repo/your-image-name tags: ${DRONE_BRANCH//\//-} auto_tag: false when: branch: exclude: master # Master分支打latest标签 docker-master: image: plugins/docker repo: your-docker-repo/your-image-name tags: latest auto_tag: false when: branch: master
补充说明
Drone 0.8的Docker插件auto_tag逻辑是:只有当构建由Git Tag触发时,才会自动把Tag名作为镜像标签;分支触发的构建默认只会生成latest,所以要实现分支标签必须手动指定tags参数并关闭auto_tag。
内容的提问来源于stack exchange,提问作者Jay Cee
相关产品推荐
相关产品推荐

