在Openshift构建期间使用真正的git回购?

在Openshift构建期间使用真正的git回购?,git,openshift,Git,Openshift,当Openshift从git存储库构建时,源代码的克隆/导出方式应确保克隆不是git repo,即没有.git目录。有人知道如何将这种行为改变为真正的克隆人吗 相关文档()中没有任何内容,但文档并不总是可能的样子 我们的用例是,我们的项目使用一个gradle插件,该插件将有关git状态的信息添加到构建工件中。这不会在Openshift中生成。在编写S2I生成器时,默认情况下,源代码将注入目录/tmp/src。如果自定义的汇编脚本需要阻止文件被注入,它会将文件移动或复制到它们的最终位置,例如/op

当Openshift从git存储库构建时,源代码的克隆/导出方式应确保克隆不是git repo,即没有.git目录。有人知道如何将这种行为改变为真正的克隆人吗

相关文档()中没有任何内容,但文档并不总是可能的样子


我们的用例是,我们的项目使用一个gradle插件,该插件将有关git状态的信息添加到构建工件中。这不会在Openshift中生成。

在编写S2I生成器时,默认情况下,源代码将注入目录
/tmp/src
。如果自定义的
汇编
脚本需要阻止文件被注入,它会将文件移动或复制到它们的最终位置,例如
/opt/app root/src
。通常,这是在任何编译阶段(如果发生)之前完成的。然后,构建将在目标目录中运行

移动或复制文件并使用全局通配符时,需要确保包含以“.”开头的隐藏文件。例如:

shopt -s dotglob
echo "---> Installing application source ..."
mv /tmp/src/* ./
如果您没有
shopt-s dotglob
,则不会包括
.git
等目录。如果后续生成预期
.git
目录存在,这将是一个问题

如果您正在使用其他人的S2I builder,而
.git
目录被遗忘,则可以在应用程序代码目录中包含一个可执行的
.S2I/bin/assemble
脚本并添加到其中

#!/bin/bash

mv /tmp/src/.git ./

/usr/libexec/s2i/assemble

这假设原始的
汇编
脚本位于
/usr/libexec/s2i/
的典型位置,冒着违背权威答案的风险(字面意思),我发现我不需要自定义汇编脚本。实际上,
.git
目录在
/tmp/src
中根本不可用。这可能是因为我的情况不同,因为我正在复制,例如:

s2i build file://$(pwd) --copy --keep-symlinks ${S2I_IMAGE} ${IMAGE_TO_BUILD}
在这种情况下,存在一个regexp,它将
.git
目录排除在复制之外(通过位于的问题找到)。因此,在我的例子中,我不需要通过设置exclude regexp来排除
.git
目录:

s2i build file://$(pwd) --exclude="" --copy --keep-symlinks ${S2I_IMAGE} ${IMAGE_TO_BUILD}

这样,就不需要更改汇编脚本,
.git
目录被复制到汇编上下文中,一点问题都没有。

您能确认您使用的是哪个OpenShift S2I构建器吗?尽管在某些情况下可能会创建
.git
目录,但S2I构建器可能会故意忽略它,而不会将其移动到执行构建的
src
目录。可能需要一把小提琴来确保它的保存,但需要知道您使用的是什么S2I生成器。谢谢@GrahamDumpleton–这是一个自定义的S2I内部编写。现在我更仔细地看了看它的代码,我意识到这是罪魁祸首。好消息是我可以修正:-)如果你留下与你的评论类似的答案,我可以接受。除此之外!