代码之家  ›  专栏  ›  技术社区  ›  Bruno Peres

如何使用workflow_run读取标记名

  •  0
  • Bruno Peres  · 技术社区  · 4 年前

    我使用Github操作有两个工作流:CI和CD。CI工作流是为新标签触发的,比如 v1.1.1 并拉取请求以开发和修补分支。

    name: CI
    
    on:
      push:
        tags: v[1-9]+.[0-9]+.[0-9]+
        
      pull_request:
        branches: [develop, hotfix*]
    

    当上一个工作流(CI)完成时,CD工作流会被触发。

    name: CD
    
    on:
      workflow_run:
        workflows: ['CI']
        push:
          tags: v[1-9]+.[0-9]+.[0-9]+
        types:
          - completed
    

    目前,我的目标是根据新标签的名称生成包(Docker镜像)。我正尝试使用以下操作读取CD工作流中的新标记名称 dawidd6/action-get-tag@v1 :

    - name: Get tag
      id: tag
      uses: dawidd6/action-get-tag@v1
    - name: Use tag
      run: echo ${{steps.tag.outputs.tag}}
    

    但我收到以下错误:

    Run dawidd6/action-get-tag@v1
    env:
      IMAGE_NAME: open-tuna-api
    Error: Not a tag ref (refs/heads/master)
    

    我的问题是:如何读取CI工作流后触发的CD工作流中的标记名称?

    0 回复  |  直到 4 年前
        1
  •  2
  •   DannyB    4 年前

    首先,您可以在不使用操作的情况下获取标签 ${GITHUB_REF##*/} .

    样本测试工作流程:

    name: Experiment
    
    on:
      push:
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - name: Debug
          run: echo "Works. Tag is ${GITHUB_REF##*/}"
    

    至于你提到的链式工作流,我不确定是否可以获得祖先工作流的标签,因为 the documentation 提到它是在默认分支上触发的,以及在该分支上的最后一次提交。