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

时间:2017-06-25 17:57:24

标签: bash deployment continuous-integration continuous-deployment circleci

我试图根据当前的$ 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 个答案:

答案 0 :(得分:4)

使用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

答案 1 :(得分:4)

这个问题现在已经快两年了,但是最近我正在寻找类似的解决方案,但是我找到了。

它是指CircleCI的称为 Contexts https://circleci.com/docs/2.0/contexts/)的功能。 多亏了 Contexts ,您可以创建多组环境变量,这些变量在整个组织内都可用。然后,您可以根据工作流程的filters属性动态加载其中之一。

让我通过以下示例进行演示:

假设您有两个分支,并且希望将每个分支部署到不同的服务器中。您要做的是:

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

  2. 在您的.circleci/config.yml中定义
  3. ,定义作业的模板,并将其命名为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的条件运行它们。此外,每个作业都会获得不同的环境变量集,但是部署的逻辑保持不变,并且仅定义一次。因此,我们获得了不同分支的动态环境变量值。