74

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

我的工作流程 yaml 被这样的标签触发:

on:
  push:
    tags:
      - 'v*.*.*'

我想稍后在工作流程中使用该版本号作为文件路径。

4

6 回答 6

122

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

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

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set env
        run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
      - name: Test
        run: |
          echo $RELEASE_VERSION
          echo ${{ env.RELEASE_VERSION }}

或者,使用set-output

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set output
        id: vars
        run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
      - name: Check output
        env:
          RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
        run: |
          echo $RELEASE_VERSION
          echo ${{ steps.vars.outputs.tag }}
于 2019-10-01T04:38:06.537 回答
23

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

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

- name: Create tag artifact
  uses: actions/upload-artifact@v2
  with:
    name: ${{github.ref_name}}
    path: Release
于 2021-11-10T19:21:02.987 回答
4

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

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

这是我使用 Chris Lennon 的操作运行的示例:

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
于 2019-10-02T04:08:57.097 回答
4

什么对我有用:

run: echo "GIT_TAG=`echo $(git describe --tags --abbrev=0)`" >> $GITHUB_ENV
于 2020-12-03T16:34:00.407 回答
3

这是一个工作流运行,显示GITHUB_REF环境变量包含refs/tags/v0.0.2

我通过创建标签来运行它,然后执行git push origin v0.0.2.

以下是您在该日志中看到的工作流程片段:

steps:
- uses: actions/checkout@v1
- name: Dump GitHub context
  env:
    GITHUB_CONTEXT: ${{ toJson(github) }}
  run: echo "$GITHUB_CONTEXT"
  if: runner.os != 'Windows'
- name: Show GitHub ref
  run: echo "$GITHUB_REF"
  if: runner.os != 'Windows'
- name: Dump event JSON
  env:
    EVENT_JSON_FILENAME: ${{ github.event_path }}
  run: cat "$EVENT_JSON_FILENAME"
  if: runner.os != 'Windows'

由于日志已被删除,以下是截图作为证据:

在此处输入图像描述

于 2019-10-01T04:50:40.460 回答
1

您可以使用外壳扩展:

echo "${GITHUB_REF##*/}"
于 2022-02-14T20:37:19.300 回答