如何在 Circle 中设置环境变量 CI
How to set an Env Variable in Circle CI
我是 运行 在 circle ci 上使用 Maven liquibase 插件的数据库工作。当我尝试将 aws cli 返回的值设置为自定义变量时,我需要从 AWS 参数 store.But 读取用户名、密码、dburl 等参数,它总是 blank/empty。我知道该值存在,因为 mac 终端上的相同命令 returns 一个值。
我正在使用 Bash 脚本通过 circle 安装 AWS CLI ci job.When 我在 .sh 文件中回显密码 我看到了值但是当我在 config.yml 上回显它时,我看到空白的空值。我也尝试使用 aws ssm 和 config.yml 文件来获取值,但即使在那里,该值也是空白的。
我的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 中我没有看到该值,我看到了 blank/empty 字符串。另外,当我尝试在 config.yml 中回显 $PASS 时,我希望看到该值,但是我看到空白的空字符串
根据
their official documentation,你需要 echo "export foo=bar" 到 $BASH_ENV (这只是一个在 bash 会话时运行的文件开始):
所以在你的 env-setup.sh 文件中:
echo "export dbPasswordDev=$dbPassword" >> $BASH_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
带有测试的源存储库:https://github.com/integratedexperts/circleci-sandbox/tree/feature/dotenv
CI 运行 结果:https://circleci.com/gh/integratedexperts/circleci-sandbox/14
我是 运行 在 circle ci 上使用 Maven liquibase 插件的数据库工作。当我尝试将 aws cli 返回的值设置为自定义变量时,我需要从 AWS 参数 store.But 读取用户名、密码、dburl 等参数,它总是 blank/empty。我知道该值存在,因为 mac 终端上的相同命令 returns 一个值。
我正在使用 Bash 脚本通过 circle 安装 AWS CLI ci job.When 我在 .sh 文件中回显密码 我看到了值但是当我在 config.yml 上回显它时,我看到空白的空值。我也尝试使用 aws ssm 和 config.yml 文件来获取值,但即使在那里,该值也是空白的。
我的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 中我没有看到该值,我看到了 blank/empty 字符串。另外,当我尝试在 config.yml 中回显 $PASS 时,我希望看到该值,但是我看到空白的空字符串
根据 their official documentation,你需要 echo "export foo=bar" 到 $BASH_ENV (这只是一个在 bash 会话时运行的文件开始):
所以在你的 env-setup.sh 文件中:
echo "export dbPasswordDev=$dbPassword" >> $BASH_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
带有测试的源存储库:https://github.com/integratedexperts/circleci-sandbox/tree/feature/dotenv
CI 运行 结果:https://circleci.com/gh/integratedexperts/circleci-sandbox/14