在Github Action中,有没有一种方法只获取项目文件夹的名称?

60

我可以使用 ${{ github.repository }} 获取 repoowner/repo-name,但我想只获取 repo-name

顺便说一下,GitLab 有一个简单明了的变量。

如何从 .yaml 文件中直接访问环境变量而不是在脚本内部? ${{ $ENV_VAR }} 可以吗?可能不行。

有没有办法直接在 yaml 中删除或替换斜杠?

  build:
    needs: test
    name: Build release Zip
    runs-on: ubuntu-latest
    env:
      DEPLOY_REF: ${{ github.sha }}
      DEPLOY_REF_SHORT: ${{ github.sha }}
      DEPLOY_ZIPFILE: ${{ github.workspace }}/build/zip/${{ github.repository }}-${{ github.sha }}.zip
    steps:
2个回答

100

github 上下文还包含事件数据,您可以从中轻松读取一些更详细的信息。在这种情况下,${{ github.event.repository.name }} 只会给出 repo-name 部分。

创建一个测试工作流程/作业以打印所有上下文数据可能是个好主意,直到您熟悉它们为止,参见将上下文信息打印到日志文件中的示例


至于替换文本,您始终可以专门用::set-env::set-output准备你稍后需要的所有内容之一。您只需要按特定格式打印名称/值,以便在此过程中使用任何您熟悉的 shell 来操作文本:

# All steps after this one will have env variable `GHA_BRANCH` passed to them.
- run:   echo ::set-env name=GHA_BRANCH::$(echo $GITHUB_REF | awk -F / '{print $3}')
  shell: bash

我可以在工作流程范围内使用 - run 吗?在所有作业开始之前吗?可能不行,所以我需要为每个作业重新做一遍?了解 ::set-env 是很好的。 - redanimalwar
如果有N个作业需要相同的环境调整,则可以将它们全部保存在脚本文件中。只需将- run: ./setup-env.sh(这将调用echo ::set-env)添加为每个作业的第一步 - 稍后,在_.sh_中进行的任何环境调整都将影响整个工作流程。 - Samira
2
${{ github.event.repository.name }} 对我来说不起作用,至少在 env 下是空字符串/未定义的。 ${{ github.repository_owner }} 虽然有效,但并不能解决问题。 - Simon Alling
这对于通过cron计划的操作无效。事件负载为空。 - Garry Polley
打印上下文信息到日志文件中的示例。链接已损坏,请参阅此链接 https://dev59.com/K1EG5IYBdhLWcg3wWbBH#72920652。 - Igonato
显示剩余3条评论

23

除了 @Samira 的回答,您还可以使用 ${GITHUB_REPOSITORY#*/} 来获取仓库名称,因为它会将所有位于 / 前缀之前的内容都删除。

例如,在我的工作流程中,我使用:

- run: echo ::set-env name=TF_VAR_instance_label::${GITHUB_REPOSITORY#*/}-${GITHUB_SHA:0:7}

2
新的Bash shell用户可以在Bash参考手册§3.5.3 Shell参数扩展中找到井号(#)。 - li ki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接