Jenkins配置ssh-agent执行gitflow命令报Git身份未配置错误
gitflow-maven-plugin执行release-start等指令时,会自动完成创建分支、提交版本变更、打标签等Git操作,所有Git提交动作必须携带合法的user.name和user.email身份信息。当前执行环境既没有配置全局Git身份,也没有仓库级身份配置,因此触发身份校验报错。
以下方案均不会修改节点全局Git配置,可根据实际场景选择:
方案1:配置当前仓库的局部Git参数(通用性最高)
在执行Maven命令前,给当前流水线拉取的代码仓库设置仅对本仓库生效的Git身份配置,不会修改用户目录下的全局.gitconfig,配置仅写入当前工作区仓库的.git/config文件,任务结束工作区回收后配置自动消失,完全符合不允许配置全局Git参数的要求。
修改后的Jenkinsfile示例:
node { sshagent (credentials: ['deploy-dev']) { // 不加--global参数默认是仓库级配置,不影响全局 sh 'git config user.name "Jenkins CI"' sh 'git config user.email "jenkins-ci@internal.com"' sh 'mvn gitflow:release-start' } }
配置中的用户名、邮箱仅用于满足Git提交校验规则,如果有提交溯源需求可以替换为团队实际的CI账号信息,无溯源需求只要格式合法即可。
方案2:通过gitflow-maven-plugin参数直接传参(无Git配置侵入)
你当前使用的1.18.0版本gitflow-maven-plugin本身支持直接指定提交作者信息,不需要修改任何Git配置,直接在Maven命令中传入参数即可:
node { sshagent (credentials: ['deploy-dev']) { sh ''' mvn gitflow:release-start \ -Dgitflow.commitAuthorName="Jenkins CI" \ -Dgitflow.commitAuthorEmail="jenkins-ci@internal.com" ''' } }
如果是项目固定使用,也可以把参数直接写到项目pom.xml的插件配置段,不需要每次在命令行传参:
<plugin> <groupId>com.amashchenko.maven.plugin</groupId> <artifactId>gitflow-maven-plugin</artifactId> <version>1.18.0</version> <configuration> <commitAuthorName>Jenkins CI</commitAuthorName> <commitAuthorEmail>jenkins-ci@internal.com</commitAuthorEmail> <!-- 原有gitflow其他配置保持不变 --> </configuration> </plugin>
方案3:依赖Jenkins Git插件自动配置
如果流水线通过Jenkins官方Git插件拉取代码,可以在checkout步骤开启Configure Git Identity选项,插件会自动给当前拉取的仓库设置局部Git身份,使用Jenkins系统配置中预设的Git用户信息,同样不会修改节点全局Git配置。该方案依赖插件配置,灵活度低于前两种方案。
内容的提问来源于stack exchange,提问作者m19v

