0

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

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

${project}正在作业级别进行参数化,但${username}目前${password}在 url 中进行了硬编码。我想以某种方式将其外部化为某种全局配置。我尝试了几种方法,例如全局属性、系统环境等,但都没有奏效。既不是${username}也不${password}是被詹金斯取代。唯一的工作方式(到目前为止 - 对我而言)是将其作为工作参数,但我想让它对我的所有工作都具有全球性。

有任何想法吗?谢谢!

4

3 回答 3

2

您可以使用Jenkins Credentials 插件来存储用户名和密码凭据。配置作业时,请在 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

于 2013-11-18T20:59:14.750 回答
0

想法#1:

我通常在工作中做的是我们使用公钥/私钥对。我并不完全理解它是如何工作的,但是,当我从我的工作站进行 Git 克隆或 Jenkins 进行 Git 克隆时,它不需要密码,因为身份验证证书可以处理它。因此,脚本中的 Git 命令,包括 Jenkins“git 插件”克隆,都无需密码即可工作。

于 2013-11-13T19:07:22.350 回答
0

类似于 djangofan 的回答:

最好的方法是使用 SSH 密钥。生成一个 SSH 公钥/私钥,然后将私钥放在 ~/.ssh/config 中的每个 Jenkins slave 上。然后,您将公钥添加到您的 GitHub 帐户配置文件。GitHub对此有一个页面 - https://help.github.com/articles/generating-ssh-keys#platform-all

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

一旦你完成了所有设置而不是使用 https://${username}:${passsword}@github.com/${project}.git 你使用 SSH URL 来克隆, git@github.com:${project }.git

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


如果您想继续使用 HTTPS 路由,这里有一篇从 URL 中删除用户名/密码的好帖子。根据经验,我发现 SSH 部署密钥在 CI 环境中更易于管理。

于 2013-11-14T09:28:09.147 回答