我正在尝试创建一个 Circleci 工作流程,该工作流程构建 Java WAR 并将其上传到我的组织现有的 S3 工件存储桶存储库。首先,构建项目并将一些信息保存在文件中,并将 VERSION 放入 BASH_ENV:
export "VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)" >> $BASH_ENV
if [ $CIRCLE_BRANCH = "master" ]; then
ENVIRONMENT=production
elif [ $CIRCLE_BRANCH = "develop" ]; then
ENVIRONMENT=qa
elif [ $CIRCLE_BRANCH = "release-1.0" ]; then
ENVIRONMENT=staging
else
ENVIRONMENT=$CIRCLE_BRANCH
fi
echo "ENVIRONMENT=$ENVIRONMENT" >> project.info
if [ -z "$ENVIRONMENT" ]; then
echo No environment is set
exit 1
fi
然后,我尝试使用官方 S3 orb 上传工件:
steps:
- attach_workspace:
at: .
- run: source project.info
- run: export "VERSION=$VERSION" >> $BASH_ENV
- aws-s3/copy:
from: target/project-${VERSION}.war
to: 's3://artifact.bucket/project/project-${VERSION}.war'
arguments: '--dryrun'
此上传任务失败,The user-provided path target/project-.war does not exist.
因为正在插入空字符串而不是预期版本。
Circleci 文档指出:
在每一步中,CircleCI 都使用 bash 来获取 BASH_ENV。这意味着 BASH_ENV 会自动加载和运行,允许您在运行步骤中使用插值和共享环境变量。
然而,情况似乎并非如此。如何让 S3 上传任务使用我设置的环境变量?