我试图根据当前的$ CIRCLE_BRANCH在CircleCI上为环境变量设置不同的值。 我尝试在CircleCI设置上设置两个不同的值,并在部署阶段相应地导出它们,但这不起作用:
deployment:
release:
branch: master
commands:
...
- export API_URL=$RELEASE_API_URL; npm run build
...
staging:
branch: develop
commands:
...
- export API_URL=$STAGING_API_URL; npm run build
...
我怎么能实现这个目标?
提前致谢。
答案 0 :(得分:4)
在我的项目中,我使用bash脚本对其进行归档。
例如,这是我的 circle.yml :
machine:
node:
version: 6.9.5
dependencies:
override:
- yarn install
compile:
override:
- chmod -x compile.sh
- bash ./compile.sh
这是我的compile.sh
#!/bin/bash
if [ "${CIRCLE_BRANCH}" == "development" ]
then
export NODE_ENV=development
export MONGODB_URI=${DEVELOPMENT_DB}
npm run build
elif [ "${CIRCLE_BRANCH}" == "staging" ]
then
export NODE_ENV=staging
export MONGODB_URI=${STAGING_DB}
npm run build
elif [ "${CIRCLE_BRANCH}" == "master" ]
then
export NODE_ENV=production
export MONGODB_URI=${PRODUCTION_DB}
npm run build
else
export NODE_ENV=development
export MONGODB_URI=${DEVELOPMENT_DB}
npm run build
fi
echo "Sucessfull build for environment: ${NODE_ENV}"
exit 0
答案 1 :(得分:4)
这个问题现在已经快两年了,但是最近我正在寻找类似的解决方案,但是我找到了。
它是指CircleCI的称为 Contexts (https://circleci.com/docs/2.0/contexts/)的功能。
多亏了 Contexts ,您可以创建多组环境变量,这些变量在整个组织内都可用。然后,您可以根据工作流程的filters
属性动态加载其中之一。
让我通过以下示例进行演示:
假设您有两个分支,并且希望将每个分支部署到不同的服务器中。您要做的是:
创建两个上下文(例如prod-ctx
和dev-ctx
),并在每个上下文中定义SERVER_URL
environment变量。您需要登录CircleCI仪表板,然后转到“设置”->“上下文”。
.circleci/config.yml
中定义,定义作业的模板,并将其命名为deploy
:
deploy: &deploy
steps:
- ...
workflows:
version: 2
deploy:
jobs:
- deploy-dev:
context: dev-ctx
filters:
branches:
only:
- develop
- deploy-prod:
context: prod-ctx
filters:
branches:
only:
- master
deploy-prod
和deploy-dev
,它们将使用deploy
模板:jobs:
deploy-dev:
<<: *deploy
deploy-prod:
<<: *deploy
以上步骤将创建两个作业,并根据filters
的条件运行它们。此外,每个作业都会获得不同的环境变量集,但是部署的逻辑保持不变,并且仅定义一次。因此,我们获得了不同分支的动态环境变量值。