防止TeamCity中的意外构建

时间:2013-01-26 08:25:06

标签: teamcity

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

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

有没有更好的技巧?有可能有'你确定吗?'风格对话?

4 个答案:

答案 0 :(得分:24)

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

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

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

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

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

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

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

答案 1 :(得分:4)

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

  1. 从Teamcity手动运行构建,构建生产代码并将其部署到一个非面向公众的生产服务器 - Deploy服务器。由于我们在生产中使用了广泛的缓存和CDN,这与我们的Staging环境略有不同。
  2. 从Teamcity手动运行第二个“构建”,这实际上只是命令行/ powershell脚本的触发器,用于将代码从Deploy服务器部署到生产服务器。
  3. 由于两个版本的访问权限都受到限制,因此几乎可以防止意外部署到生产环境。例如,如果能够访问生产版本的少数工程师之一进入并意外运行第二个部署脚本而不运行第一个版本,则只需从部署服务器重新部署代码,即代码即已经投产了。这不会造成任何损害。

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

答案 2 :(得分:3)

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

答案 3 :(得分:-1)

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

  1. 编辑部署构建步骤。
  2. 单击以添加新配置参数。
  3. 设置以下参数规格:
    • 标签:确认目标
    • 描述:确认部署的生产环境。
    • 显示:提示
    • 类型:文字
    • 允许值:正则表达式
    • 模式: [在您的域中输入类型(请记住使用斜杠进行预设)]
    • 验证消息:部署到错误的域,dweeb!