如果有变化,如何让Jenkins git提交?

s.d*_*s.d 11 git bash build jenkins

我有一个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"
Run Code Online (Sandbox Code Playgroud)

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

我不担心回到github,因为我相信Git Publisher的后期构建操作可以为我做这件事.有人可以指点我正确的git提交方向吗?

kim*_*ula 39

git diff --quiet && git diff --staged --quiet || git commit -am 'Added license headers'
Run Code Online (Sandbox Code Playgroud)

这个命令完全按照要求执行,'git仅在有更改时提交',而其他答案中的命令则不执行:它们只忽略任何错误git commit.

  • `git add . && git diff --staged --quiet || git commit -m '...'` 也适用于新初始化的存储库 (3认同)
  • 如果在此之前有一个“git add”(如问题中所示),则只需运行“git diff --staged --quiet ||”就足够了 git commit -m '...'`。否则,`git diff --quiet HEAD || git commit -am '...'` 简化了这个解决方案。 (2认同)

mar*_*tur 7

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

git commit -m "Added license headers" || echo "No changes to commit"
Run Code Online (Sandbox Code Playgroud)


s.d*_*s.d 5

要阻止构建在 shell 构建步骤上中断并1在任何时候返回退出代码,例如,当尝试进行 git 提交时,尽管没有任何内容可提交,您可以简单地将相应的命令包装到 echo 中。

echo `git add -A && git commit -m "Added license headers"`
Run Code Online (Sandbox Code Playgroud)

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