104

是否只需要在 openshift 上安装 git repo?我已经有 bitbucket / github git repo 并且宁愿只推到那里。我可以简单地加入它以便 openshift 得到提示吗?

或者为了简化,我只在github上推送,但是当我想部署时,我用openshift做一些事情?

我确实检查了这个,但它让我感到困惑:它正在谈论合并退出和新的(openshift)git?

4

11 回答 11

228

我的印象是你还不够习惯使用 git。我建议您进入 git 以完全了解如何将您的代码推送到 openshift。尽管如此,让我尝试向您解释所涉及的步骤:正如您通常使用 git 所做的那样,此处选择的方法是将您的其他 git 存储库(例如在 bitbucket 上)克隆到您的本地计算机:

git clone <bitbucket-repo-url>

然后,您的本地克隆将您的其他存储库(bitbucket 等)作为远程存储库。您的远程存储库以别名“origin”(如果您克隆 git 使用的默认别名)存储。然后,您将 openshift 存储库作为远程添加到您的克隆中。您在为您添加的远程存储库显式使用别名时这样做 - 我在这里使用“openshift”作为别名:

git remote add openshift -f <openshift-git-repo-url>

为了能够将代码从本地 git 存储库推送到 openshift,您首先必须将 openshift 存储库与本地 bitbucket 克隆合并。您可以通过在本地发布来做到这一点:

git merge openshift/master -s recursive -X ours

使用此命令,您可以告诉 git 将 openshift git 存储库中的主分支与本地 git 存储库合并。您告诉它使用递归合并策略进行合并,并在发生冲突时选择您的(“我们的”)版本。

执行合并后,您就可以将 git 存储库推送到 openshift。你这样做:

git push openshift HEAD

你告诉 git 将你的本地代码推送到名为“openshift”的远程 repo 上的 HEAD 分支(我们存储 openshift git repo 的别名,一些段落更进一步)。

顺便提一句。几个月前,我写了一篇 jboss 工具博客,演示了如何使用 openshift-java-client:https ://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client 。您将在最后一段“我们快到了”中发现上述步骤。

于 2012-10-01T07:33:42.240 回答
23

我知道这个问题已经 2 岁了,@adietisheim 的回答已被接受。我个人不喜欢将 openshift 存储库合并到我的本地克隆中,因为我不想将 OpenShift 存储库混合到我的公共存储库的主分支中。

假设您使用 添加了遥控器git remote add openshift <openshift-git-repo-url>,这就是我要做的:

openshift基于分支创建一个新的本地master分支。

git checkout -b openshift

您可以在分支上进行一些提交,openshift例如您的应用程序部署配置。然后,使用标记将当前分支推送到 OpenShift 存储库中的远程 ref 匹配 master-f以覆盖远程master分支中的所有内容。

git push openshift master -f

每当我想将我的应用程序部署到 OpenShift 时,我会检查本地openshift分支并将master分支与其合并,然后强制推送到 OpenShift,但是-f下一次推送可能不需要:

git checkout openshift
git merge --no-ff master
git push openshift master -f
于 2014-11-23T13:29:27.350 回答
6

从您的项目文件夹中,执行

git remote add backup user@server:/path/to/git/test.git
git push backup master

您可以阅读从一个存储库推送到两个 git 远程源更改 git 远程源

于 2014-06-23T06:10:51.360 回答
5

我同意@adietisheim 的回答:在使用 openshift 进行部署之前,您需要更好地了解 git =)

现在,即使您了解 git,如果您的目录结构与 openshift 所需的目录结构不匹配,并且如果您想保留旧的目录结构,如何部署现有 repo 也不一定很明显。

为此,我有以下提示:

  • 依赖于部署的选项与不属于不同文件的选项分开。例如,我将我的数据库设置与其他设置分开到不同的文件中:

    • settings_deploy/openshift

    • 设置_部署/本地主机

    然后符号链接到您的本地主机测试,如下所示:

    ln -s settings_deploy/localhost settings_deploy_file
    

    另一种选择是使用环境变量检测主机:

    if 'OPENSHIFT_APP_NAME' in os.environ:
        //openshift configurations
    else:
        //localhost
    

    这有点简单,因为它允许您将所有配置放在一个文件中。它不太通用,因为如果您的另一台主机提供OPENSHIFT_APP_NAME环境变量(这不太可能),该方法就会中断。无论如何,您仍然必须清楚地区分依赖于部署和不依赖于部署的内容。

  • 创建本地部署目录

  • 将初始的 openshift 模板克隆到其中

  • 创建一个部署脚本:

    • 将所有内容从您现有的旧本地硬链接到它们的正确位置

      硬链接可以快速创建和使用很少的内存

      你可以使用类似的东西:

      cp -lrf original_repo_dir deploy_repo_dir

    • settings_deploy在部署存储库中只保留正确的文件:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • 强制推送:

      cd deploy_repo

      git push -f origin master

    • 清理部署仓库:

      git reset --hard HEAD

      git clean -df

对于那些对 django 部署感兴趣的人,我在我的 github上有一个示例,特别是查看它部署的deploy.sh脚本和项目。projects/elearn

于 2013-04-27T15:24:20.517 回答
4

您应该能够通过以下方式将现有 Git 存储库传递到资产管道中

rhc create-app $APPNAME ruby-1.9 --from-code $GIT_LOCATION

然后,远程 Git 存储库为 OpenShift 提供初始应用程序。

作为第二种可能性,您可以通过以下方式跳过本地 OpenSHIft Git 存储库的创建

rhc create-app $APPNAME ruby-1.9 --no-git

然后使用上述步骤将 OpenShift 远程 Git 存储库合并到本地 Git 存储库中。

于 2014-07-29T17:35:18.617 回答
4

莫汉德的回答很完美,但我想总结一下完整的解决方案,以防其他人需要它:

要将您的 github 存储库用作 Openshift 存储库,现在还没有完美的解决方案,因为 Openshfit 使用 git 挂钩来根据您的提交触发部署或重新部署。但是,最聪明的方法是使用 2 个 repos(openshift 的一个和您的 github 的一个)将代码同时推送到。

为此:添加一个名为“all”的遥控器并向其添加 2 个推送 url。

git remote add all ssh://23456781234567@yourapp-namespace.rhcloud.com/~/git/yourapp.git
git remote set-url openshift-git-repo --push --add ssh://23456781234567@yourapp-namespace.rhcloud.com/~/git/yourapp.git
git remote set-url github-repo --push --add git@github.com:youruser/yourapp.git

然后将名为“all”的遥控器设置为默认推送遥控器:

git push -u all

要提交和推送您的代码,请照常进行:它将推送 2 个遥控器并部署在 OpenShift 上

git add .
git commit -m "my commit"
git push

并观察结果:

[master 3fc96b2] my commit
 1 file changed, 2 deletions(-)
MyLaptop:myapp User$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To git@github.com:User/myapp.git
   a036a44..3fc96b2  master -> master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Stopping PHP 5.4 cartridge (Apache+mod_php)
remote: Waiting for stop to finish
remote: Waiting for stop to finish
remote: Building git ref 'master', commit 3fc96b2
remote: Preparing build for deployment
remote: Deployment id is 9037d37a
remote: Activating deployment
remote: Starting PHP 5.4 cartridge (Apache+mod_php)
remote: Application directory "/" selected as DocumentRoot
remote: -------------------------
remote: Git Post-Receive Result: success
remote: Activation status: success
remote: Deployment completed with status: success
To ssh://23456789@myapp-namespace.rhcloud.com/~/git/myapp.git/
   a036a44..3fc96b2  master -> master
MyLaptop:myapp User$

希望这可以帮助

于 2015-05-29T22:35:14.327 回答
2

有一种方法可以做你想做的事,即跳过 Openshift 的 repo。您需要做的是设置一个 jenkins,并让它轮询您自己的存储库。

这里有一个链接解释了如何从头开始设置它:http: //blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html

于 2016-02-10T06:12:40.020 回答
1

如果您使用的是 github,则可以配置 travis 以在每次更改 github 存储库时进行部署

http://docs.travis-ci.com/user/deployment/openshift/

于 2015-01-18T17:21:09.187 回答
1

我在将预先存在的代码存储库部署到 Openshift 时遇到了问题。在我尝试部署 tomcat webapp 的特定环境中,.openshift 文件夹中包含的 Openshift tomcat 配置文件至关重要。

为我解决的问题是将 .openshift 文件夹包含在我现有的源代码树中,以及将 openshift 配置文件包含在我的 maven pom.xml 文件中。

这很可能与将您的存储库与新的 openshift 上游存储库合并时发生的情况相同。对我来说,这是 adietisheim 出色答案中以下句子背后的“为什么”:

“为了能够将代码从本地 git 存储库推送到 openshift,您首先必须将 openshift 存储库与本地 bitbucket 克隆合并。”

就我而言,需要此合并才能从 .openshift 目录中获取配置文件。我花了很长时间才弄清楚,因为没有 .openshift 目录的推送仍然使我的应用程序构建和部署成功。我看到的唯一行为是关于缺少 jsp 文件的报告,这让我认为问题与我自己的 web.xml 和 servlet 配置有关。

于 2014-04-20T09:33:22.727 回答
0

如果您使用的是 java,那么还有另一种方法。但即使采用这种方法,您仍然会使用 OpenShift git 存储库。OpenShift 提供的 git 存储库是您向 OpenShift 提供代码和可部署的方式:

你可以——而不是将你的代码提交到 OpenShift git repo——只需给它你的战争文件。您将 OpenShift git 存储库克隆到本地计算机。然后,您从应用程序源构建一个战争,并将这个战争放入 OpenShift git repo(克隆)中的部署文件夹中。然后,您添加、提交并将本地克隆推送到 OpenShift。一旦推送成功执行,JBoss AS7 将选择你的战争并部署它。

于 2013-02-20T16:34:14.117 回答
0

放轻松!

第 1 步:创建应用程序。使用您最喜欢的方法(来自 gitRepository、pre-maker Openshift 等)。如果您使用控制台方法
第 2rhc git-clone nameApp
步:第 3rhc app-configure nameApp --auto-deploy
步:第 4 步:享受!

于 2016-09-22T13:25:14.743 回答