Continuous integration Teamcity环境变量替换

Continuous integration Teamcity环境变量替换,continuous-integration,teamcity,Continuous Integration,Teamcity,我正在努力实现一些简单的目标。下面的bash脚本在Teamcity中运行 #!/bin/bash awsEnv=%env.environment% s3Bucket="%%env.${'$'}{awsEnv^^}_S3_BUCKET%%" aws s3 cp test.json s3://${'$'}s3Bucket/artifacts/output.json 我有一个环境变量%env.env%,其值可以是DEV或stg或PROD。如果DEV是输入时提供的值,bash脚本将

我正在努力实现一些简单的目标。下面的bash脚本在Teamcity中运行

#!/bin/bash
awsEnv=%env.environment%
s3Bucket="%%env.${'$'}{awsEnv^^}_S3_BUCKET%%"
aws s3 cp test.json s3://${'$'}s3Bucket/artifacts/output.json
我有一个环境变量
%env.env%
,其值可以是
DEV
stg
PROD
。如果
DEV
是输入时提供的值,bash脚本将尝试构造另一个值 在本例中,环境变量是动态的
%env.DEV\u S3\u 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\u S3\u BUCKET%
,但它没有

我错过了什么?在Teamcity中,这是否可以在一个步骤内完成


另外,Teamcity中已经定义了环境变量
%env.DEV_S3_BUCKET%

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

你需要

echo“##teamcity[setParameter name='env.env.environment'value='new_value']”团队城市[setParameter name='env.env.environment'value='new#u value']”


TeamCity将拿起它,并在接下来的步骤中访问它。

我能够找到一种方法,使用
$
而不是
%env.%


问题是在一个步骤中替换env变量。即使我构造了env变量,它也不会用值替换变量。${'$'}{!s3Bucket}是否从teamcity本身获取值?或者它只是指向DEV_S3_BUCKET?
#!/bin/bash
awsEnv=%env.environment%
s3Bucket="${'$'}{awsEnv^^}_S3_BUCKET"
aws s3 cp test.json s3://${'$'}{!s3Bucket}/artifacts/output.json