首页 > 解决方案 > gitlab CI 不显示换行

问题描述

我有一个 CI(git lab CI),它运行一个运行 makefile 作业的 shell,它调用 bash 脚本。CI 脚本是一个 YAML (gitlab-ci.yml) 脚本。

YAML 脚本:

Build:
  stage: ThisIsAnExample
  script: 
    - export OPTION1=true; make -C build/ myTarget

生成文件脚本:

.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec

myTarget:
    @echo "A";echo ""; print "B\n";  echo "C";  echo "";

如果我从控制台运行 bash 脚本,我会得到:

A

B

C

在 CI 日志中,我得到:

A
B
C

为什么 gitlab CI 不解释行返回?

标签: bashshellmakefileyamlgitlab-ci

解决方案


我找到了解决方法。

我做了这些改变:

在我的 YAML gitlab-ci 脚本中:

Build:
  stage: ThisIsAnExample
  script: 
    - export OPTION1=true; export FORCE_LR_ESCAPE_IN_CI=yes; make -C build/ myTarget

在我的makefile中:

.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec

FORCE_LR_ESCAPE_IN_CI ?= no

ifeq ($(FORCE_LR_ESCAPE_IN_CI),yes)
NEW_LINE = printf '\u2000\n'
else
NEW_LINE = echo ''
endif

myTarget:
    @echo "A"; $(NEW_LINE); echo "B"; $(NEW_LINE);  echo "C"; $(NEW_LINE);

我发现 gitlab-ci 如果它没有被一个字符进动,它会跳过一个 '\n' 。对我来说似乎是一个错误。无论如何,我在 '\n' 之前添加了一个不可见字符('\u2000')并且它有效!

注意:我试过了,echo '\u2000'但它只在控制台中有效,在 ci 中无效。


推荐阅读