【问题标题】:List Gitlab runners by name only仅按名称列出 Gitlab 运行者
【发布时间】:2017-10-26 00:45:30
【问题描述】:

我正在尝试获取仅包含 gitlab 跑步者姓名的列表。

所以gitlab-runner list 2>&1的输出是:

Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
default_runner                                      Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner                                         Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230

请注意,跑步者的名字中可以包含空格。

所以我尝试了以下方法:

gitlab-runner list 2>&1 | awk -F'Executor' '{if(NR>1)print $1}' 这给了我几乎想要的东西(除了我需要删除的尾随空格)。

default_runner
test runner

但是,如果我将字段分隔符更改为 Executor= 以使其更明确,则它不再有效。它返回整行。

$ gitlab-runner list 2>&1 | awk -F'Executor=' '{if(NR>1)print $1}'
default_runner                                      Executor=shell Token=251cda361f983e612b27381e2f73ad URL=http://10.6.20.230
test runner                                         Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230

我尝试使用Executor\= 转义它,但无济于事。如何在拆分中包含等号?

编辑:

如果我将其中一条线回显到 awk 中,它会起作用

$ echo "test runner                                         Executor=shell Token=86ab70918fc87c8a8d3a57c21457fb URL=http://10.6.20.230" | awk -F'Executor=' '{print $1}'
test runner

要注意的另一件事是,无论出于何种原因,gitlab-runner list 都会打印到 stderr。这就是为什么我在管道到 awk 之前重定向到标准输出。也许我没有正确重定向?但这并没有真正的意义,因为 awk 在没有等号的情况下拾取它。

【问题讨论】:

  • 您使用什么版本的awk?是gawk,是4.1.2之前的吗?
  • @randomir GNU Awk 4.0.2
  • 感谢您的编辑,我想我找到了问题所在。检查下面。

标签: bash awk gitlab-ci-runner


【解决方案1】:

使用gitlab-runner 命令进行管道处理时无法在Executor= 上拆分的原因是因为Executor= 字符串不存在!至少不是那种形式 - gitlab-runner 添加了一些 ANSI color codesESC[0;m 用于重置所有属性):

$ gitlab-runner list 2>&1 | cat -A
default_runner                        ^[[0;m  Executor^[[0;m=shell Token=86ab70918fc87c...
#                                     ^^^^^^          ^^^^^^      <--  ANSI color codes

为了证明这一点,请尝试运行:

$ gitlab-runner list 2>&1 | awk -F 'Executor\x1b\\[0;m=' '{print $1}'
default_runner

open proposalgitlab-runner 中添加了禁用颜色输出的选项,但它已经开放了 10 个月,没有太多的社区支持。在他们决定添加该选项之前,如果您愿意,您可以去除 ANSI 颜色代码,例如 thisthis


请注意,在 POSIXGNU awk 中,-F 都接受 ERE 表达式。所以,Executor= 应该可以正常工作(= 没什么特别的)。处理空格,可以使用&lt;space&gt;*Executor=

$ cmd | awk -F ' *Executor=' 'NR>1 {print $1}' | cat -A
default_runner$
test runner$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-27
    • 2018-11-13
    • 1970-01-01
    • 2017-08-31
    • 2017-12-03
    • 2018-03-26
    • 2012-06-16
    • 2021-05-23
    相关资源
    最近更新 更多