无法在 Circleci orb 中使用环境变量

Thi*_*aku 7 circleci-workflows circleci-2.0

我正在尝试创建一个 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
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用官方 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'
Run Code Online (Sandbox Code Playgroud)

此上传任务失败,并显示The user-provided path target/project-.war does not exist.因为正在插入空字符串而不是预期版本。

Circleci 文档指出:

在每一步中,CircleCI 都使用 bash 来获取 BASH_ENV。这意味着 BASH_ENV 会自动加载并运行,允许您在运行步骤中使用插值并共享环境变量。

但事实似乎并非如此。如何使 S3 上传任务使用我设置的环境变量?

Sur*_*rya 0

您可以将环境变量设置为 pre_build 步骤

      - my-orb/orb-name:
          context: org-global
          pre_build_steps:
            - run:
                name: Set IMAGE_NAME for kustomize
                command: |
                  echo "export IMAGE_NAME=\"connectivity-wiki\"" >> $BASH_ENV
Run Code Online (Sandbox Code Playgroud)