GitHub Action - 定义作业之间的工作流级别环境变量

2023-12-21

我想在我的 Github Actions Workflow 内的作业之间定义和设置环境变量。 下面的工作流程是我尝试过的,但不幸的是环境变量GIT_PR_SHA_SHORT and 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 语法,但这些不是 shell 环境变量,它们是workflow环境变量。它们是工作流程执行的一部分,而不是 shell 上下文的一部分。

要引用工作流环境变量:

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对于我的 shell 环境变量,这样我就更清楚哪个是哪个。)

同样,这也行不通:

env:
  GIT_PR_SHA_SHORT: "${{ env.GIT_PR_SHA:0:10 }}"

这是混合 bash 语法:0:10使用工作流语法,但工作流变量不通过任何 shell 运行。解析工作流文件时尚未启动虚拟机,因此没有 shell 来运行。

如果您想使用 bash 表达式来操作环境,则需要创建一个运行 bash 的步骤来执行此操作,并且需要使用::set-env or ::set-output syntax.

那么你可以参考一个step的输出使用${{ steps... }}语境。

不幸的是,在之间传递东西不同的工作比较棘手,因为它们运行在不同的虚拟机上。您需要在整个工作流程本身上设置变量。你需要首先::set-output以便它可见job,然后您可以提高从作业到工作流程的可见性。

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 }}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitHub Action - 定义作业之间的工作流级别环境变量 的相关文章

随机推荐