【问题标题】:How to set env vars for many deployment environments while using github actions如何在使用 github 操作时为许多部署环境设置 env var
【发布时间】:2022-01-14 14:24:40
【问题描述】:

我需要使用 github 操作将我的堆栈部署到许多环境,例如 developmentproduction。我之前的实现不再起作用了,虽然我有一个新的工作流程,但为多个 env 设置 env var 似乎是重复的,这让我认为必须有更好的方法。

我之前的:

jobs:
  build-and-deploy:
    name: Build Container and Deploy
    runs-on: ubuntu-latest
    steps:
      - name: Set env to development
        if: ${{ !endsWith(github.ref, '/main') }}
        run: |
          echo "GCP_PROJECT=my-project-dev" >> $GITHUB_ENV
          echo "NODE_ENV=development" >> $GITHUB_ENV

      - name: Set env to production
        if: ${{ endsWith(github.ref, '/main') }}
        run: |
          echo "GCP_PROJECT=my-project-prod" >> $GITHUB_ENV
          echo "NODE_ENV=production" >> $GITHUB_ENV
    ...

我现在拥有的:

jobs:
  build-and-deploy:
    name: Build Container and Deploy
    runs-on: ubuntu-latest
    env:
      GCP_PROJECT: ${{ (!endsWith(github.ref, '/main') && 'my-project-dev') || 'my-project-prod' }}
      NODE_ENV: ${{ (!endsWith(github.ref, '/main') && 'development') || 'production' }}
    steps:
    ...

显然,在示例中看起来并没有那么糟糕,但对于更多环境变量,${{ (!endsWith(github.ref, '/main') && 'dev-value') || 'prod-value' }} 似乎又吵又脏。

那么,这样做的正确方法是什么?

【问题讨论】:

    标签: github deployment devops github-actions cicd


    【解决方案1】:

    我会以不同的方式构建您的工作流程,将一步用于生产,一步用于开发。

    虽然这似乎是重复的,但它可以非常清楚地说明您在生产环境中传递了哪些变量,以及在开发中传递了哪些变量。

    这也意味着您只需要一个if 并且读者可以立即清楚仅在主分支上会发生什么。

    注意:您的条件 endsWith(/main) 也会在名为 feature/main 的分支上触发。如下所示,我建议使用整个参考。

    steps:
      - name: Deploy to Development
        if: github.ref != 'refs/head/main'
        uses: my-action-to-deploy
        env:
          GCP_PROJECT: my-dev-project
          NODE_ENV: development
    
      - name: Deploy to Production
        if: github.ref == 'refs/head/main'
        uses: my-action-to-deploy
        env:
          GCP_PROJECT: my-prod-project
          NODE_ENV: production
    

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 2021-01-07
      • 2022-01-04
      • 2018-06-14
      • 2020-07-21
      • 2020-02-05
      • 2022-09-27
      • 2021-06-18
      • 2020-10-05
      相关资源
      最近更新 更多