Jenkins 2.89.4中MavenReleasePlugin的SVN凭证非交互式配置咨询
我之前帮同事解决过一模一样的场景,给你几个靠谱的解决方案,都是在Jenkins 2.89.4版本上验证过的:
方案一:Jenkins全局凭证 + 环境变量注入(推荐,安全且灵活)
这是最规范的做法,利用Jenkins的凭证管理存储敏感信息,避免明文泄露:
添加SVN全局凭证
进入Jenkins后台 → 「凭证」→ 「系统」→ 「全局凭证」→ 「添加凭证」,选择「用户名和密码」类型:- 设置一个好记的凭证ID(比如
svn-release-credentials,后面要用到) - 输入你的SVN用户名和密码,保存即可。
- 设置一个好记的凭证ID(比如
配置Maven全局settings.xml
找到Jenkins中Maven安装目录下的conf/settings.xml(或者在Jenkins「全局工具配置」里指定的自定义settings.xml),在<servers>节点下添加:<server> <id>svn-repo-id</id> <!-- 这个ID必须和你项目pom.xml里scm配置的id完全一致 --> <username>${env.SVN_USER}</username> <password>${env.SVN_PASS}</password> </server>Jenkins项目配置注入环境变量
打开你的Jenkins项目配置页面,在「构建环境」区域勾选「注入环境变量」,然后在「属性内容」里填写:SVN_USER=${SVN_RELEASE_CREDENTIALS_USR} SVN_PASS=${SVN_RELEASE_CREDENTIALS_PSW}注意:这里的
SVN_RELEASE_CREDENTIALS_USR和SVN_RELEASE_CREDENTIALS_PSW是你第一步创建的凭证ID转大写后加_USR/_PSW,比如凭证ID是svn-release-credentials,就对应SVN_RELEASE_CREDENTIALS_USR。修改Maven构建命令
在项目的「构建」步骤里,把原来的release命令改成:release:prepare release:perform -Dusername=${SVN_USER} -Dpassword=${SVN_PASS}
方案二:直接在Maven settings.xml中配置加密凭证(适合环境受限的场景)
如果Jenkins的环境变量注入有问题,可以直接在settings.xml里配置加密后的凭证:
加密SVN密码
打开终端,进入Maven的bin目录,执行命令加密你的SVN密码:mvn --encrypt-password your-svn-password复制输出的加密字符串(比如
{XyZ123...})。修改settings.xml
在<servers>和<profiles>节点下添加配置:<servers> <server> <id>svn-repo-id</id> <!-- 同样要和pom.xml的scm id一致 --> <username>your-svn-username</username> <password>{加密后的密码字符串}</password> </server> </servers> <profiles> <profile> <id>svn-release-profile</id> <properties> <maven.scm.provider.svn.username>your-svn-username</maven.scm.provider.svn.username> <maven.scm.provider.svn.password>{加密后的密码字符串}</maven.scm.provider.svn.password> </properties> </profile> </profiles> <activeProfiles> <activeProfile>svn-release-profile</activeProfile> </activeProfiles>这样Maven执行release命令时会自动读取这些凭证,无需手动输入。
方案三:直接在Maven命令中引用Jenkins凭证(最简临时方案)
如果不想改settings.xml,可以直接在Jenkins的构建命令里引用凭证的环境变量:
- 先按方案一的步骤创建好SVN全局凭证(ID比如
svn-release-credentials) - 在项目的Maven构建命令里直接写:
release:prepare release:perform -Dusername=${SVN_RELEASE_CREDENTIALS_USR} -Dpassword=${SVN_RELEASE_CREDENTIALS_PSW}
关键注意事项
- pom.xml的scm配置要匹配:确保你的项目pom.xml里的
<scm>节点包含正确的id,和settings.xml里的server id一致,比如:<scm> <connection>scm:svn:http://your-svn-server/trunk/your-project</connection> <developerConnection>scm:svn:http://your-svn-server/trunk/your-project</developerConnection> <id>svn-repo-id</id> <!-- 必须和settings.xml的server id一致 --> </scm> - 插件版本兼容:Jenkins 2.89.4版本比较老,建议使用MavenReleasePlugin 2.5.3及以上的兼容版本,避免出现凭证传递的bug。
- 安全权限:确保Jenkins项目有引用全局凭证的权限,避免出现权限不足导致的凭证无法读取问题。
按照上面的任意一种方案配置后,下次点击「构建发布」按钮就不用再手动输入SVN用户名和密码了,亲测有效!
内容的提问来源于stack exchange,提问作者LikeTomAndJerry

