在Github Actions中获取当前的推送标签

Jon*_*n B 6 continuous-integration github github-actions

有没有办法访问在Github Action中推送的当前标签?在CircleCI中,您可以使用$CIRCLE_TAG变量访问此值。

我的工作流程Yaml由类似这样的标签触发:

on:
  push:
    tags:
      - 'v*.*.*'
Run Code Online (Sandbox Code Playgroud)

我想在以后的工作流程中将该版本号用作文件路径。

All*_*uky 171

GitHub 上下文提供github.ref_name. 您可以像这样使用它:${{github.ref_name}}

以下是工件文件名中这种用法的示例,它可能类似于您询问的文件路径用法:

- name: Create tag artifact
  uses: actions/upload-artifact@v2
  with:
    name: ${{github.ref_name}}
    path: Release
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,应该是 2021 年以后的解决方案 (16认同)
  • 这是否也适用于“on.release”工作流程,或者在这种情况下使用“${{ github.event.release.tag_name }}”更好? (6认同)
  • 对我来说 ${{ github.ref_name}} 返回字符串“master”,而不是标签 (2认同)

Jir*_*aya 47

这是 2022 年的答案。不需要做奇怪的解析

on:
  push:
    tags:
      - '*'
jobs:
  github-example-tags:
    runs-on: ubuntu-latest
    steps:
     - name: GitHub Tag Name example
       run: |
         echo "Tag name from GITHUB_REF_NAME: $GITHUB_REF_NAME"
         echo "Tag name from github.ref_name: ${{  github.ref_name }}"

Run Code Online (Sandbox Code Playgroud)

https://docs.github.com/en/actions/learn-github-actions/contexts#github-context

https://docs.github.com/en/actions/learn-github-actions/environment-variables#default-environment-variables


lew*_*lbr 10

对我有用的:

run: echo "GIT_TAG=`echo $(git describe --tags --abbrev=0)`" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)


pet*_*ans 7

据我所知,没有标签变量。但是,可以从中提取GITHUB_REF包含检出参考的文件,例如refs/tags/v1.2.3

试试这个工作流程。它使用提取的版本创建一个新的环境变量,您可以在以后的步骤中使用它。

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
      - name: Test
        run: |
          echo $RELEASE_VERSION
          echo ${{ env.RELEASE_VERSION }}
Run Code Online (Sandbox Code Playgroud)

或者,使用set-output

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set output
        id: vars
        run: echo ::set-output name=tag::$(echo ${GITHUB_REF:10})
      - name: Check output
        env:
          RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
        run: |
          echo $RELEASE_VERSION
          echo ${{ steps.vars.outputs.tag }}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,我不会使用“${GITHUB_REF:10}”来过滤标签名称,而是使用参数扩展“${GITHUB_REF#refs/*/}”。这将按预期将 `/refs/tags/v1.0.1` 扩展为 `v1.0.1`,但也可以使用分支名称:`/refs/heads/master` 将扩展为 `master`,请参阅 https:// /www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html (18认同)
  • 这意味着它正在提取从第 10 个位置(基于 0 的索引)开始的子字符串。因此它会跳过 `refs/tags/` 并只返回字符串的最后一部分。 (4认同)
  • 但是如果您想访问另一个工作流程文件中的 var 该怎么办? (2认同)

Jon*_*n B 7

因此,感谢@peterevans 的所有帮助,我成功实现了我想要的结果:

  • 标记提交
  • 推送标签以触发github操作
  • github 操作将 git 标签设置为环境变量
  • 运行安装和构建
  • 使用chrislennon/action-aws-cli密钥密钥的操作来安装 aws cli
  • 运行命令以使用标签 env var 作为目录名称将构建同步到新的 S3 存储桶

这是我使用克里斯·列侬的动作运行的示例:

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
      - name: yarn install & build
        run: |
          yarn install
          yarn build
      - uses: chrislennon/action-aws-cli@v1.1
      - name: Publish to AWS S3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        run: aws s3 sync dist s3://$AWS_S3_BUCKET/$RELEASE_VERSION/ --acl public-read
Run Code Online (Sandbox Code Playgroud)

  • 即使这个问题很老了,我还是会回答,以供将来参考:`:10`从环境变量`GITHUB_REF`中删除前十个字符,其中包含`refs/tags/v1.2.3`,因此它产生`v1 .2.3` (11认同)