14

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

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

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

4

4 回答 4

27

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

但我们可以做得更好,并防止应该能够运行构建的人误点击。添加一个配置参数,它是一个复选框。这样,当有人点击“运行”按钮时,它很快就会失败。他们必须点击运行按钮上的省略号,然后单击消息旁边的复选框,例如您确定吗?.

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

单击Save以保存 Spec,然后返回到Edit Parameter弹出窗口。将设置为false。这是复选框的默认值。

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

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

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

于 2013-01-27T06:40:59.197 回答
4

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

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

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

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

于 2013-01-27T01:37:24.973 回答
3

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

于 2013-01-26T09:41:19.263 回答
-1

对于生产环境,我们需要确认部署到的域。这是实现此目的的简单方法:

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