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

问题描述 投票:3回答:2

我正在尝试根据当前的$ 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 deployment continuous-integration continuous-deployment circleci
2个回答
4
投票

Use a bash script

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

5
投票

问题已经差不多2年了,但最近我一直在寻找类似的解决方案而且我找到了它。

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

让我用以下示例演示它:

想象一下,您有两个分支,并且您希望将它们中的每一个部署到不同的服务器中。你要做的是:

  1. 创建两个上下文(例如prod-ctxdev-ctx)并在每个上下文中定义SERVER_URLenvironment变量。您需要登录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条件运行它们。此外,每个作业都有不同的环境变量集,但部署逻辑保持不变并定义一次。由于这个原因,我们为不同的分支实现了动态环境变量值。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.