在 github 操作中使用环境变量,如果

Pat*_*ick 15 github-actions

我正在尝试if在 github 操作中的条件中使用环境变量,如下所示:

name: Worfklow
on:
  push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      - name: EXIT step
        if: $GITHUB_REF == 'specific-branch'
        run: exit 1

Run Code Online (Sandbox Code Playgroud)

如果当前分支等于特定分支,我想退出。

不幸的是,github 操作控制台显示错误:

Unexpected symbol: '$GITHUB_REF'
Run Code Online (Sandbox Code Playgroud)

我可以$GITHUB_REF在 a run:(它包含当前分支的地方)中使用,但不能在if:. 我究竟做错了什么?

dhi*_*ilt 55

虽然最初的问题已经在没有环境变量的情况下得到解决,但我想分享如何将它与 if 条件一起使用。

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:

      - name: Set env BRANCH
        run: echo "BRANCH=$(echo $GITHUB_REF | cut -d'/' -f 3)" >> $GITHUB_ENV

      - name: Set env NEED
        run: |
          if [[ $BRANCH == 'master' && $GITHUB_EVENT_NAME == 'push' ]]; then
              echo "NEED=true" >> "$GITHUB_ENV"
          else
              echo "NEED=false" >> "$GITHUB_ENV"
          fi

      - name: Skip Deploy?
        if: env.NEED != 'true'
        run: echo "Only pushing to 'master' causes automatic deployment"

     ...
Run Code Online (Sandbox Code Playgroud)

前两个步骤设置 2 个环境变量,第三步演示了在 if 条件中使用这些变量需要遵循的语法。

  • 这是正确的答案,但还可以更清楚。要点是:使用 `env.MYVAR` 而不是 `$MYVAR`。 (11认同)

las*_*any 10

像这样做

if: github.ref == 'specific-branch'
Run Code Online (Sandbox Code Playgroud)

参考

https://github.community/t5/GitHub-Actions/GitHub-Actions-branch-conditional/td-p/29794

  • 这并没有回答实际提出的问题,即如何从“if:”访问环境变量...如果它确实是一个环境变量而不是你可以从神奇的“github”上下文中获取的东西,那么这是如何完成的? (7认同)

Bak*_*alf 5

如果你想检查作业级别的环境变量(参考 Github context),你可以这样做:

env:
  MY_VAR: Dummy

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest         
    outputs:
      myVar: ${{ steps.init.outputs.myVar }}
    
    steps:        
      - name: Environment variables to output 
        id: init
        run: |
          echo "myVar=${{ env.MY_VAR }}" >> $GITHUB_OUTPUT
Run Code Online (Sandbox Code Playgroud)

并在另一项工作中使用它:

  second_job:
    name: Second Job
    needs: build
    if: needs.build.outputs.myVar == 'Dummy'
Run Code Online (Sandbox Code Playgroud)