我使用以下方式来触发我的工作流程:
on:
push:
tags:
GITHUB_REF
在这种情况下不包含分支名称,我该如何获取它?
GITHUB_REF
在此情况下不包含分支名称,如何获取?
我使用以下方式来触发我的工作流程:
on:
push:
tags:
GITHUB_REF
在这种情况下不包含分支名称,我该如何获取它?
GITHUB_REF
在此情况下不包含分支名称,如何获取?
您需要进行一些字符串操作才能使其正常工作。基本上,当进行标记创建推送时,就像在本地执行git checkout v<tag>
,但是没有对原始分支的引用。这就是为什么您需要在git branch中包含命令中使用-r
标志的原因。
我们可以通过以下两个命令获得干净的分支。
raw=$(git branch -r --contains ${{ github.ref }})
branch=${raw/origin\/}
这是一个创建分支环境的流水线
name: Tag
on:
create:
tags:
- v*
jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: checkout source code
uses: actions/checkout@v1
- name: Get Branch
run: |
raw=$(git branch -r --contains ${{ github.ref }})
branch=${raw/origin\/}
echo ::set-env name=BRANCH::$branch
- run: echo ${{ env.BRANCH }}
注意: 我通过创建一个标签并将其推送到 origin,触发了上述流程
set-env
已被弃用,所以我使用了echo "BRANCH=$branch" >> $GITHUB_ENV
branch=${raw##*/}
来删除最后一个斜杠之前的所有内容。fetch-depth: 0
。参考链接:https://github.com/actions/checkout#Fetch-all-history-for-all-tags-and-branches - wensveen# This only runs for tags, and the job only processes for "master" branch
name: Example
on:
push:
tags:
- "*"
jobs:
check:
runs-on: ubuntu-latest
outputs:
branch: ${{ steps.check_step.outputs.branch }}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get current branch
id: check_step
run: |
raw=$(git branch -r --contains ${{ github.ref }})
branch=${raw##*/}
echo "{name}=branch" >> $GITHUB_OUTPUT
echo "Branch is $branch."
job2:
runs-on: ubuntu-latest
needs: check # Wait for check step to finish
if: ${{ needs.check.outputs.branch == 'master' }} # only run if branch is master
steps:
- run: echo "Running task..."
github.base_ref
,而我写的是 github.event.base_ref
。我肯定是在使用 push
。这是一个可行的解决方案,已经在我的 CI/CD 中使用了。 - egvogithub.event.base_ref
而不是 github.base_ref
吗?因为它们是不同的。在我的情况下,这个方法可行。但我现在不能保证,因为那是很久以前的事了。 - egvo
git branch --contains $GITHUB_REF
或者git_branch=$(git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///")
(参见 https://dev59.com/UWnWa4cB1Zd3GeqPykOJ) - dan1st-r
标志才能使其工作。我的回答中提供了示例。 - Edward Romero