【问题标题】:use bash case statement in gitlab ci/cd在 gitlab ci/cd 中使用 bash case 语句
【发布时间】:2022-01-04 07:47:03
【问题描述】:

所以我有一个管道,每 24 小时检查 2 个存储库并将更改推送到第 3 个存储库。管道如下所示:

- git  fetch $CHEATSHEETS
- git  fetch $BASH_ONELINER
- git add -A
- git commit -m "Update has been successful" || echo "error"
- git push $TOKEN_AND_REPO HEAD:master

我的问题是,例如,如果出现诸如合并冲突之类的错误,我将永远不会在管道中看到任何错误。所以我想用一个案例来提交,像这样:

TEST=2; case "${TEST}" in "1") echo "one";; "2") echo "The commit has failed";; *) echo "Error";; esac

我的问题是在 gitlab ci/cd 管道中是否可以使用类似的方法,如果可以,应该如何实现?

提前致谢。

【问题讨论】:

  • 我不明白你的代码的目的。如果你总是将TEST 设置为 2,它总是会产生错误消息。
  • 请允许我澄清一下。如果您在管道中使用 git commit 并且没有要提交的内容,则管道将返回错误: 错误:作业失败:退出代码 1 因此,解决此问题的一种方法是像我的示例中那样使用“或”运算符,但是,这样你就永远不会真正看到你得到什么样的错误(如果你得到任何错误)。这就是为什么我正在考虑使用 case 语句并且我提供的代码只是一个示例
  • to resolve this is to use "OR" operator like in my example, however, this way you'd never really see what kind of error you get 使用|| 不会隐藏输出,您仍然会看到您得到的错误。
  • 您想“查看”您遇到的错误类型,还是您打算根据遇到的错误类型执行特定操作?你能澄清一下吗?你为什么要关心这是什么类型的错误,那你为什么要使用||呢?只需删除||,或者在提交之前检查是否有任何更改 - 如果没有,请不要这样做。 stackoverflow.com/questions/3878624/…
  • @kvelev :将此类澄清放入问题中,而不是在评论中。我也不明白你说的你永远不会真正看到你得到什么样的错误是什么意思。 git 将它的错误信息写入stderr,所以除非你隐藏stderr,否则你可以看到它。

标签: bash gitlab-ci git-commit


【解决方案1】:

你似乎想做:

- git  fetch $CHEATSHEETS
- git  fetch $BASH_ONELINER
- git add -A
- if git diff-index --cached --quiet HEAD; then
     echo "Nothing to commit... exiting" &&
     exit 0
  fi
- git commit -m "Update has been successful"
- git push $TOKEN_AND_REPO HEAD:master

这与使用case 无关。您可以在 gitlab-ci 管道中正常使用case,就像在 shell 中一样。见How do I programmatically determine if there are uncommitted changes?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2020-02-02
    • 2023-01-13
    • 1970-01-01
    • 2020-09-09
    • 2022-10-21
    • 1970-01-01
    相关资源
    最近更新 更多