【问题标题】:How to set an Env Variable in Circle CI如何在 Circle CI 中设置环境变量
【发布时间】:2019-06-26 20:23:10
【问题描述】:

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

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

我的 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-setup.sh

sudo apt-get update
sudo apt-get install -y python-pip python-dev
sudo pip install awscli


aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
aws configure set aws_region $AWS_DEFAULT_REGION


dbPassword=`aws ssm get-parameters --names "/enterprise/org/dev/spring.datasource.password" --with-decryption --query "Parameters[0].Value" | tr -d '"' `
echo "dbPassword = ${dbPassword}"

export dbPasswordDev=$dbPassword >> $BASH_ENV
echo $"Custom = $dbPasswordDev"

当我在 env-set.sh 中回显 $dbPasswordDev 时,我看到了该值,但是在 config.yml 中我看不到该值,并且看到了空白/空字符串。另外,当我尝试在 config.yml 中回显 $PASS 时,我希望看到该值,但是我看到空白的空字符串

【问题讨论】:

    标签: shell aws-cli circleci circleci-2.0 circleci-workflows


    【解决方案1】:

    根据 their official documentation,您需要将“export foo=bar”回显到 $BASH_ENV(它只是一个在 bash 会话开始时运行的文件):

    所以在你的 env-setup.sh 文件中:

    echo "export dbPasswordDev=$dbPassword" >> $BASH_ENV
    

    【讨论】:

      【解决方案2】:

      这是一个更高级的例子,变量可以从.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
      

      带有测试的源代码库:https://github.com/integratedexperts/circleci-sandbox/tree/feature/dotenv

      CI 运行结果:https://circleci.com/gh/integratedexperts/circleci-sandbox/14

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-15
        • 1970-01-01
        • 2022-11-02
        • 2019-11-29
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多