Shell 如何在Circle CI中设置环境变量

Shell 如何在Circle CI中设置环境变量,shell,aws-cli,circleci,circleci-2.0,circleci-workflows,Shell,Aws Cli,Circleci,Circleci 2.0,Circleci Workflows,我正在circle ci上运行一个使用Maven liquibase插件的DB作业。我需要从AWS参数存储中读取用户名、密码、dburl等参数。但是,当我尝试将AWS cli返回的值设置为自定义变量时,它始终为空。我知道该值存在,因为mac终端上的同一命令返回一个值 我正在使用Bash脚本安装带有circle ci作业的AWS CLI。当我在.sh文件中回送密码时,我看到了值,但当我在config.yml上回送密码时,我看到了空值。我还尝试使用带有config.yml文件的aws ssm获取该值

我正在circle ci上运行一个使用Maven liquibase插件的DB作业。我需要从AWS参数存储中读取用户名、密码、dburl等参数。但是,当我尝试将AWS cli返回的值设置为自定义变量时,它始终为空。我知道该值存在,因为mac终端上的同一命令返回一个值

我正在使用Bash脚本安装带有circle ci作业的AWS CLI。当我在.sh文件中回送密码时,我看到了值,但当我在config.yml上回送密码时,我看到了空值。我还尝试使用带有config.yml文件的aws ssm获取该值,但即使在那里,该值也是空的

My Config.yml

version: 2

references:
defaults: &defaults
working_directory: ~/tmp

environment:
  PROJECT_NAME: DB Job

build-filters: &filters 
filters:
  tags:
    only: /^v[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}-(dev)/
  branches:
    ignore: /.*/
jobs:
checkout-code:
<<: *defaults

docker:
  - image: circleci/openjdk:8-jdk-node

steps: 
  - attach_workspace:
       at: ~/tmp

  - checkout

  - restore_cache:
      key: cache-{{ checksum "pom.xml" }}

  - save_cache:
      paths:
        - ~/.m2
      key: cache-{{ checksum "pom.xml" }}

  - persist_to_workspace:
      root: ~/tmp
      paths: ./

build-app:
<<: *defaults

docker:
  - image: circleci/openjdk:8-jdk-node


steps:
  - attach_workspace:
       at: ~/tmp

  - restore_cache:
      key: cache-{{ checksum "pom.xml" }}

  - run: chmod 700 resources/circleci/*.sh   
  - run: 
      name: Getting DB password
      command: resources/circleci/env-setup.sh

  - run: echo 'export ENV="$(echo $CIRCLE_TAG | cut -d '-' -f 2)"' >> $BASH_ENV
  - run: echo $ENV
  - run: echo $dbPasswordDev
  - run: export PASS=$(aws ssm get-parameters --names "/enterprise/org/dev/spring.datasource.password" --with-decryption --query "Parameters[0].Value" | tr -d '"') >> $BASH_ENV
  - run: echo $PASS
  - run: mvn resources:resources liquibase:update -P$ENV,pre-release


workflows:
version: 2
build-deploy:
jobs:
  - checkout-code:
      <<: *filters



  - build-app:
      requires:
        - checkout-code

      <<: *filters
当我在env-set.sh中回显$dbPasswordDev时,我看到了该值,但是在config.yml中,我没有看到该值,我看到了空白/空字符串。另外,当我尝试在config.yml中使用$PASS回显时,我希望看到该值,但根据 ,您需要将“export foo=bar”回送到$BASH_ENV中(这只是启动BASH会话时运行的文件):

因此,在env-setup.sh文件中:

echo“export dbPasswordDev=$dbPassword”>>$BASH\u ENV

这里有一个更高级的例子,可以从
.env
文件加载变量

version: 2
aliases:

  - &step_process_dotenv
      run:
        name: Process .env file variables
        command: echo "export $(grep -v '^#' .env | xargs)" >> $BASH_ENV

jobs:
  build:
    working_directory: ~/project
    docker:
      - image: php
    steps:
      - checkout
      - *step_process_dotenv
包含测试的源存储库:

CI运行结果:

version: 2
aliases:

  - &step_process_dotenv
      run:
        name: Process .env file variables
        command: echo "export $(grep -v '^#' .env | xargs)" >> $BASH_ENV

jobs:
  build:
    working_directory: ~/project
    docker:
      - image: php
    steps:
      - checkout
      - *step_process_dotenv