我正在用Github动作构建Docker图像,并想用分支名称标记图像。
我找到了GITHUB_REF变量,但它导致了refs/heads/feature-branch-1,我只需要feature-branch-1。
我正在用Github动作构建Docker图像,并想用分支名称标记图像。
我找到了GITHUB_REF变量,但它导致了refs/heads/feature-branch-1,我只需要feature-branch-1。
当前回答
对于使用Windows映像来运行操作的人,有几个要点需要了解:
假设GitHub动作使用CMD shell是不正确的。他们默认使用PowerShell。 您可以指定shell使用以下方式:
- run: |
...
shell: cmd
您可以使用值'bash'在bash shell上下文中执行命令。
所以,总而言之,你不需要浪费潜在的时间试图弄清楚如何以破旧的cmd方式做事(就像我做的那样)。
为了简单地获取当前分支的名称,你可以在将shell设置为'bash'时使用流行的解决方案,或者使用例如下面的简单方法在默认PowerShell中设置变量:
$branchName = $Env:GITHUB_REF -replace "refs/heads/", ""
其他回答
我不得不这样做了几次不同的事件,在PR同步事件上运行,然后推到主(例如,构建标记容器图像),我不特别喜欢:
在私人回购中使用第三方行动。 使用表达式语法,因为我发现它是一个相当糟糕的开发经验。 必须记住变量展开替换是如何工作的,因为我也倾向于使用/分离的分支,例如fix/123。
我想我会添加一个小bash片段,将工作在push和pull_request事件,因为我在这里没有看到一个:
echo "${GITHUB_REF_NAME}" | grep -P '[0-9]+/merge' &> /dev/null && export ref="${GITHUB_HEAD_REF}" || export ref="${GITHUB_REF_NAME}"
$ref变量将保存push和pull_request事件的分支名称,并将处理gitflow/style/branches。
这是基于GH操作为运行在pr同步上的操作创建了一个(通常是意外的){pr number}/merge分支的假设,当分支名称与(perl风格)正则表达式匹配并遵循&&路径导出ref作为GITHUB_HEAD_REF的值时,grep调用只会返回0。或者,对于不匹配正则表达式的分支(如main)。
grep上的输出重定向只是防止regex匹配输出到标准输出的情况。
当然,如果您需要在匹配正则表达式的分支上使用push事件,那么这将不起作用。
现在不建议使用setenv。建议使用环境文件。基于@youjin的回答,同时仍然允许功能/分支(用-替换所有/的出现),我现在使用这个:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Get branch name (merge)
if: github.event_name != 'pull_request'
shell: bash
run: echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | tr / -)" >> $GITHUB_ENV
- name: Get branch name (pull request)
if: github.event_name == 'pull_request'
shell: bash
run: echo "BRANCH_NAME=$(echo ${GITHUB_HEAD_REF} | tr / -)" >> $GITHUB_ENV
- name: Debug
run: echo ${{ env.BRANCH_NAME }}
if: github.ref == 'refs/heads/integration' && github.event_name == 'push'
您可以使用上面的命令替换您想要运行的任何分支或事件。
下面是一个代码片段,它是一个基于$GITHUB_REF的环境变量,如果不存在,则默认为dev。
根据您的需求调整sed命令。
export GIT_BRANCH=$(echo ${GITHUB_REF:-dev} | sed s/.*\\///g)
在这里重复一下,以便更好地看到其他人在之前的回复中作为简单注释写的内容:
https://docs.github.com/en/actions/learn-github-actions/environment-variables
只在这个环境变量中暴露了pull请求的分支名称:
仅为拉请求事件设置。总行的名称。
在GitHub动作中,对应的上下文键是:
github.head_ref