防止TeamCity中的意外构建

防止TeamCity中的意外构建,teamcity,Teamcity,我想创建一个手动触发的TeamCity构建,将我们的网站部署到其实时环境中。我很犹豫是否这样做,因为我担心人们会意外触发构建 我知道我可以通过阻止大多数人访问或使部署过程稍微困难一些(例如,两个步骤)来半解决这个问题 还有更好的技术吗?是否可以进行“确定吗?”式的对话?我认为您使用TeamCity基于角色的访问来阻止大多数人运行生产部署是正确的。对于确实拥有此权限的团队成员,我鼓励他们从仪表板中隐藏/删除Deploy to Prod配置。您可以通过单击配置右侧的X来执行此操作。对于我们来说,这是

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

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


还有更好的技术吗?是否可以进行“确定吗?”式的对话?

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

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

  • 构建是从Teamcity手动运行的,构建生产代码并将其部署到一个面向非公共的生产服务器—
    Deploy
    服务器。由于我们在生产中大量使用缓存和CDN,这与我们的
    登台环境有点不同
  • 第二个“构建”是从Teamcity手动运行的,它实际上只是命令行/powershell脚本将代码从
    deploy
    服务器部署到生产服务器的触发器
  • 由于两个版本的访问都受到限制,因此几乎完全可以防止意外部署到生产环境中。例如,如果少数几个有权访问生产版本的工程师中的一个进来并意外地在没有运行第一个版本的情况下运行了第二个部署脚本,那么它只会重新部署部署服务器中的代码,这是已经在生产中的代码。这不会造成任何损坏


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

    首先,你应该听从约翰·霍尔的建议,阻止人们运行它,除非他们只是少数人

    但是,我们可以做得更好,并防止应该能够运行构建的人员的错误点击。添加一个。这样,当有人点击“运行”按钮时,它将很快失败。他们必须点击run按钮上的省略号,然后单击消息旁边的复选框,如are you sure

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

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

    在脚本中执行的第一件事是检查参数
    %confirm%
    是否设置为字符串
    “true”
    ,或者是否设置为
    “false”
    。如果
    为“false”
    您希望
    立即退出1
    :运行生成的人员没有勾选
    确认
    复选框

    如果您愿意,您可以使运行自定义构建弹出窗口每次出现。为此,在
    编辑参数规范
    窗口中,将显示更改为
    提示符
    。默认值仍然是不进行部署,但每次都会弹出对话框


    您还可以使文本框旁边显示的标签不是参数的名称,而是任意字符串。在
    编辑参数规范
    弹出窗口中,使
    标签
    类似于Pinky Swarme,表示您要这样做?

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

  • 编辑部署生成步骤
  • 单击以添加新的配置参数
  • 设置以下参数规格:
    • 标签:确认目标
    • 描述:确认要部署到的生产环境
    • 显示:提示
    • 类型:文本
    • 允许值:Regex
    • 模式:[在您的域中键入(记住在句点前加斜线)]
    • 验证消息:部署到错误的域,dweeb

  • 从来没有,从来没有,从来没有大规模地自动部署到生产环境。将其部署到登台环境,然后手动将其推送到现场。我的0.02美元。@Gordon,恕我直言,我认为这可能是一个过于宽泛的说法,而不知道Dan是如何安排事情的。很可能是这样,但我不得不处理由此可能发生的混乱局面。嗨,Dan,我刚刚登记。你能制定一个好的流程吗?很好的建议。我们还刚刚设置了一个“confirm”参数,刚刚完成了一个尴尬的练习,解释了当有人(我)点击错误的按钮时生产的临时部署。另外,作为额外的预防措施,我已经从仪表板中删除了生产部署构建配置。这是一个很好的建议,但是您可以在脚本中详细说明您要做的第一件事吗?我已经通过一个确认复选框实现了这些建议,并且有一个Nant脚本根据此复选框使构建失败。这很好,但有没有办法确保复选框始终默认为“false”,因为它当前默认为以前的选中状态。@JohnAskew我不确定--我不再使用TeamCity做任何事情,也没有可以用于测试的实例。发布一个新问题,希望是som