如何根据控制台输出中的文本使 GitLab 的 CI/CD 作业失败?

How to make GitLab's CI/CD job fail based on text in console output?

我正在使用 Lerna 来管理多包存储库,在我的部署工作中我使用 Lerna 的 publish 命令。对我来说,如果包中的代码发生更改,它应该始终向我们的 Artifactory 发布新版本,如果没有发布任何内容,则作业失败,但 publish 命令将退出并显示成功代码(我猜它是 0 代码),即使没有发布的包:

$ npx lerna publish from-package --yes

lerna notice cli v3.13.1
lerna info ci enabled
lerna notice from-package No unpublished release found
lerna success No changed packages to publish 
Job succeeded

我在想我可以通过将输出管道输出到 GREP 并搜索文本来解决这个问题 "No changed packages to publish" 但后来不确定如何告诉 Gitlab 在找到该文本时使作业失败。

有什么建议吗?

如果您在 bash 脚本中调用 npx,您可以捕获文本并以非 0 状态退出:

lerna_output=$(npx lerna publish from-package --yes) || exit $?
nothing_published=$(echo $lerna_output | grep 'No changed packages to publish')
if [ "$nothing_published" != "" ]; then
    echo $lerna_output
    exit 1
fi