Dmi*_*rii 3 github github-actions
我使用触发我的工作流程
on:
push:
tags:
Run Code Online (Sandbox Code Playgroud)
GITHUB_REF 在这种情况下不会包含分支名称,我怎么能得到它?
基于爱德华的答案,这里是一个现代脚本,它允许获取分支名称并在作业之间传递它,包括允许作业根据分支有条件地运行
# 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..."
Run Code Online (Sandbox Code Playgroud)
您需要进行一些字符串操作才能实现这一目标。基本上在标签创建推送期间,就像你要git checkout v<tag>在本地做但没有对原始分支的引用。这就是为什么您需要-r在 git branch contains 命令中使用标志的原因。
我们使用以下两个命令获得干净的分支。
raw=$(git branch -r --contains ${{ github.ref }})
branch=${raw/origin\/}
Run Code Online (Sandbox Code Playgroud)
这是一个创建分支环境的管道
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 }}
Run Code Online (Sandbox Code Playgroud)
注意:我通过创建标签并将其推送到原点来触发上述管道