代码之家  ›  专栏  ›  技术社区  ›  ChoNuff

在Cake(C#)中获取TeamCity(Docker Linux)参数或系统属性不会返回任何结果

  •  1
  • ChoNuff  · 技术社区  · 6 年前

    在我的分支中,TeamCity上可以看到以下构建参数值:

    配置参数

    • teamcity.build.branch:5/合并

    环境变量

    • env.vcsroot.branch:5/合并

    env.vcsroot.branch 变量的值为 %teamcity.build.branch%

    我的蛋糕脚本只是尝试吐出值,下面的所有值都是空的:

    var branch = EnvironmentVariable("vcsroot.branch");
    var tcbranch = EnvironmentVariable("teamcity.build.branch");
    var agent = EnvironmentVariable("system.agent.name");
    var confName = EnvironmentVariable("system.teamcity.buildConfName");
    var buildId = EnvironmentVariable("teamcity.build.id");
    var vcsRootBranch = EnvironmentVariable("vcsroot.Root_TemplatedVcsRoot1.branch");
    var argOrEnv = ArgumentOrEnvironmentVariable("teamcity.build.branch", "vcsroot.branch", "Unfound");
    
    Information($"vcsroot.branch = {branch}");
    Information($"teamcity.build.branch = {tcbranch}");
    Information($"system agent name = {agent}");
    Information($"system TC build cof name= {confName}");
    Information($"param buildId = {buildId}");
    Information($"vcsroot template branch = {vcsRootBranch}");
    Information($"test argument or env variables = {argOrEnv}");
    

    [12:34:51][Step 1/2] vcsroot.branch = 
    [12:34:51][Step 1/2] teamcity.build.branch = 
    [12:34:51][Step 1/2] system agent name = 
    [12:34:51][Step 1/2] system TC build cof name= 
    [12:34:51][Step 1/2] param buildId = 
    [12:34:51][Step 1/2] vcsroot template branch = 
    [12:34:51][Step 1/2] test argument or env variables = Unfound
    

    奇怪的是,在我们基于非docker Windows的TeamCity代理上,这些值似乎可以正常返回。我有一种感觉,我在这里错过了一些痛苦的简单,但我是一个相对新手时,谈到蛋糕,TeamCity,和码头工人。任何帮助都将不胜感激。谢谢!

    编辑:要分类,大多数环境变量都按预期返回;我注意到唯一一个没有引用配置参数的。

    2 回复  |  直到 6 年前
        1
  •  2
  •   devlead    6 年前

    对于环境变量,TeamCity将非字母数字字符替换为“\”

    vcsroot.branch 变成 vcsroot_branch

        2
  •  1
  •   ChoNuff    6 年前

    我想出来了。。。

    首先,我错过了TC项目参数页面上配置参数的潜台词;它说 Configuration parameters are not passed into build, can be used in references only

    其次,我没有意识到所有的系统属性都是不可见的(不知道这是否是一个问题),但是它的潜台词也指出 System properties will be passed into the build (without system. prefix), they are only supported by the build runners that understand the property notion

    因此,为了获得配置参数值,我需要使用配置参数作为其值来创建一个环境变量:

    env.TCBranch = %teamcity.build.branch%
    

    有点不安 teamcity.build.branch

    这就引出了为什么环境价值 env.vcsroot.branch 不起作用,我想这是因为变量名与另一个配置变量名相同。考虑到这些参数没有被传递到构建中,我不明白为什么这很重要,但是我想不出为什么它不起作用。无论如何,感谢@devlead的建议(如上)。

    推荐文章