GitHub操作-定义作业之间的工作流级环境变量 [英] GitHub Action - Define Workflow Level Environment Variable Between Jobs
本文介绍了GitHub操作-定义作业之间的工作流级环境变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望在我的Github操作工作流中定义和设置作业之间的环境变量。 下面的工作流是我尝试过的,但不幸的是,环境变量GIT_PR_SHA_Short和E2E_GIT_PR_SHA不起作用。
可以吗?
name: Git Pull Request Workflow
on:
workflow_dispatch:
pull_request:
branches:
- master
env:
GIT_PR_SHA: ${{github.event.pull_request.head.sha}}
GIT_PR_SHA_SHORT: "${{ env.GIT_PR_SHA:0:10 }}"
ENV_NAME: test
E2E_GIT_PR_SHA: "${{ env.ENV_NAME }}-${{ env.GIT_PR_SHA_SHORT }}"
jobs:
first-job:
name: Build Docker Image
runs-on: ubuntu-latest
steps:
- name: First Echo Step
run: |
echo "GIT_PR_SHA_SHORT = ${GIT_PR_SHA_SHORT}"
echo "E2E_GIT_PR_SHA = ${E2E_GIT_PR_SHA}"
second-job:
name: Build Docker Image
runs-on: ubuntu-latest
steps:
- name: Second Echo Step
run: |
echo "GIT_PR_SHA_SHORT = ${GIT_PR_SHA_SHORT}"
echo "E2E_GIT_PR_SHA = ${E2E_GIT_PR_SHA}"
推荐答案
您使用${{ env.VARIABLE_NAME }}
Not${VARIABLE_NAME}
引用工作流的环境变量。后者是bash语法,但它们不是外壳环境变量,它们是工作流环境变量。它们是工作流执行的一部分,而不是外壳上下文的一部分。
引用工作流环境变量:
name: Git Pull Request Workflow
on:
workflow_dispatch:
pull_request:
branches:
- master
env:
one: 1
two: zwei
three: tres
jobs:
first-job:
runs-on: ubuntu-latest
steps:
- run: |
echo "${{ env.one }}"
echo "${{ env.two }}"
echo "${{ env.three }}"
(我喜欢为我的工作流环境变量使用lower-case
,为我的外壳环境变量使用UPPER_CASE
,以便我更清楚地知道哪一个是哪个。)
同样,这也不起作用:
env:
GIT_PR_SHA_SHORT: "${{ env.GIT_PR_SHA:0:10 }}"
将bash语法:0:10
与工作流语法混合在一起,但工作流变量不通过任何外壳运行。分析工作流文件时尚未启动任何虚拟机,因此没有外壳程序来运行。
如果要使用bash表达式来操作环境,则需要创建一个运行bash的步骤来执行该操作,并且需要使用::set-env
或::set-output
语法。
然后,您可以使用${{ steps... }}
上下文引用step
的输出。
遗憾的是,在不同的作业之间传递数据比较困难,因为它们运行在不同的虚拟机上。您需要设置整个工作流本身的变量。您需要首先::set-output
使其对作业可见,然后才能将作业的可见性提高到工作流。
name: Demonstration
on:
push:
branches: [master]
jobs:
first-job:
runs-on: ubuntu-latest
steps:
- id: identify
run: |
# use bash variable expression to get the substring
export GIT_PR_SHA="${{ github.sha }}"
export GIT_PR_SHA_SHORT="${GIT_PR_SHA:0:10}"
echo "::set-output name=git_pr_sha::${GIT_PR_SHA}"
echo "::set-output name=git_pr_sha_short::${GIT_PR_SHA_SHORT}"
outputs:
git_pr_sha: ${{ steps.identify.outputs.git_pr_sha }}
git_pr_sha_short: ${{ steps.identify.outputs.git_pr_sha_short }}
second-job:
needs: first-job
runs-on: ubuntu-latest
steps:
- run: |
echo "${{ needs.first-job.outputs.git_pr_sha }}"
echo "${{ needs.first-job.outputs.git_pr_sha_short }}"
这篇关于GitHub操作-定义作业之间的工作流级环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文