CircleCI - 根据分支设置不同的环境变量值

8
我正在尝试根据当前的$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
      ...

我该如何实现这个目标?

提前感谢。

2个回答

17

这个问题已经有近2年了,但最近我在寻找类似的解决方案时找到了它。

它指的是CircleCI的一个功能,称为“上下文” (Contexts) (https://circleci.com/docs/2.0/contexts/)。

由于有了Contexts,您可以创建多个环境变量集,在整个组织中都可以使用。然后,您可以根据工作流程的filters属性动态加载其中之一。

让我用以下示例来演示:

假设您有两个分支,您希望将每个分支部署到不同的服务器。您需要执行以下操作:

  1. 创建两个上下文(例如prod-ctxdev-ctx),并在每个上下文中定义SERVER_URL环境变量。您需要登录CircleCI仪表板,并进入“设置”->“上下文”。

  2. 在您的.circleci/config.yml中定义作业的模板,并将其命名为deploy

deploy: &deploy
steps:
  - ...
  1. 定义工作流程:
workflows:
  version: 2
  deploy:
    jobs:
      - deploy-dev:
          context: dev-ctx
          filters:
            branches:
              only:
                - develop
      - deploy-prod:
          context: prod-ctx
          filters:
            branches:
              only:
                - master
  1. 最后定义两个作业deploy-proddeploy-dev,它们将使用deploy模板:
jobs:
  deploy-dev:
    <<: *deploy

  deploy-prod:
    <<: *deploy

上述步骤创建了两个作业,并根据filters条件运行它们。此外,每个作业都获得不同的环境变量集合,但是部署逻辑保持不变,并且仅定义一次。由于这一点,我们实现了不同分支的动态环境变量值。


非常感谢!只是一个提示:您也可以只有一个名为“deploy”的作业,而无需使用作业模板。只需在工作流中重复两次相同的作业“deploy”,并配合正确的分支过滤器和上下文即可。 - Augusto Destrero

7

使用Bash脚本

在我的项目中,我通过使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接