如何让Semantic Release使用自定义Git用户而非semantic-release-bot?
解决Semantic Release自定义Git签名提交用户的问题
核心原因
你遇到的问题是因为Semantic Release的@semantic-release/git插件(负责版本提交的核心插件)默认会使用内置的semantic-release-bot用户信息,仅在publishCmd脚本中设置全局Git配置无法覆盖这个行为——要么配置优先级不够,要么执行时机不对。
有效解决方法
方法1:直接配置@semantic-release/git插件的用户信息
这是最可靠的方式,直接在Semantic Release的配置中指定提交用户,无需依赖脚本:
在你的Semantic Release配置文件(比如.release.js或package.json的release字段)中,给@semantic-release/git插件添加user选项:
// .release.js示例 module.exports = { plugins: [ // 其他必要插件(如@semantic-release/commit-analyzer、@semantic-release/release-notes-generator) [ "@semantic-release/git", { assets: ["package.json", "CHANGELOG.md"], // 根据你的需求调整提交的文件 message: "chore(release): ${nextRelease.version}\n\n${nextRelease.notes}", user: { name: process.env.GIT_USERNAME, email: process.env.GIT_EMAIL } } ], // 你的@semantic-release/exec插件配置 [ "@semantic-release/exec", { publishCmd: "your-shell-script.sh" } ] ] };
同时,在脚本中保留签名密钥的配置(去掉--global,改用仓库级配置):
# your-shell-script.sh内容 git config user.signingKey "$GIT_SIGNING_KEY" git config commit.gpgsign true # 确保自动签名提交
方法2:改用仓库级Git配置替代全局配置
如果不想修改@semantic-release/git插件配置,可在脚本中去掉--global参数,仅对当前仓库设置用户信息(仓库级配置优先级高于全局):
# 修改后的脚本内容 git config user.name "$GIT_USERNAME" git config user.email "$GIT_EMAIL" git config user.signingKey "$GIT_SIGNING_KEY" git config commit.gpgsign true
这种方式需要确保脚本在Semantic Release执行提交步骤之前运行,可通过@semantic-release/exec的prepareCmd替代publishCmd(prepare阶段在版本提交前执行):
// Semantic Release配置中调整exec插件 [ "@semantic-release/exec", { prepareCmd: "your-shell-script.sh" } ]
额外注意事项
- 确保CI环境中已正确导入GPG签名密钥,否则签名提交会失败。
- 环境变量
GIT_USERNAME、GIT_EMAIL、GIT_SIGNING_KEY需在CI环境中正确配置,确保脚本和插件能读取到。
内容的提问来源于stack exchange,提问作者mstruebing
相关产品推荐
相关产品推荐

