Github操作:将长命令拆分为多行

时间:2020-01-28 17:33:22

标签: github yaml github-actions

我有一个非常长的Github操作命令:

name: build

on: [push]

jobs:
    build:
        runs-on: ubuntu-18.04
        steps:
            - uses: actions/checkout@v1
            - name: Install Prerequisites
              run: |
                sudo apt-get update
                sudo apt-get install -y --no-install-recommends "a very very long list of prerequisites"

我是否可以将长命令分成多行以提高可读性?我已经尝试使用分隔符'\',但是它不起作用。预先感谢。

5 个答案:

答案 0 :(得分:36)

您可以将 YAML 折叠样式与 GitHub Actions 支持的 > 一起使用。

例如

run: >
  xvfb-run
  ./mvnw -f my/pom.xml
  clean verify
  -DskipTests

换行符会被空格替换,所以上面的内容等价于

run: xvfb-run ./mvnw -f my/pom.xml clean verify -DskipTests

答案 1 :(得分:34)

我有一个多行命令,使用反斜杠来分隔行,如下所示:

- name: Configure functions
  run: firebase functions:config:set \
    some.key1="${{ secrets.SOME_KEY_1 }}" \
    some.key2="${{ secrets.SOME_KEY_2 }}" \
    ...    

答案 2 :(得分:4)

在早期,使用反斜杠是不可能的。有关如何立即执行的操作,请参阅已接受的答案。


据我所知,GitHub Actions不支持。

但是,您可以为此使用环境变量。

例如,此脚本将您的命令分为3行代码,然后将其作为一行执行。

steps:
  - name: Install Prerequisites
    run: |
      sudo apt-get update
      bash -c "$line1 $line2 $line3"
    env:
    - line1='sudo apt-get install -y --no-install-recommends '
    - line2='a very very long list'
    - line3='of prerequisites'

它创建环境变量line1line2line3并合并并在bash会话中执行它们。

答案 3 :(得分:4)

因为没有提到所以打算分享一下。

您可以使用:

  • | 调用了一个 Literal Block Scalar,它保留了新行和尾随空格
  • > 调用 Folded Block Scalar 将新行转换为空格
  • 简单的旧字符串,不带引号、单引号或双引号

我发现网站 yaml-multiline.info 有助于理解 yaml 字符串的解释方式。

对于我的用例,我最终做了以下事情:

run: >-
  for i in $(find . -type f -name "*.log");
  do
   echo "File: ${i} \n";
   cat $i;
   printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -;
  done

答案 4 :(得分:2)

还要注意表达式的joinformat函数:

HELLO_WORLD = ${{ join('Hello', 'world!') }}
HELLO_WORLD = ${{ format('{{Hello {0}}}', 'World') }}

大概这些可以与env变量组合。