gpt4 book ai didi

github Action 表达式 - 拆分字符串

转载 作者:行者123 更新时间:2023-12-05 01:50:06 25 4
gpt4 key购买 nike

我正在尝试使用当前分支名称的一部分作为在 CI 管道中发布 docker 镜像的标签。问题是在我的组织中,有一个命名分支的约定,例如 feature/foo,并且 docker 标签不能包含斜杠。所以我想在 '/' 符号上拆分字符串并取最后一部分。

带有斜杠的完整分支名称应该在变量 github.ref_name 中。这是我要评估的表达式:${{ github.ref_name.split('/')[-1] }}

我收到此错误:无法插入表达式 'format('{0}', github.ref_name.split('/')[-1])': 解析失败:意外标记“(”在解析函数调用的参数时。期待 ",", ")"

github actions 表达式中操作字符串的选项有哪些?我没有在文档中找到它 https://docs.github.com/en/actions/learn-github-actions/expressions

最佳答案

改进:

此技术不需要从操作市场引入任何东西。

将此添加到 steps: 中的一个操作中:

      - name: Split branch name
env:
BRANCH: ${{ github.ref_name }}
id: split
run: echo "::set-output name=fragment::${BRANCH##*/}"

它捕获 shell 命令的输出。唯一必要的操作是将 github.ref_name 设置为环境变量并使用 parameter expansion得到你想要的分支名称的一部分。

  • ## 贪婪地从前面移除后续模式
  • */ 匹配任何后跟 /
  • 的内容
  • 因此,##*/ 删除了包括最后一个正斜杠在内的所有内容。

因为 idsplit,并且 name=fragment,所以您可以使用 steps.split.outputs 引用您的拆分字符串。片段。例如,

      # Another step
- name: Test variable
run: |
echo ${{ steps.split.outputs.fragment }}

除了 ##< 之外,其他参数扩展功能在这里也很有用,例如 #%%%/.

220829:最终更新

最初我使用 $(echo ${BRANCH##*/}) 生成了另一个进程,但这是不必要的。可以直接引用变量。


原创:

我正在做一些基本相同的事情,使用一个 Action 是最简单的临时解决方法,但我也更喜欢内置的东西,比如字符串拆分表达式。现在这是有效的方法。

      - uses: jungwinter/split@master
id: branch
with:
msg: ${{ github.ref_name }}
separator: "/"
maxsplit: -1

来自其 repo :

Outputs

  • _0, _1, ..., _n: Each result of a split
    • According to metadata syntax of outputs, it has _ prefix
    • Currently, support only 100 splits
  • length: Length of the splits

因此,我可以使用 steps.branch.outputs._n 引用字符串的每个部分,其中 branch 是 id,n 作为拆分索引。

我一直在寻找分支名称中的第一个值而不是最后一个值,因此我可以将 maxsplit 设置为 1 并只取 _0。在您的情况下,您可能需要做一些魔术来检查 length 并从那里选择索引。

关于github Action 表达式 - 拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73402042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com