在 jenkins 管道作业中使用 git archive 而不是 clone with credentials

Use git archive instead of clone with credentials in jenkins pipeline job

在我的 Jenkins 管道工作中,我曾经像那样在工作开始时克隆 git 回购协议

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

请注意,我需要凭据。

为了减少执行时间和下载的数据大小,我想使用 git archive 而不是 git clone

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

如果我完成了正确的 ssh-key 配置,前面的命令就可以工作。在我的服务器上不是这样,所以我需要使用凭据。

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

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

您没有说明您使用的 Git 服务器,因此我无法提供更多有用的详细信息,但您的选择基本上是使用 SSH 密钥或使用您必须的凭据访问 Git 服务器的 HTTPS API 接口,以获取供您使用的存档。例如,如果您使用 GitHub 或 GitHub Enterprise,则有 an API URL to fetch tarballs.

或者,您可以尝试浅克隆(例如 git clone --depth 1)。如果您要托管自己的 Git 服务器实例,请注意,尽管浅克隆可能需要大量计算,因此如果您使用大量它们,您最终可能会拒绝访问您的实例。

解决方法是在Jenkins Pipeline中使用sshagent函数

sshagent(['SSH_JENKINS_CREDENTIALS_FOR_GIT']) {
    sh("git archive --format=tar --remote git@myserver.com:myrepo master |tar xf -")
}