【问题标题】:Teamcity Environment Variable SubstitutionTeamcity 环境变量替换
【发布时间】:2020-10-15 10:33:30
【问题描述】:

我正在尝试实现一些简单的事情。以下 bash 脚本在 Teamcity 中运行

#!/bin/bash
awsEnv=%env.environment%
s3Bucket="%%env.${'$'}{awsEnv^^}_S3_BUCKET%%"
aws s3 cp test.json s3://${'$'}s3Bucket/artifacts/output.json

我有一个环境变量%env.environment%,其值可以是DEVstgPROD。如果DEV 是输入时提供的值,则 bash 脚本会尝试构造另一个 在这种情况下动态环境变量 %env.DEV_S3_BUCKET% 如第 2 行所示。这又在 aws s3 cp 步骤中使用。

但是,当它在 Teamcity 中运行时,这是它抛出的错误

upload failed: test.json to s3://%env.DEV_S3_BUCKET%/artifacts/output.json Parameter validation failed:
04:54:07
  Invalid bucket name "%env.DEV_S3_BUCKET%" : Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"

我原以为它会用 %env.DEV_S3_BUCKET% 的值替换它,但它没有。

我在这里缺少什么?这可以在 Teamcity 中一步完成吗?

附:环境变量%env.DEV_S3_BUCKET% 已在 Teamcity 中定义。

【问题讨论】:

    标签: continuous-integration teamcity


    【解决方案1】:

    要在两个构建步骤之间编辑环境变量,您可能需要使用 TeamCity 服务消息来更新 TeamCity 服务器上的值。

    https://www.jetbrains.com/help/teamcity/service-messages.html#Adding+or+Changing+a+Build+Parameter

    你需要

    echo "##teamcity[setParameter name='env.environment' value='new_value']"

    TeamCity 将获取它,并且可以在接下来的步骤中访问它。

    【讨论】:

    • 问题是关于在一个步骤中替换环境变量。即使我构造了 env 变量,它也不会用值代替变量。
    【解决方案2】:

    我找到了一种使用$! 而不是%env.<param>% 的方法

    #!/bin/bash
    awsEnv=%env.environment%
    s3Bucket="${'$'}{awsEnv^^}_S3_BUCKET"
    aws s3 cp test.json s3://${'$'}{!s3Bucket}/artifacts/output.json
    

    【讨论】:

    • ${'$'}{!s3Bucket} 是否从 teamcity 本身获得价值?还是它只是指向 DEV_S3_BUCKET?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多