问题描述
我正在处理一个项目,希望标记或提供版本号。当合并发生并且CICD成功运行时,我希望gitlab在gitci.yml文件中标记V 1.0、1.1…etc。
解决方法
您可以使用此类工具-semantic release。它通过提交前缀自动检测要增加的版本(主要,次要,补丁)。它不仅可以更新gitlab标签,还可以发送松弛通知,更新版本文件或任何自定义逻辑
示例设置看起来像这样(完整的示例链接将在答案的结尾)
-
.gitlab-ci.yml
文件
Build Release:
image: node:dubnium
stage: build release
script:
- npm i semantic-release @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/gitlab @semantic-release/git @semantic-release/npm @semantic-release/release-notes-generator semantic-release-slack-bot
- npx semantic-release
only:
- master
except:
refs:
- tags
variables:
- $CI_COMMIT_TITLE =~ /^RELEASE:.+$/
-
.releaserc.yaml
文件(与.gitlab-ci.yml处于同一级别)
branches: ['master']
ci: true
debug: true
dryRun: false
tagFormat: '${version}'
# Global plugin options (will be passed to all plugins)
preset: 'conventionalcommits'
gitlabUrl: 'http://gitlab.mycomany.com/' # your gitlab url
slackWebhook: 'https://slack.xxx.com/hooks/q3dtkec6yjyg9x6616o3atgkkr' # if you need slack notifies
# Responsible for verifying conditions necessary to proceed with the release:
# configuration is correct,authentication token are valid,etc...
verifyConditions:
- '@semantic-release/changelog'
- '@semantic-release/git'
- '@semantic-release/gitlab'
- 'semantic-release-slack-bot'
# Responsible for determining the type of the next release (major,minor or patch).
# If multiple plugins with a analyzeCommits step are defined,the release type will be
# the highest one among plugins output.
# Look details at: https://github.com/semantic-release/commit-analyzer#configuration
analyzeCommits:
- path: '@semantic-release/commit-analyzer'
# Responsible for generating the content of the release note.
# If multiple plugins with a generateNotes step are defined,# the release notes will be the result of the concatenation of each plugin output.
generateNotes:
- path: '@semantic-release/release-notes-generator'
writerOpts:
groupBy: 'type'
commitGroupsSort: 'title'
commitsSort: 'header'
linkCompare: true
linkReferences: true
# Responsible for preparing the release,for example creating or updating files
# such as package.json,CHANGELOG.md,documentation or compiled assets
# and pushing a commit.
prepare:
- path: '@semantic-release/changelog'
- path: '@semantic-release/git'
message: 'RELEASE: ${nextRelease.version}'
assets: ['CHANGELOG.md']
# Responsible for publishing the release.
publish:
- path: '@semantic-release/gitlab'
success:
- path: 'semantic-release-slack-bot'
notifyOnSuccess: true
markdownReleaseNotes: false
fail:
- path: 'semantic-release-slack-bot'
notifyOnFail: true
- 要对其进行测试,请尝试进行调试提交:
$ git commit --allow-empty -m "fix: fake release"
(将增加路径版本)
可以使用完整的示例here on gitlab