16

TeamCity 可以将成功的构建推送到 git 存储库吗?

我在 TeamCity 中看不到执行此操作的特定构建步骤。
我使用的是 TeamCity 7.1.1 版本

谢谢, 亨里克

更新:

好的,谢谢你的回答,我觉得有点复杂。我发现我可以简单地将成功构建的标签推回我的全局存储库,TeamCity 从中获取构建数据。我可以从中提取更改并查看最后一次提交是否成功。

如果 TeamCity 为这种工作流程提供了一个简单的选项,我会很高兴!

如果每个开发人员都可以从仅在构建成功时更新的 repo 中提取,那将是很棒的,还是我错了?

4

5 回答 5

6

您可以让 TeamCity 执行随后调用的 shell 脚本git push(使用适当的参数,例如git push <repository>推送到不同的存储库)。请确保git推送操作不需要交互式身份验证。

git push可以在此处找到相关示例(使用 a 部署到 Heroku ):http: //blog.carbonfive.com/2010/08/06/deploying-to-heroku-from-teamcity/

于 2012-11-10T22:08:45.957 回答
6

我终于成功了!

您必须在 teamcity 项目中添加构建参数:

name= env.PATH
value= C:\Program Files (x86)\Git\cmd

然后使用自定义脚本添加一个新的命令行构建步骤:

call git push "C:\Gruene Git Repos\TeamCityApp" master

“呼”字很重要!

谢谢您的帮助!亨里克

于 2012-11-12T08:17:24.923 回答
5

如果您升级到 8 或更高版本,您可以只创建一个或多个“自动合并”构建功能。这将推送到远程仓库。由于命名混乱,我一开始也没有找到它,但它们必须支持许多具有不同命名的不同 VCS 是有道理的。

于 2015-04-29T13:05:22.070 回答
2

简单的答案

一段时间以来,TeamCity 支持 VCS 标签,这允许您的 VCS Root 用户(如果它具有写入权限)标记刚刚使用版本或 TeamCity 知道的任何其他内容构建的提交哈希(请参阅 TeamCity 中的参数引用的完整列表维基)。

旁白

如另一个答案所述,TeamCity 中可用的自动合并功能将自动从指定的分支列表(启用通配符)执行合并到请求的分支,并且它将监视和构建,并且仅在成功时才合并它们。

自动合并功能可能很好,但如果您没有良好的测试覆盖率,它也可能很危险,因为开发人员可能会破坏没有测试的东西,这会导致您的代码在很长一段时间内出现问题。防止这种情况的一种方法是要求每次构建项目时都创建/运行 +2 测试(可在 TeamCity 中配置)。这些警告在之前链接的文章中提到了自动合并功能。

相关决议

我们遇到了一个与合并没有直接关系的类似问题,但如果您使用 VCS Labeling(可怕的名称),则需要将工作中的一些更改推送到 TeamCity 添加的“轻量级标签”(至少对于 Git)之外。

我们最终做的是:

  1. 使用“环境变量”类型的参数(对构建代理可见,其他类型不可见)并设置“规范”以创建“密码”类型的字段,这将防止输入的文本显示在配置中UI 或作业日志输出。
  2. 在作业配置中输入用户名和密码作为参数
  3. 创建了一个查看“代理端”存储库的 git 远程 URL 的脚本,并在 url ( http://gituser:gitpassword@githost.com/path/to/repo. git ) 以便将更改推送到新分支。
    • 然后,我们在脚本末尾删除远程,以便访问系统的任何人都无法提取凭证。当然,凭证的范围也相当严格,只能访问某些存储库,但遵循最低权限规则总是好的。
于 2016-09-21T21:42:49.200 回答
0

我的解决方案可能很愚蠢,但很简单。步骤如下:

  1. 从 heroku git 存储库克隆你的 heroku,它将创建你的 heroku 应用程序文件夹。

    heroku git:clone -a {app-name}

  2. 将需要更新的文件复制到heroku

    xcopy client "{app-name}/client" /e/i/h/y

    xcopy server "{app-name}/server" /e/i/h/y

    xcopy imports "{app-name}/imports" /e/i/h/y

  3. 混帐添加。

    cd {app-name} && git add .

  4. git 提交

    cd {app-name} && git commit --message 'ok'

  5. 推送到heroku

    cd {app-name} && git push heroku master

于 2016-10-15T16:01:46.090 回答