如何让 Jenkins git 仅在有更改时才提交



我有一个 Jenkins 作业,它使用 Maven (mvn clean install 从 github.com 存储库的主分支构建,然后检查 Java 文件中的许可证标头和缺少的 NOTICE,并在必要时添加它们(mvn license:format notice:generate)。有时这会导致文件更改或添加,有时则不然。

每当(通过许可证插件)进行任何更改时,我都想将更改推送到 github 存储库。

现在我很难弄清楚如何最好地实现这一目标。我在 Maven 许可证插件之后添加了一个 shell 构建步骤,我在其中执行 git 命令:

git add . # Just in case any NOTICE files have been added
git commit -m "Added license headers"

git add .单独工作,即即使没有添加任何文件,也不会破坏构建。但是,如果根本没有任何更改,git commit会破坏构建。

我不担心推回 github,因为我相信 Git 发布者构建后操作可以为我做到这一点。有人可以指出我 git 提交的正确方向吗?

git diff --quiet && git diff --staged --quiet || git commit -am 'Added license headers'

此命令完全按照要求执行,"git 仅在有更改时才提交",而其他答案中的命令则不然:它们仅忽略git commit的任何错误。

您也可以使用 OR 运算符捕获错误代码:

git commit -m "Added license headers" || echo "No changes to commit"
<</div> div class="one_answers">

为了阻止构建在 shell 上中断构建步骤,在任何一个点返回退出代码1,例如,当尝试进行 git 提交时,尽管没有什么要提交的,你可以简单地将相应的命令包装成回显。

echo `git add -A && git commit -m "Added license headers"`

现在,无论是否有未跟踪的文件要添加到索引中,以及工作树是脏的还是干净的,echo 都会返回退出代码 0 ,因为会有一些字符串需要echo编辑。

相关内容

  • 没有找到相关文章

最新更新