如何:Teamcity + GitHub

Posted

技术标签:

【中文标题】如何:Teamcity + GitHub【英文标题】:HowTo: Teamcity + GitHub 【发布时间】:2010-10-22 06:39:27 【问题描述】:

是否有人成功配置 Teamcity 以从 GitHub 监控、提取和构建?

我似乎无法弄清楚如何在何处以及如何为 Teamcity 配置 SSH 密钥。我在系统帐户下将 Teamcity 作为系统服务运行。那么 Teamcity 将其 SSH 配置存储在哪里?

编辑

要让它工作,我需要阻止代理在系统帐户下运行。

【问题讨论】:

【参考方案1】:

好的...我让它开始在我的 Windows 服务器上工作。以下是我配置TeamCity 4.5 Professional的步骤:

    下载JetBrains Git VCS Plugin 将下载的zip文件复制到.BuildServer\plugins 在“管理”>“编辑构建配置”>“编辑 VCS 根配置”屏幕中,我选择了“Git (JetBrains)” 从 GitHub 项目页面输入我的克隆网址 为身份验证方法设置“默认私钥”——这很重要
      TeamCity BuildAgent 应该作为标准用户运行,并为该用户正确配置了 SSH 安装。 关注GitHub SSH directions for SSH configuration
    将用户名留空。这应该已经在您的 GitHub 克隆 URL 中提供了

【讨论】:

我已经使用私钥身份验证与 TeamCity 5.1.2 一起工作。运行构建代理的用户在其主目录中有一个私钥。在我将用户名留空之前,身份验证不起作用。我想我必须指定它,因为我的克隆 URL 属于另一个用户,但我假设它使用的是构建代理运行的用户。 请注意,如果您使用的是在 PuttyGen 中生成的 SSH 密钥,这将不起作用 - 我们花了很长时间在搞砸,然后在 GitBash 中使用 ssh-keygen 重新生成密钥,然后立即生效。 如果您没有将密钥存储在 C:\.ssh\config\ 上的标准 SSH 目录中,也无济于事。似乎没有可以告诉 TeamCity 它在其他地方的设置。 当 TeamCity 代理作为本地系统运行(其配置文件为 c:\windows\system32\config\systemprofile)时,是否有人能够使用密钥(从 ssh-keygen 生成)具有非标准名称?根据他们的文档 (confluence.jetbrains.net/display/TCD5/Git+%28JetBrains%29),TeamCity 想要在 \.ssh\config 中查找 ssh 配置文件 linux.die.net/man/5/ssh_config,但后来我没有让 IdentityFile 在那里工作(不确定它是否需要 windows 或posix 路径...)。【参考方案2】:

我获得了“默认私钥”以与在 Windows 上以 SYSTEM 用户身份运行的代理一起工作。对我来说,答案是拥有身份文件

C:\Windows\SysWOW64\config\systemprofile\.ssh\id_rsa

而不是在

C:\Windows\System32\config\systemprofile\.ssh\id_rsa

【讨论】:

这似乎也是我的根本问题。 就是这个。这用 TeamCity 9 为我解决了问题:D【参考方案3】:

您的问题是针对 SSH 的,但使用 TLS 上的 HTTP 肯定更容易、更快捷,因为 GitHub 和 TeamCity 现在都支持 HTTP 身份验证。此外,GitHub 还支持有限权限的personal api tokens,您可以根据自己的喜好进行配置,或者根据需要创建新用户。

请参阅下方的 TeamCity 设置图片。

【讨论】:

【参考方案4】:

自 TeamCity 8.1 起,正式支持 SSH 密钥管理,请阅读此文档:https://confluence.jetbrains.com/display/TCD9/SSH+Keys+Management

【讨论】:

【参考方案5】:

对于私钥,用户名必须为空。

【讨论】:

【参考方案6】:

(这是对旧问题的最新答案)

我使用 github/gitlab 和 teamcity 7 构建了基于 ssh 的构建,如下所示:

登录 teamcity 机器并使用 puttygen/ssh-keygen 生成 rsa 密钥对并将 openssh 密钥保存在合理的位置。 (知道了 - 使用 puttygen?确保私钥是 openssh 格式 - puttygen > 转换 > 导出 openssh 密钥)

我建议你把私钥保存在

C:\.ssh\id_rsa

现在在 teamcity 中设置“默认私钥” - 创建一个文件

C:\.ssh\config

并在其中放置:

Host * IdentityFile c:\.ssh\id_rsa

登录到您的 gitlab/guthub 帐户并粘贴您的 teamcity 私钥的 openssh 公钥。

您现在应该可以在 teamcity 中创建一个 git vcs 根目录,该根目录可以使用默认私钥来拉取您的源代码。

【讨论】:

【参考方案7】:

您可能需要像this这样的第三方插件

【讨论】:

对于未来的读者,当 JetBrains 为 TeamCity 中提供的 git 支持创建官方插件时,该插件已被弃用。【参考方案8】:

我不知道为什么,但我选择 Default Private Key 失败了。

然后我选择Custom Private Key,如下图所示:

Username 字段必须为空。

Passphrase 字段是您的私钥的密码

(假设你已经在git中添加了这个私钥的公钥。)

希望没有人像我一样被卡住!

【讨论】:

以上是关于如何:Teamcity + GitHub的主要内容,如果未能解决你的问题,请参考以下文章

如何在 java 中获取 Teamcity 配置的值?

TeamCity - SVN 和标签:如何正确执行?

如何在 Teamcity 中归档构建配置?

如何从 TeamCity 构建配置中设置 PowerShell 开关参数

如何在 64 位 JVM 上运行 TeamCity

如何调试从 TeamCity 部署的我的 nuget 包?