Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github 从Jenkins作业外部化密码_Github_Jenkins_Jenkins Plugins - Fatal编程技术网

Github 从Jenkins作业外部化密码

Github 从Jenkins作业外部化密码,github,jenkins,jenkins-plugins,Github,Jenkins,Jenkins Plugins,我有一份Jenkins的工作,我使用Git插件从github中提取代码。由于网络限制,我唯一能做的就是在git项目url中使用用户名和密码进行https调用 https://${username}:${passsword}@github.com/${project}.git ${project}正在作业级别上进行参数化,但${username}和${password}当前已在url中硬编码。我想以某种方式将其外部化为某种全局配置。我尝试了几种方法,如全局属性、系统环境等,但都不起作用。詹金斯既

我有一份Jenkins的工作,我使用Git插件从github中提取代码。由于网络限制,我唯一能做的就是在git项目url中使用用户名和密码进行https调用

https://${username}:${passsword}@github.com/${project}.git
${project}
正在作业级别上进行参数化,但
${username}
${password}
当前已在url中硬编码。我想以某种方式将其外部化为某种全局配置。我尝试了几种方法,如全局属性、系统环境等,但都不起作用。詹金斯既没有替换
${username}
也没有替换
${password}
。唯一可行的方法(到目前为止,对我来说)是将其作为一个作业参数,但我想将其作为我所有作业的全局参数

有什么想法吗?谢谢

想法#1:


我通常在工作中使用公钥/私钥对。我不完全理解它是如何工作的,但是,当我从我的工作站进行Git克隆或者Jenkins进行Git克隆时,它不需要密码,因为auth cert可以处理它。因此,脚本中的Git命令,包括Jenkins的“Git plugin”克隆,都可以在没有密码的情况下工作。

类似于djangofan的回答:

最好的方法是使用SSH密钥。生成一个SSH公钥/私钥,然后将私钥放在~/.SSH/config中的每个Jenkins从机上。然后将公钥添加到GitHub帐户配置文件中。GitHub在这方面有一个页面-

更好的方法是使用部署键。基本上与上面相同,但不是将SSH公钥添加到用户帐户,而是将其添加到repo的部署密钥中-

一旦您完成了此所有设置,而不是使用https://${username}:${passsbrow}@github.com/${project}.git,您就可以使用SSH URL进行克隆,git@github.com:${project}.git

我还避免在每个从机和开发人员机器上使用相同的SSH密钥对。使用单独的密钥对作为部署密钥,以便在其中一个密钥受损时可以单独撤销它们。开发人员还负责生成他们自己的密钥对并将其添加到他们的帐户中(而不是作为部署密钥)


根据经验,如果您想继续使用HTTPS路由,我发现SSH部署密钥在CI环境中更易于管理。

您可以使用存储用户名和密码凭据。配置作业时,请在Git配置中选择凭据。存储库URL将不再包含用户名和密码。AFAIK这需要使用最新的Git和Git客户端插件安装最新的Jenkins

我使用一个使用固定存储库路径的Git HTTP URL成功地实现了这一点。到目前为止,我未能像您所做的那样将存储库作为变量提供


请注意,如果您在Jenkins中配置了代理,那么当前的Git客户端插件版本1.4.6不尊重您的无代理主机设置。这里有一个补丁可用:

很遗憾,我不能使用SSH作为Jenkins运行的服务器,因为它对Internet的访问有限。不过,HTTPS解决方案的Thx。似乎是我想要的。我会试着玩一下,让你知道结果。