在jenkins-pipeline中访问git-credential-store不再起作用

时间:2018-12-05 13:44:30

标签: git jenkins jenkins-pipeline

几天以来,我的团队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中。直到几天前,它仍然可以正常工作。现在由于管道无法读取主机的用户名而中断。

1 个答案:

答案 0 :(得分:0)

在没有任何帮助者的情况下,git希望提示您输入凭据信息。如果您使用git step documented in the pipeline steps reference,则可以在Jenkins中定义凭据,并将凭据ID传递到步骤,您的存储库将被克隆到工作空间中。

基于更新后的示例-如果您查看由git插件创建的git命令,您会发现它不会在任何地方都可以再次使用凭据信息-因此使用git的sh步骤提取将没有可用于正常运行的凭据。我建议:

  1. 研究使用通用SCM步骤(您可以使用snippet工具来体会一下),并查看是否可以将其配置为也获取所有标签。
  2. 研究使用withCredentials将凭据信息传递到sh步骤。