我可以跨作业定义全局吗?



我有一个2个工作的工作流:

on: [push]
jobs:
ssql:
runs-on: ubuntu-latest
### bunch of steps in between ###
- name: Upload data as artifact
uses: actions/upload-artifact@v2
with:
name: ${{ env.GAME }} + "-" + "data"
path: output_data/training-data.csv
env:
GAME: "FunGame"
Rtrain:
runs-on: ubuntu-latest
name: Train model
needs: ssql
steps:
- name: checkout current repo
uses: actions/checkout@v2
- name: Retreive data from ssql job 
uses: actions/download-artifact@v2
with:
name: ${{ env.GAME }} + "-" + "data"
env:
GAME: "FunGame"

我必须在每个作业中设置两次env变量$GAME。是否有任何语法,我可以在顶部添加这个,使它真正跨工作全局,例如:

on: [push]
env:
GAME: "FunGame"
jobs: ...

您可以完全按照您在工作流级别描述的那样设置env变量。

请注意,如果它们具有相同的名称,它可能与在作业级别或步骤级别设置的env变量冲突。在这种情况下,使用的变量是最具体的:STEP/JOB/WORKFLOW

参考文献1 +参考文献2

下面是一个如何在不同级别(没有冲突)使用环境变量的示例:


name: Environment Workflow
on:
workflow_dispatch:
env:
WORKFLOW_VARIABLE: WORKFLOW
jobs:
job1:
runs-on: ubuntu-latest
env:
JOB_VARIABLE: JOB
steps:
- name: Run Commands with various variables
if: ${{ env.WORKFLOW_VARIABLE == 'WORKFLOW' }}
env:
STEP_VARIABLE: STEP
run: |
echo "Hello World"
echo "This is the $WORKFLOW_VARIABLE environment variable"
echo "This is the $JOB_VARIABLE environment variable"
echo "This is the $STEP_VARIABLE environment variable"
  • 完整的工作流实现(如果你想复制)
  • 以前的工作流运行显示