在詹金斯管道作业中使用git存档而不是具有凭据的克隆

时间:2019-03-25 16:10:08

标签: git jenkins jenkins-pipeline clone git-archive

在我的Jenkins管道工作中,我通常在工作开始时就克隆git repo

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服务器上

2 个答案:

答案 0 :(得分:0)

没有一种简单的方法可以在自动化脚本中为ssh使用用户名和密码。 OpenSSH仅在TTY上提示输入用户名和密码,除非您使用expect之类的东西,否则您不会在自动脚本中输入用户名和密码。而且,即使您可以执行此操作,大多数Git服务器也只会接受SSH密钥以通过SSH进行身份验证。

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

或者,您可以尝试浅表克隆(例如git clone --depth 1)。如果要托管自己的Git服务器实例,请注意,尽管浅克隆可能会占用大量计算资源,所以如果您使用大量克隆,则可能最终对实例进行DoSing。

答案 1 :(得分:0)

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

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