gpt4 book ai didi

github - 如何根据分支设置工作流环境变量

转载 作者:行者123 更新时间:2023-12-03 13:45:33 25 4
gpt4 key购买 nike

我目前有两个几乎相同的 GitHub 操作工作流文件,只有一个配置为对分支 master 上的 push/pull_requests 使用react。另一个在 production .
登台工作流程如下所示:

env:
GCLOUD_PROJECT: my-project-stg
VERCEL_TARGET: staging

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
生产工作流程开始如下:
env:
GCLOUD_PROJECT: my-project-prd
VERCEL_TARGET: production

on:
push:
branches: [ production ]
pull_request:
branches: [ production ]
其余的工作流文件是相同的,所以这显然不是很 DRY。
我想有 1 个单一的工作流文件,并以某种方式根据分支名称在两组变量之间切换。有没有办法实现这一点,或者我可能从错误的角度来解决这个问题?
如果可以在共享基本定义上扩展两个工作流文件,我猜也可以解决这个问题。

最佳答案

无法从作业设置工作流级别的环境变量。每个作业都在自己的机器上运行,并在那里设置一个 env 变量只会影响该作业中的所有后续步骤。
目前有两种方式可以在作业之间共享数据;要么创建工件并使用它,要么声明并设置作业输出。后者适用于字符串值。
下面是一个例子:

name: "Main"

on:
push:
branches:
- master
- production
pull_request:
branches:
- master
- production

jobs:
init:
runs-on: ubuntu-latest
outputs:
gcloud_project: ${{ steps.setvars.outputs.gcloud_project }}
phase: ${{ steps.setvars.outputs.phase }}

steps:
- name: Cancel previous workflow
uses: styfle/cancel-workflow-action@0.4.0
with:
access_token: ${{ github.token }}

- name: Set variables
id: setvars
run: |
if [[ "${{github.base_ref}}" == "master" || "${{github.ref}}" == "refs/heads/master" ]]; then
echo "::set-output name=gcloud_project::my-project-dev"
echo "::set-output name=phase::staging"
fi

if [[ "${{github.base_ref}}" == "production" || "${{github.ref}}" == "refs/heads/production" ]]; then
echo "::set-output name=gcloud_project::my-project-prd"
echo "::set-output name=phase::production"
fi

print:
runs-on: ubuntu-latest
needs: init
steps:
- name: Print
run: echo "gcloud_project=${{needs.init.outputs.gcloud_project}}"

关于github - 如何根据分支设置工作流环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63117454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com