AWS CodeBuild buildspeC语言 在工件部分中是否可以对阶段部分中的变量进行更改? &



我在env/variables中定义了一些变量,然后在phases/pre_build中对值进行了更改。我想在工件中使用变量,但是看起来更改没有被持久化。

这是一个部署到IIS的旧的Windows。net Framework 4.7.2应用程序。

我buildspec。yml文件:

version: 0.2
env:
variables:
APPNAME: DummyApp
BRANCH: manual

phases:
pre_build:
commands:
- echo "start BRANCH = ${BRANCH}"
- echo "CODEBUILD_WEBHOOK_HEAD_REF = ${env:CODEBUILD_WEBHOOK_HEAD_REF}"
# CODEBUILD_WEBHOOK_HEAD_REF is null when build is triggered from console as opposed to a webhook
- if (${CODEBUILD_WEBHOOK_HEAD_REF}) { ${BRANCH} = ($CODEBUILD_WEBHOOK_HEAD_REF.replace('refs/heads/', '')) }
- echo "after BRANCH = ${env:BRANCH}"
build:
commands:
- echo "build commands happen here"
artifacts:
files:
- .DummybinDebug*
# not sure why this doesnt work down here, are changes in the phases section above not propagated?
name: ${env:APPNAME}/${env:APPNAME}-${env:BRANCH}.zip
discard-paths: yes

$CODEBUILD_WEBHOOK_HEAD_REF = "refs/head/develop">
替换语句后$BRANCH的值= "develop">
S3中我的工件的值是"DummyApp/DummyApp-manual.zip">

我想要的工件命名为"DummyApp/DummyApp- development .zip"

某种范围问题?

各种迹象表明这是不可能的。

https://blog.shikisoft.com/define-environment-vars-aws-codebuild-buildspec/

这里应该注意的关键是,您只能将文字值赋给以这种方式声明的环境变量。不能在运行时分配动态值。如果您想更改<…>变量,您必须更改buildspec文件并再次将更改推送到存储库。这就像硬编码参数值。但这比在阶段部分输入所有需要的命令要好。

除了尝试简单地在pre_build中设置本地变量之外,我还尝试了许多方法,包括

  • 运行自定义powershell脚本解析分支名称作为pre_build的第一步
  • 在变量声明本身中运行命令
  • 调用prsh setenenvironmentvariable方法

似乎工作的事情是使用替换命令在工件/名称本身:

artifacts:
files:
- .DummybinDebug*
name: ${env:APPNAME}/${env:APPNAME}-$($CODEBUILD_WEBHOOK_HEAD_REF.replace('refs/heads/', '')).zip
discard-paths: yes

创建了这个工件:DummyAppDummyApp- developer .zip

最新更新