我可以在openshift中使用现有的git repo吗?

时间:2012-09-29 22:44:51

标签: git openshift

是否有必要在openshift上安装git repo?我已经有了bitbucket / github git repo并且更愿意只推到那里。我可以简单地插入它以便openhift得到暗示吗?

或者为了简化,我只在github推送,但是当我想部署时,我会使用openshift做什么?

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

11 个答案:

答案 0 :(得分:225)

我的印象是你还不习惯使用git。我建议你进入git以完全理解如何将代码推送到openshift。不过,让我试着向您解释所涉及的步骤: 正如你通常使用git一样,这里选择的方法是将你的其他git repo(例如bitbucket)克隆到你的本地机器上:

git clone <bitbucket-repo-url>

你的本地克隆然后你的另一个repo(bitbucket等)作为远程仓库。您的远程仓库使用别名“origin”存储(如果您克隆,则为git使用的默认别名)。然后,将openshift repo添加为克隆的远程仓库。你明确使用你添加的远程仓库的别名时这样做 - 我在这里使用“openshift”作为别名:

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

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

git merge openshift/master -s recursive -X ours

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

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

git push openshift HEAD

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

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

答案 1 :(得分:23)

我知道问题是2岁,@adietisheim's answer已被接受。我个人不喜欢将openshift repo合并到我的本地克隆中,因为我不想将OpenShift repo混合到我公共仓库的主分支中。

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

根据openshift分支创建新的本地分支master

git checkout -b openshift

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

git push openshift master -f

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

git checkout openshift
git merge --no-ff master
git push openshift master -f

答案 2 :(得分:6)

从项目文件夹中,执行

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

您可以阅读Pushing to two git remote origins from one repositoryChanging git remote origin

答案 3 :(得分:5)

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

现在,即使您了解git,如果您的目录结构与openshift所需的目录结构不匹配,并且您希望保留旧的目录结构,那么如何部署现有的repo并不一定显而易见。

为此,我有以下提示:

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

    • settings_deploy / openshift

    • settings_deploy /本地主机

    然后将符号链接到您的localhost测试,如:

    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

    • 在deploy repo中只保留正确的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部署感兴趣的人,我在my github上有一个示例,特别是查看deploy.sh脚本和它部署的项目projects/elearn

答案 4 :(得分: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存储库中。

答案 5 :(得分:4)

莫汉德的答案是完美的,但我想总结完整的解决方案,万一其他人需要它:

要将你的github repo用作Openshift repo,现在没有完美的解决方案,因为,Openshfit使用git钩子根据你的提交触发部署或重新部署。然而,最聪明的方法是使用2个repos(openshift&#39;以及你的github&#39;)同时推送代码。

要做到这一点: 添加一个名为&#34; all&#34;并添加2个推送网址。

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

然后设置名为&#39; all&#39;作为默认的推送遥控器:

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$

希望这有帮助

答案 6 :(得分:1)

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

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

这很可能与将您的存储库与新的openshift上游资源合并后发生的情况相同。对我来说,这就是&#34;为什么&#34;在adietisheim的回答中跟随句子:

&#34;为了能够将代码从本地git repo推送到openshift,首先必须将openshift repo与本地bitbucket克隆合并。&#34;

在我的情况下,需要这个合并才能从.openshift目录中获取配置文件。花了很长时间才找到我,因为没有.openshift目录的推送仍然使我的应用程序构建和部署成功。我看到的唯一行为是关于丢失jsp文件的报告,这让我觉得问题与我自己的web.xml和servlet配置有关。

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

有办法做你想做的事,即跳过Openshift的回购。 你需要做的是设置一个jenkins,让它自己调查你自己的存储库。

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

答案 9 :(得分:0)

如果您使用的是Java,那么还有另一种方法。但即使在这种方法中,您仍然可以使用OpenShift git存储库。 OpenShift提供的git存储库是如何为OpenShift提供代码的可部署代码:

您可以 - 而不是将您的代码提交给OpenShift git repo - 只需将其提供给您的war文件即可。您将OpenShift git repo克隆到本地计算机。然后,您可以从应用程序源构建一个war,并将此war放入OpenShift git repo(clone)中的deployments文件夹中。然后,您可以添加,提交并将本地克隆推送到OpenShift。一旦推送成功执行,JBoss AS7将挑选你的战争并进行部署。

答案 10 :(得分:0)

很容易!

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