防止在 TeamCity 中意外构建



我想创建一个手动触发的团队城市构建,将我们的网站部署到其实时环境。我对这样做犹豫不决,因为我担心人们会意外触发构建。

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

还有比这更好的技术吗?有没有可能有一个"你确定吗?"式的对话?

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

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

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

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

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

如果需要,可以每次都显示"运行自定义生成"弹出窗口。为此,请在Edit parameter specification窗口中,将"显示"更改为"Prompt"。默认值仍然是不执行部署,但每次都会弹出对话框。

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

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

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

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

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

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

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

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

最新更新