【问题标题】:TFS build step `Promote Project in Octopus` - variable for invoking build step if invoked by specific userTFS 构建步骤`Promote Project in Octopus` - 如果由特定用户调用,则用于调用构建步骤的变量
【发布时间】:2019-08-20 13:23:29
【问题描述】:

我正在尝试设置 CD 以暂存我们的一个应用程序。我已将其设置为执行以下操作:

  1. 合并到 master 会导致 TFS 构建并自动部署到 devlab
  2. 构建步骤在 tfs 中启动 e2e 测试并针对 devlab 运行测试
  3. 如果 e2e 测试通过,我想将构建升级为暂存,然后我将重复这些步骤(停止自动部署到产品)

这是我遇到问题的地方:

我在 e2e 测试构建中有一个构建步骤,称为“将项目推广到 octopus”——这个构建也按预定的节奏(每晚)运行,所以我只想要最后一步(将项目推广到 octopus)如果开始测试的用户是octopus-user(这是我们给机器人起的名字)。

将其用作资源:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=yaml#examples

在此构建步骤的“自定义条件”中,我使用上面链接中提供的指导尝试了几个不同的变量。以下是 2 个示例:

and(succeeded(),equals(variables['Build.RequestedBy],'octopus-user'))

and(succeeded(), equals(variables['Build.RequestedFor'], 'octopus-user'))

如果我删除此变量,则构建成功并按预期将构建提升到暂存状态。当我插入变量时,我得到了不同的失败,如果它是由特定用户启动的,任何人都有关于如何设置变量启动的指导? (在本例中为octopus-user) - 问题可能出在用户名的格式上,或许它需要是电子邮件地址(尽管我已经尝试过,以及用户的 AD 凭据)。

【问题讨论】:

    标签: tfs azure-devops octopus-deploy octopus


    【解决方案1】:

    条件写成表达式。代理评估从最里面的函数开始的表达式并找出它的出路。最终结果是一个布尔值,用于确定任务、作业或阶段是否应该运行。有关语法的完整指南,请参阅 Expressions 主题。

    根据执行上下文,可以使用不同的变量。

    根据您的描述,如果您想使用E-mail地址,请使用Build.RequestedForEmail而不是Build.RequestedFor

    如果您的名称/值包含空格,请参阅“How are the identity variables set?”。

    注意:此值可以包含空格或其他无效标签字符。在这些情况下,标签格式将失败。

    【讨论】:

    • 感谢您的详细回复。将其更改为Build.RequestedForEmail 有效,最终的完整解决方案是and(succeeded(), eq(variables['Build.RequestedFor'], 'octopus-user'))
    猜你喜欢
    • 2023-03-07
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多