几天以来,我的团队CI-Server(詹金斯2.7.72-不可更改)在执行git命令时遇到了麻烦,这些命令需要通过詹金斯管道中的shell脚本进行身份验证(例如clone
)。
在服务器上,GIT凭证存储在.git-credential
文件中。当我尝试在标准linux命令行上克隆存储库时,它可以正常工作,并且不要求我提供凭据。因此凭据和服务器/网络配置似乎很好。
如果我在詹金斯管道中运行相同的命令,它将失败并
stage('Clone') {
log.info 'Clone repository..'
sh 'git clone https://org.internal.host.de/scm/git/path/to/Repositoryname'
}
[workspace] Running shell script
+ git clone https://org.internal.host.de/scm/git/path/to/Repositoryname
Cloning into 'Repositoryname'...
fatal: could not read Username for 'https://org.internal.host.de': No such device or address
根据其他SO-Threads,这意味着脚本无法访问存储文件。遗憾的是,大多数线程都与Github结合使用,但对我们而言并非如此。我们将组织内部服务器用于CI和GIT。
当使用jenkins内置凭据时(例如使用SharedLib或通过GIT-Plugin克隆存储库),它可以正常工作-另一个提示使我认为pipleline无法再访问git-credentials文件。
CI服务器是否已更改?我不知道。我和我的团队没有更改任何配置。如果网络管理员会更改他们不告诉的任何内容,但是由于克隆本身有效,所以我认为这没有问题。唯一的“可见”区别是11月已经去了12月在这里...在11月30日,工作仍然可以正常进行,但是在12月3日的下一次运行中却失败了。
有什么建议吗?
编辑:在回答Rich Duncan之后,我将发布第二个示例以使我的问题更清楚
我的管道使用git-pipeline-plugin克隆了仓库。之后,我想手动执行GIT命令,例如fetch
。
stage('Clone') {
log.info 'Clone repository..'
git(
branch: 'master',
credentialsId: 'myGitCredentials',
url: 'https://org.internal.host.de/scm/git/path/to/Repositoryname'
)
// Fetch all Tags
sh 'git fetch --all --tags --prune'
}
由于shell步骤(sh 'git fetch ...'
)中的git命令需要凭据,因此我将凭据存储在git-credentials-store中。直到几天前,它仍然可以正常工作。现在由于管道无法读取主机的用户名而中断。
答案 0 :(得分:0)
在没有任何帮助者的情况下,git希望提示您输入凭据信息。如果您使用git step documented in the pipeline steps reference,则可以在Jenkins中定义凭据,并将凭据ID传递到步骤,您的存储库将被克隆到工作空间中。
基于更新后的示例-如果您查看由git插件创建的git命令,您会发现它不会在任何地方都可以再次使用凭据信息-因此使用git的sh步骤提取将没有可用于正常运行的凭据。我建议: