Context
我目前正在做一个使用Jenkins进行持续集成的CMake项目。
这个CMake项目包括许多库,它使用FetchContent检索这些库。基本上,我们选择使用FetchContent,而不是使用Git子模块。
由于git插件,克隆项目的Jenkins和该项目的凭据很容易传递。
问题
问题是git插件没有像在克隆过程中那样传递凭证,在我的CMake项目的配置阶段,因此配置失败。我有这些日志
[1/9] Performing download step (git clone) for '<my_module>-populate'
Cloning into '<my_module>'...
fatal: could not read Username for 'https://<my_private_server>': No such device or address
解决方案的开始?
经过多次搜索,我开始使用withCredentials
函数,这使得我的舞台看起来像这样:
stage('Project Configure') {
steps {
withCredentials([gitUsernamePassword(credentialsId: '<CredentialID>']) {
sh "cmake --preset=MyPreset"
}
}
}
但这并不能完全解决问题,因为只传递了用户名,而没有传递密码。日志包括:
[1/9] Performing download step (git clone) for '<my_module>-populate'
Cloning into '<my_module>'...
****: 3: ?!: not found
error: unable to read askpass response from ****
fatal: could not read Password for 'https://<my_user>@<my_private_server>': terminal prompts disabled
限制
我也想过在Git仓库中使用SSH链接而不是HTTPS链接,但这不起作用,因为服务器上没有该功能。
2条答案
按热度按时间mnemlml81#
最后,经过多次搜索,我找到了解决方案(或者更确切地说是错误)。
你要做的就是:
我遇到的错误是我的密码包含特殊字符(特别是
&
),并且它们被解释(链接到this issue?).我只需要更改密码就可以正常工作了。
a0zr77ik2#
要解决在Jenkins中将凭据传递到CMake项目的配置阶段的问题,您可以考虑以下步骤:
1.使用withCredentials函数:修改Jenkins管道阶段,使用withCredentials函数传递用户名和密码。按如下方式更新阶段:
1.使用askpass脚本:创建一个askpass脚本(例如askpass.sh),当Git提示输入密码时,它会提供密码。脚本应包含以下内容:
确保在Jenkins管道步骤中更新askpass脚本的路径。
1.授予执行权限:确保askpass脚本具有执行权限。您可以通过在终端中运行以下命令来执行此操作:
1.配置Git使用askpass脚本:通过将GIT_ASKPASS环境变量设置为askpass脚本的路径,配置Git使用askpass脚本。该步骤被包括在以上修改的流水线阶段中。
通过这些修改,用户名和密码将在CMake项目的配置阶段传递给Git clone命令。这应该允许配置继续进行,而不会遇到身份验证问题。
注意:如果SSH链接在服务器上不可用,使用带有HTTPS的askpass脚本方法应该可以提供一个解决方案。