我可以将现有的git repo与openshift一起使用吗?


102

仅在openshift上才需要git repo吗?我已经有bitbucket / github git repo,并且只想推送到那里。我可以简单地挂入它,以便openshift获得亲密感吗?

还是为了简化起见,我只在github上推送内容,但是当我要部署时,我会使用openshift做什么?

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


6
你能证明这个问题吗?很难理解。
马特·芬威克

Answers:


226

我的印象是您还不习惯使用git。我建议您进入git,以充分了解如何将代码推送到openshift。不过,让我尝试向您解释其中涉及的步骤:与通常使用git一样,此处选择的方法是将其他git repo(例如在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 repo中的master分支与本地git repo合并。您告诉它使用递归合并策略进行合并,并在发生冲突时选择您的(“我们的”)版本。

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

git push openshift HEAD

您告诉git将本地代码推送到名为“ openshift”的远程存储库(我们将openshift git存储库存储在其后的段落中的别名)上的HEAD分支。

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


30
我认为这仍然无法回答问题。问题是关于不使用openshift的git仓库作为远程仓库,而是使用github上的仓库(或该问题的bitbucket)作为git仓库。推动用于协作的github存储库也应确保它在openshift中得到体现。我也在寻找相同的东西,但没有找到答案。如果有解决方案,我将尝试更新
Manoj NV

9
您不能使用openshift git repo。OpenShift内的git repo是您将OpenShift移交给代码的方式。别无选择,没有“使用github代替”。正如我在上面概述的那样,OpenShift上的git repo并不排除您使用github。如果您使用github / bitbucket / XX作为主源代码控制存储库-并且大多数用户会这样做-,则只需将OpenShift git存储库添加为本地github / bitbucket / XX-clone的远程存储库即可。然后,推送到OpenShift等同于部署到OpenShift。
adietisheim 2013年

1
如果我理解的话,如果我使用openshift,那么我应该使用开发仓库(例如github),如果我想部署它,只需按下openshift HEAD,对吗?
里卡多

1
值得注意的是-f标志和git URL的ssh部分都是必不可少的
Simon H

1
@adietisheim带有新的git 2.9,您将需要添加它,--allow-unrelated-histories因为git默认已更改为不允许合并无关的历史记录。
阿隆·伯格

23

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

假设您已经添加了using git remote add openshift <openshift-git-repo-url>,这就是我要做的:

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

git checkout -b openshift

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

git push openshift master -f

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

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

6

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

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

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


git push backup master足够,您不需要指定refspec的两侧。

1
推至2 git remote的技巧非常完美。然后,您还可以执行“:git push -u all全部”到默认遥控器。做的时候git push,它将随后推送至2个存储库!
阿克拉姆·本·阿西

5

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

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

为此,我有以下提示:

  • 将与部署相关的选项与不在不同文件中的选项分开。例如,我将数据库设置与其他设置分离为不同的文件,如下所示:

    • settings_deploy / openshift

    • settings_deploy /本地主机

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

    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部署的项目。


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存储库中。


4

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

要将您的github仓库用作Openshift仓库,目前还没有完美的解决方案,因为Openshfit使用git挂钩根据您的提交触发部署或重新部署。但是,最聪明的方法是使用2个仓库(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$

希望这可以帮助


您有错误。您可以有多个存储库,但是它们都不能命名为“ origin”。它们必须是唯一的,例如:origin and origin2
Eric P

使用此实现,但我得到了,说没有这样的远程“openshift-混帐回购”的错误..我认为这是上面..脚本缺少
阿尔曼奥尔特加


1

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

对我而言,解决此问题的方法是在现有的源代码树中包含.openshift文件夹,以及在我的maven pom.xml文件中包含openshift配置文件。

这很可能与将存储库与新的openshift上游存储库合并而发生的情况相同。对我来说,这是阿迪蒂斯海姆(Adietisheim)出色回答中以下句子的“原因”:

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

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



0

如果您使用的是Java,则有另一种方法。但是即使采用这种方法,您仍将使用OpenShift git存储库。OpenShift提供的git存储库是您如何向OpenShift提供代码和可部署的代码:

您可以-无需将代码提交给OpenShift git repo-只需将其提供给您的war文件即可。您将OpenShift git存储库克隆到本地计算机。然后,您可以从应用程序源构建战争,并将该战争放入OpenShift git repo(克隆)中的Deployments文件夹中。然后,您添加,提交并将本地克隆推送到OpenShift。推送成功执行后,JBoss AS7将选择您的战争并进行部署。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.