【问题标题】:Preventing accidental builds in TeamCity防止 TeamCity 中的意外构建
【发布时间】:2015-01-20 08:04:59
【问题描述】:

我想创建一个手动触发的 Team City 构建,将我们的网站部署到其实时环境中。我很犹豫是否这样做,因为我担心人们会意外触发构建。

我知道我可以通过阻止大多数人访问或使部署过程稍微困难一些(例如两个步骤)来半解决这个问题。

还有更好的技术吗?是否有可能有一个“你确定吗?”风格对话?

【问题讨论】:

  • 永远,永远,永远不会自动部署到生产环境en masse。将其部署到临时环境,然后手动将其推送到现场。我的 0.02 美元。
  • @Gordon 尊敬的,我认为这可能是一个过于宽泛的声明,而没有更多地了解 Dan 是如何安排事情的。
  • 可能是这样,但我不得不处理由此可能发生的混乱局面。
  • 嗨,丹——刚刚签到。您是否能够制定一个好的流程?

标签: teamcity


【解决方案1】:

首先,您应该听从 John Hoerr 的建议,并阻止人们运行它,除非他们是极少数人。

但我们可以做得更好,并防止应该能够运行构建的人员误点击。添加configuration parameter that's a checkbox。这样,当有人点击“运行”按钮时,它很快就会失败。他们必须点击运行按钮上的省略号,然后单击消息旁边的复选框您确定吗?

为此,请添加名称为confirm 的参数,然后点击编辑 链接。在弹出窗口中,单击 Spec 旁边的 edit 按钮。将类型更改为Checkbox。将检查值设置为true,将未检查值设置为false。或其他对您有意义的值。

单击Save 保存规范,然后返回编辑参数弹出窗口。将 设置为 false。这是复选框的默认值。

作为您在脚本中执行的第一件事,检查参数%confirm% 是否设置为字符串"true" 或是否设置为"false"。如果是"false",你想立即exit 1:运行构建的人没有勾选confirm复选框。

如果您愿意,您可以每次都弹出 Run Custom Build 弹出窗口。为此,在Edit parameter specification 窗口中,将Display 更改为Prompt。默认值仍然是不进行部署,但每次都会弹出对话框。

您还可以使显示在文本框旁边的标签不是参数的名称,而是任意字符串。在Edit parameter specification 弹出窗口中,使label 类似于Pinky 发誓你想这样做吗?

【讨论】:

  • 好建议。当某人(我)单击错误的按钮时,我们还刚刚通过解释即兴部署到生产的尴尬练习设置了一个“确认”参数。此外,作为额外的预防措施,我已从仪表板中删除了生产部署构建配置。
  • 很好的建议,但您能否详细说明作为您在脚本中做的第一件事
  • 我已经使用确认复选框实现了建议,并且有一个基于此复选框的构建失败的 Nant 脚本。这很好用,但是有没有办法确保复选框始终默认为“false”,因为当前它默认为之前的选中状态。
  • @JohnAskew 我不确定——我不再使用 TeamCity 做任何事情,也没有可以用来测试的实例。发布一个新问题,希望有人会回复您。或者,联系TeamCity support 或提交错误。
  • 我做了一些与此非常相似的事情,除了我要求部署人员输入目标域以进行生产部署。
【解决方案2】:

我们这样做的方式是一个两步过程。这两个步骤都仅限于我们的部署团队。让我们以生产网络服务器代码为例:

  1. 从 Teamcity 手动运行构建,构建生产代码并将其部署到一个非公开的生产服务器 - Deploy 服务器。由于我们在生产环境中广泛使用缓存和 CDN,这与我们的 Staging 环境有些不同。
  2. 第二个“构建”是从 Teamcity 手动运行的,这实际上只是命令行/powershell 脚本的触发器,用于将代码从 Deploy 服务器部署到生产服务器。

由于两个版本的访问权限都受到限制,因此它几乎可以完全防止意外部署到生产环境。例如,如果少数有权访问生产构建的工程师中的一个意外运行了第二个部署脚本而没有运行第一个构建,那么它只会从部署服务器重新部署代码,即已经投入生产。这不会造成任何损害。

虽然我当然信任参与我们部署过程的所有工程师,但我喜欢两步生产过程的保证。安全总比后悔好。

【讨论】:

    【解决方案3】:

    我认为通过使用 TeamCity 的基于角色的访问来阻止大多数人运行生产部署,您走在了正确的轨道上。对于确实拥有特权的队友,我鼓励他们从仪表板中隐藏/删除 Deploy to Prod 配置。您可以通过单击配置右侧的 X 来执行此操作。这对我们来说是防止偶然误点击的有效方法。当您确实想运行 Deploy to Prod 构建时,您可以通过项目页面直接浏览到它。

    【讨论】:

      【解决方案4】:

      对于生产环境,我们需要确认部署到的域。这是完成此操作的简单方法:

      1. 编辑部署构建步骤。
      2. 点击添加新的配置参数。
      3. 设置以下参数规格:
        • 标签:确认目标
        • 说明:确认部署到的生产环境。
        • 显示:提示
        • 类型:文本
        • 允许的值:正则表达式
        • 模式:[在您的域中输入(记住前面带有斜线的句点)]
        • 验证消息:部署到错误的域,dweeb!

      【讨论】:

      • Teamcity 保存下一次部署的值...有没有办法每次都清除该值?我试图让用户在每次进行生产部署时都输入生产环境。但是第二次部署会预先填充该值。
      • @AlexSpence 不幸的是,我没有办法解决这个烦人的问题。
      • @AlexSpence @Mario 为了绕过构建参数的记忆,我强制用户输入随着每次部署而改变的东西......依赖构建的构建计数器。这是我的 bash 构建步骤:if [ %confirm% != %dep.Builds_Ci.build.counter% ]; then echo Failed to confirm the right build counter number, should have been %dep.Builds_Ci.build.counter% exit 1; fi
      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      相关资源
      最近更新 更多