如何自动部署源和&编译代码(不包括git历史记录)给第三方开发人员?

时间:2015-06-19 13:33:23

标签: git deployment continuous-integration bitbucket

我将设置一些工具/技术/环境,这样当我需要为第三方开发人员提供源代码时,我会在没有git历史记录的情况下使用已编译和剥离的敏感代码。因此,我希望自动执行此过程,以便始终提供最新版本的操作,而无需每次都手动执行所有必要步骤。 我用bitbucket和git。

如何使用bitbucket和git实现我的目标?我还需要其他工具吗?

P.S。如果它没有说清楚这个想法,请随意编辑问题。我希望这些问题不是太广泛而且不受限制

3 个答案:

答案 0 :(得分:3)

听起来你想写一些post-commit钩子。但这可能对你来说太精细了。只需将自动步骤写入.git/hooks/post-commit并制作该可执行文件即可。你可以

git --work-tree PATH_FOR_THIRD_PARTY checkout HEAD -- PUBLIC_FILES

在PATH_FOR_THIRD_PARTY中为第三方开发人员更新PUBLIC_FILES,我假设您为第三方开发人员发布数据。

然后为了更新编译结果,你应该写一些Makefile(或类似的)来从隐藏文件中生成PATH_FOR_THIRD_PARTY中的输出。

如果为存储库选择了正确的布局,只需使用PUBLIC_FILES目录,即可将所有PUBLIC_FILES签出到PATH_FOR_THIRD_PARTY/PUBLIC_FILES

请注意,使用此方法,目录布局在发布目录和存储库中将是相同的。

BTW。:如果第三方开发人员更改了其目录中的PUBLIC_FILE,您可以简单地

git --work-tree PATH_FOR_THIRD_PARTY add -u

我经常使用此方法从git存储库发布文件。你可以简单地

git config -g alias.public '!git --work-tree $(git config --get public.root) '
git config public.root 'PATH_FOR_THIRD_PARTY'

所以你可以说

git public diff --name-only

git public status -s -uno

我认为这种方法被称为或类似于分离的工作树。

如果您使用此方法,则需要在执行公共提交后签出本地存储库中的文件:

git public add -u; git public commit -m "John Doe changed something"
git checkout HEAD -- .

最后一行更新您的本地工作树,以与您上面提交的提交保持一致。

答案 1 :(得分:0)

我认为你需要的功能是带有交互式选项-i(git rebase -i)的git rebase。从链接中查看详细信息: https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase

这将创建一个新的基础,您可以访问第三方。我不是rebase功能的专家。请查看链接以获取更多详细信息。

答案 2 :(得分:0)

如果您不想被锁定在特定服务中,您可以这样做:

  • 编写一个脚本,它可以提供您提供源代码,已编译二进制文件和其他资源(如果有)的存档所需的内容
  • 您应该能够在自己的计算机上执行此脚本,以便于测试/更改
  • 然后编写另一个脚本,以您想要的方式创建一个包(例如创建一个ZIP文件)并将其分发到FTP服务器,Amazon S3或您喜欢的任何其他服务
  • 现在你应该拥有一切为你自动化的东西。您应该可以在自己的机器上执行此操作
  • 如果你想自动化整个过程,以便每次更改代码时执行它,那么使用此设置,您可以选择几乎任何持续集成/交付服务来为您运行,由Bitbucket webhook触发。

如果您使用此设置,您可以使用我们的服务(https://bitrise.io/ - 我是CTO),因为它内置了Bitbucket webhook支持,即使是免费帐户,但当然您可以选择任何其他CI / CD服务,因为这个设置不需要比Bitbucket钩子支持更多的东西以及运行脚本的能力。