自动Tag与Changelog
# 介绍
我们假定一个项目的工作流是这样的:
从主分支 master 拉出版本分支,每当要发版本时,版本分支合并到 master 并在 master 上打 tag
此时我们希望能在 master 有代码提交时自动打 tag,自动生成 changelog 提交到 master。
当然实际的工作流可能不是这样,我们以此为例展示下如何用用多个插件实现该效果:
# 示例
# 设置git账号信息,供不同流水线复用
.git-set-credential: &git-set-credential
name: set token
image: tencentcom/git-set-credential:latest
imports: https://xxx/env.yml
settings:
userName: coding
userEmail: coding@coding.com
loginUserName: coding
loginPassword: $PRIVATE_TOKEN
# master有新代码时自动打tag
master:
push:
- ifModify:
# CHANGELOG.md文件修改会跳过流水线执行,避免陷入循环提交
- "!(CHANGELOG.md)"
stages:
- *git-set-credential
# 打tag并提交
- name: tag
image: tencentcom/git-auto-tag:latest
settings:
tagFormat: v\${version}
# 有新tag时,自动生成changelog并提交到分支
v*:
tag_push:
- stages:
# 生成changelog
- name: changelog
image: codingci/changelog
settings:
discard: true
- name: show changelog
script: cat CHANGELOG.md
- *git-set-credential
# 提交changelog到指定分支
- name: commit changelog
image: tencentcom/git-commit:latest
settings:
branchName: auto-tag-branch
# 创建 changelog 提交分支到master的mr
auto-tag-branch:
push:
- stages:
- name: make mr
image: codingci/make-mr:latest
imports: https://codingcorp.cnb.codingcorp.net/p/folger-project/d/folger-test/git/tree/master/env.yml
settings:
token: $PRIVATE_TOKEN
target: master
title: changelog mr
description: merge changelog to master
# 解读
以上示例用到了五个插件:
tencentcom/git-set-credential
: 设置 git 相关账号信息,供后续提交代码用tencentcom/git-auto-tag
: 根据提交信息自动打 tagcodingci/changelog
: 根据历史提交信息生成 changelogtencentcom/git-commit
: 将生成的 changelog 提交到分支 auto-tag-branchcodingci/make-mr
: 创建分支 auto-tag-branch 到 master 的 mr
我们以时间为顺序说明下各流水线流程:
- master 有代码更新,触发执行 master push 流水线 A
- A 流水线设置 git 相关账号信息
- A 流水线自动打 tag(举例:tag 名 v1.3.0) 并推送到远端
- 有新的 tag,触发执行 v* 下 tag_push 流水线 B
- B 流水线生成 changelog
- B 流水线设置 git 相关账号信息
- B 流水线提交 changelog 文件到分支 auto-tag-branch
- auto-tag-branch 有代码更新,触发执行 auto-tag-branch 下 push 流水线 C
- C 流水线创建 auto-tag-branch 到 master 的 mr
- 此时可以手动合并 mr 或者用插件自动合并mr
- 此时 master 又有更新,但更新文件是 CHANGELOG.md,未命中 ifModify,跳过 push 流水线
此流水线稍有复杂,可根据情况灵活使用各插件达到想要的效果。
← MR工作流自动化 利用复用简化配置文件 →