【发布时间】:2018-07-19 09:08:26
【问题描述】:
在 CI 中,我正在运行一个调用许多 bash 脚本的 bash 脚本。
./internals/declination/create "${RELEASE_VERSION}" "${CI_COMMIT_REF_NAME}" > /dev/null
这不会禁用脚本返回的stdout。
Gitlabi-CI 运行器在 100MB 日志后停止记录,上面写着 Job's log exceeded limit of 10240000 bytes。
我知道日志脚本只能长大。
如何优化输出日志大小?
我不需要拥有所有的stdout,我可以拥有stderr,但这将是一个没有信息的长时间运行的脚本。
有没有办法像set -x一样显示正在运行的命令?
编辑
阅读答案后,我无法解决我的问题。我需要添加 我正在使用 nodejs 来运行运行长 bash 脚本的 bash 脚本。
这就是我在.gitlab-ci.yml 中调用节点脚本的方式:
scripts:
- node my_script.js
在my_script.js 内,我有:
exports.handler = () => {
const ls = spawn('bash', [path.join(__dirname, 'release.sh')], { stdio: 'inherit' });
ls.on('close', (code) => {
if (code !== 0) {
console.log(`ps process exited with code ${code}`);
process.exitCode = code;
}
});
};
在my_script.sh 内,我有:
./internals/declination/create "${RELEASE_VERSION}" "${CI_COMMIT_REF_NAME}" > /dev/null
【问题讨论】:
-
也许你可以将标准输出重定向到
/dev/null——就像cmd >/dev/null一样? (仍应打印到stderr的输出。) -
您的命令非常肯定确实重定向标准输出。也许您打算编写它不会重定向标准错误,例如
set -x输出去了? -
stderr 肯定会进入日志。没有 CI 系统会丢弃 stderr,因为这是所有有用的诊断和错误消息的所在。
-
我在 CI 中执行的命令是一个 node 脚本,它将运行 bash 脚本,该脚本将执行这个长时间运行的命令。我曾尝试使用
> dev/null 2>&1,但失败时我的 CI 没有显示任何错误。我没能解决这个问题。 -
我有
ps process exited with code 2。我已经用额外的信息添加了我的问题