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

时间:2018-04-15 23:35:13

标签: git openshift

当Openshift从git存储库构建时,克隆/导出源的方式是克隆不是git repo,即没有.git目录。任何人都知道如何将此行为更改为真正的克隆?

相关文档中没有任何内容(https://docs.openshift.com/container-platform/3.5/dev_guide/builds/build_inputs.html#source-code),但文档并非总是如此。

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

2 个答案:

答案 0 :(得分:2)

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

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

shopt -s dotglob
echo "---> Installing application source ..."
mv /tmp/src/* ./

如果您没有shopt -s dotglob,则不会包含.git等目录。如果后续构建期望.git目录存在,则会出现问题。

如果您使用其他人的S2I构建器并且.git目录被遗忘,您可以在应用程序代码目录中包含可执行.s2i/bin/assemble脚本并添加到其中。

#!/bin/bash

mv /tmp/src/.git ./

/usr/libexec/s2i/assemble

这假定原始assemble脚本位于/usr/libexec/s2i/的典型位置。

答案 1 :(得分:0)

冒着违背权威性答案的风险(从字面上看),我发现我不需要自定义汇编脚本。实际上,<div id="rocket"> &#128640; </div>中根本没有console.log()目录。可能是因为我在复制诸如以下内容时情况有所不同:

.git

在这种情况下,有一个正则表达式排除了/tmp/src目录的复制(通过https://github.com/openshift/source-to-image/issues/457处的问题找到)。因此,就我而言,我不需要通过设置exclude regexp来排除该s2i build file://$(pwd) --copy --keep-symlinks ${S2I_IMAGE} ${IMAGE_TO_BUILD} 目录:

.git

有了这个,就不需要更改汇编脚本了,.git目录被复制到了汇编上下文中完全没有问题。