我正在尝试根据当前的$ 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
...
我怎么能实现这一目标?
提前致谢。
在我的项目中,我使用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
问题已经差不多2年了,但最近我一直在寻找类似的解决方案而且我找到了它。
它指的是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
条件运行它们。此外,每个作业都有不同的环境变量集,但部署逻辑保持不变并定义一次。由于这个原因,我们为不同的分支实现了动态环境变量值。