【问题标题】:TeamCity: On successful build push to Git RepoTeamCity:成功构建推送到 Git Repo
【发布时间】:2012-10-30 20:38:12
【问题描述】:

TeamCity 能否将成功的构建推送到 git 存储库?

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

谢谢,亨里克

更新:

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

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

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

【问题讨论】:

    标签: git teamcity


    【解决方案1】:

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

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

    【讨论】:

    • 您可以简单地使用适当的参数调用git push 以推送到完全不同的存储库。
    • 好的,我明白了...我添加了另一个构建步骤类型“命令行”并选择了包含以下内容的自定义脚本: git push C:\TestAppRepo 但这不会起作用???
    • Windows 批处理文件中对git 的调用可能不会返回;尝试改用call git push …(即使用call 关键字)。
    • 在命令提示符下手动执行它是否有效,当它由 TeamCity 执行时会记录什么错误?
    • 感谢您的帮助,我的 teamcity 日志:[00:09:58]步骤 3/3:命令行 [00:09:58][步骤 3/3] 步骤命令行失败跨度>
    【解决方案2】:

    我终于成功了!

    你必须在你的 teamcity 项目中添加一个构建参数:

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

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

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

    “呼叫”这个词很重要!

    感谢您的帮助! 亨里克

    【讨论】:

    • 这或多或少是正确的,我在系统 PATH 环境变量中添加了 "C:\Program Files (x86)\Git\cmd;C:\Program Files (x86)\Git\bin;"。使用 TeamCity 设置路径变量将覆盖系统路径变量,并且无法再找到依赖的 exe。
    • 我尝试将检出目录设置为自定义路径,并检出到该文件夹​​,但该文件夹未声明为 git repo,它只是检出的 HEAD 版本的副本.如何访问 repo 文件夹?
    • 为了以后参考,结帐模式需要设置为:“自动代理”。该选项位于构建配置的 VCS 设置的高级部分下。这可确保构建代理具有完整的 git 存储库。
    【解决方案3】:

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

    【讨论】:

    • 您有使用自动合并的工作示例吗?我在构建中启用了它,但没有任何反应。我正在从任何分支中拉出,并试图推送到 master。
    • 是的,我在某个时候让它工作了,但我们停止使用它,因为它对于我们的用例来说不够强大。
    • 好的,你能提供这个例子吗?我正在尝试使用此功能,但我在日志中显示 ti 甚至正在尝试运行。
    • 对不起,我无法再访问该系统了
    • 自动合并不这样做。基于文档和我自己的构建日志,it only supports merging, not pushing。如果有办法让它推动,我很乐意删除反对票,但声明 you can just make one or more "Automatic Merge" build features 暗示它是开箱即用的,没有花哨的设置,这是不准确的。
    【解决方案4】:

    简单回答

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

    旁白

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

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

    相关分辨率

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

    我们最终做的是:

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

    【讨论】:

      【解决方案5】:

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

      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. git 添加。

        cd {app-name} && git add .

      4. git 提交

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

      5. 推送到heroku

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 1970-01-01
        相关资源
        最近更新 更多