从Jenkins作业外部化密码

时间:2013-11-13 15:45:19

标签: github jenkins jenkins-plugins

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

https://${username}:${passsword}@github.com/${project}.git

${project}正在作业级别进行参数化,但${username}${password}目前已在网址中进行了硬编码。我想以某种方式将它外化到某种全局配置。我尝试了几种方式,如全局属性,系统环境等,但没有一种方法。詹金斯不会替换${username}${password}。唯一的工作方式(到目前为止 - 对我来说)是使它成为一个工作参数,但我想让它成为我所有工作的全球。

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

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

我设法使用使用固定存储库路径的Git HTTP URL。到目前为止,我没有将存储库作为变量提供,就像你似乎正在做的那样。

请注意,如果您在Jenkins中配置了代理,则当前的Git客户端插件版本1.4.6不会考虑您的无代理主机设置。这里有一个补丁:https://github.com/fzs/git-client-plugin/tree/respect-no_proxy

答案 1 :(得分:0)

IDEA#1:

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

答案 2 :(得分:0)

类似于djangofan的回答:

执行此操作的最佳方法是使用SSH密钥。生成SSH公钥/私钥,然后将私钥放在〜/ .ssh / config中的每个Jenkins从属服务器上。然后,将公钥添加到GitHub帐户配置文件中。 GitHub上有一个页面 - https://help.github.com/articles/generating-ssh-keys#platform-all

更好的是,使用部署密钥。它与上面基本相同,但不是将SSH公钥添加到用户帐户,而是将其添加到repo的部署密钥 - https://help.github.com/articles/managing-deploy-keys#deploy-keys

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

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


如果您想继续使用HTTPS路由here is a good post for removing the username/password from the URL.根据经验,我发现在CI环境中更容易管理SSH部署密钥。