我正在使用Jenkins Pipeline执行一个复杂的空间数据迁移。Jenkins在windows服务器上作为服务运行。我们所有的脚本,包括Groovy主脚本都位于GIT中。我遇到的问题是,除非启动Jenkins服务的用户在Azure Devops中有帐户,否则管道配置页面在访问GIT存储库时出现问题。
如果Jenkins服务是由一个在Devops没有帐户的用户启动的,那么在作业配置页面上会显示以下错误消息:
无法连接到存储库:命令"git.exe ls remote-h--https://xxxxxxx.visualstudio.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/_git/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxHEAD"返回状态代码128:标准输出:stderr:登录失败,请使用ctrl+c取消基本凭据提示。致命:"的身份验证失败https://xxxxxxx.visualstudio.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/_git/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
错误信息屏幕
"凭据"下拉列表中提到的帐户在某种程度上被忽略了。实际上,我预计詹金斯会尝试使用此帐户立即联系GIT。
如果我使用上面在凭据下拉列表中给出的相同帐户启动Windows服务,Jenkins不会在此处显示错误消息,并且可以正确启动Jobs。
除了用Devops帐户启动Jenkins Windows服务之外,有人可能有其他解决方案吗?
看起来GitSCM插件完全忽略了提供的凭据。可能的原因是Jenkins无法使用集成安全性对Azure DevOps进行身份验证。其中一种解释是,我们将无法使用Microsoft ID进行身份验证,因为Jenkins无法获得加密的令牌。
对我来说,解决这个问题最简单的方法是创建一个个人访问令牌,Jenkins Pipeline进程将使用该令牌访问代码库。个人访问令牌可以在令牌页面上创建。
生成的令牌将用作特殊凭据的密码,该凭据将访问Azure DevOps的GIT存储库。此用户将保存在Jenkins Credentials:中
- 用户名:"token">
- 密码:在"个人访问令牌"页面上收到的令牌值
使用ssh-url克隆tfs-auth或将其切换为basic。Jenkins无法使用集成安全性来验证