2

在我的 Jenkins 管道工作中,我曾经像这样在工作开始时克隆 git repo

cleanWs()
git branch: 'master', credentialsId: 'SSH_GIT', url: 'git@myserver.com:myrepo'

请注意,我需要凭据。

为了减少执行时间和下载数据大小,我想git archivegit clone.

sh("git archive --format=tar --remote git@myserver.com:myrepo master |tar xf -")

如果我完成了正确的 ssh-key 配置,则前面的命令有效。我的服务器上不是这种情况,所以我需要使用凭据。

如何使用 Jenkins 定义的凭据存档而不是克隆 repo?Git 安装在 gitolite 服务器上

4

2 回答 2

2

解决方案是在 Jenkins Pipeline 中使用 sshagent 功能

sshagent(['SSH_JENKINS_CREDENTIALS_FOR_GIT']) {
    sh("git archive --format=tar --remote git@myserver.com:myrepo master |tar xf -")
}
于 2019-03-28T09:37:28.677 回答
0

没有简单的方法可以ssh在自动化脚本中使用用户名和密码。OpenSSH 仅在 TTY 上提示输入用户名和密码,除非您使用类似expect. 此外,即使您可以这样做,大多数 Git 服务器也只会接受 SSH 密钥来通过 SSH 进行身份验证。

你还没有说你正在使用什么 Git 服务器,所以我不能提供更多有用的细节,但你的选择基本上是使用 SSH 密钥或使用你必须访问 Git 服务器的 HTTPS API 接口的凭据获取档案供您使用。例如,如果您使用 GitHub 或 GitHub Enterprise,则有一个 API URL 可以获取 tarballs

或者,您可以尝试浅克隆(例如git clone --depth 1)。如果您托管自己的 Git 服务器实例,请注意,虽然浅层克隆可能是计算密集型的,因此如果您使用大量实例,您最终可能会 DoSing 您的实例。

于 2019-03-27T23:34:14.000 回答