我可以用openshift使用我现有的git回购吗?
是否有必要在openshift上有Git回购? 我已经有bitbucket / github的git回购,并希望推到那里只。 我可以简单地挂钩它,以便openshift得到暗示?
或者为了简化,我只在github上推送,但是当我想部署时,我会用openshift做些什么?
我没有检查这个,但它让我困惑:它正在谈论合并退出和新(openshift)混帐?
我觉得你还不习惯使用git。 我build议你进入git,充分了解如何将代码推送到openshift。 不过,让我试着向您解释所涉及的步骤:正如您一般使用git所做的,在此select的方法是将您的其他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仓库中的master分支与你的本地git仓库合并。 您告诉它使用recursion合并策略进行合并,并在发生冲突时select您的(“我们的”)版本。
一旦合并执行,你已经准备好将你的git仓库推向openshift。 你这样做:
git push openshift HEAD
你告诉git把你的本地代码推到远程仓库的HEAD分支上,叫做“openshift”(我们在openshift git仓库中存储的别名,后面还有一些段落)。
顺便说一句。 我写了一个jboss工具博客,它展示了几个月前如何使用openshift-java-client: https ://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client。 您会在最后一段“我们快到了”中看到上述步骤。
我知道这个问题是2岁, @ adietisheim的答案已被接受。 我个人不喜欢把openshift repo合并到我的本地克隆中,因为我不想将OpenShift repo混入到我的公共repo的master分支中。
假设你已经添加远程使用git remote add openshift <openshift-git-repo-url>
,这是我会做的:
基于master
分支创build一个新的本地分支openshift
。
git checkout -b openshift
您可以在分支机构openshift
上进行一些提交,例如您的应用程序部署configuration。 然后,使用-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
从你的项目文件夹,做
git remote add backup user@server:/path/to/git/test.git git push backup master
您可以阅读从一个存储库推送到两个git远程来源和更改git远程来源 。
我同意@ adietisheim的回答:在用openshift =部署之前,你需要了解更好的git)
现在,即使你理解git,如果你的目录结构不符合openshift所需的目录结构,并且如果你想保留旧的目录结构,那么如何部署现有的repo并不一定是显而易见的。
为此,我有以下提示:
-
独立的选项依赖于那些不在不同文件中的选项。 例如,我将我的数据库设置从其他设置分隔到不同的文件中,如下所示:
-
settings_deploy / openshift
-
settings_deploy /本地主机
然后符号链接到你的localhosttesting,如下所示:
ln -s settings_deploy/localhost settings_deploy_file
另一种select是通过使用环境variables来检测主机:
if 'OPENSHIFT_APP_NAME' in os.environ: //openshift configurations else: //localhost
这有点简单,因为它允许你把所有的configuration放在一个文件上。 这是不太一般的,因为如果你的另一个主机提供了一个
OPENSHIFT_APP_NAME
环境variables(这个不太可能),那么这个方法就会中断。 无论如何,你仍然必须清楚地分开什么是部署依赖和什么不是。 -
-
创build一个本地部署目录
-
将最初的openshift模板克隆进去
-
创build一个部署脚本:
-
硬链接一切从你现有的旧地方到他们正确的位置
硬链接是快速创build和使用很less的内存
你可以使用像这样的东西:
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
。
您应该可以通过现有的Git存储库传递到资产pipe道
rhc create-app $APPNAME ruby-1.9 --from-code $GIT_LOCATION
远程Git仓库然后为OpenShift提供初始应用程序。
作为第二种可能性,您可以跳过通过创build本地OpenSHift Git存储库
rhc create-app $APPNAME ruby-1.9 --no-git
然后使用上述步骤将OpenShift远程Git存储库合并到本地Git存储库中。
Mohannd的答案是完美的,但我想总结一下完整的解决scheme,以防其他人需要它:
要将你的github回购作为一个Openshift回购,现在还没有完美的解决scheme,因为Openshfit使用git挂钩来触发部署或基于你的提交重新部署。 然而,最聪明的方法是使用2个仓库(openshift的和你的github的)来同时推送代码。
要做到这一点:添加一个名为“全部”的远程,并添加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$
希望这可以帮助
我遇到了将预先存在的代码存储库部署到Openshift的问题。 在我特别的情况下,我尝试部署一个tomcat webapp,包含在.openshift文件夹中的Openshift tomcatconfiguration文件是至关重要的。
对我来说固定的是在我现有的源代码树中包含.openshift文件夹,以及在我的maven pom.xml文件中包含openshiftconfiguration文件。
这很有可能与通过将您的存储库与新的openshift上游存储库合并所发生的情况相同。 对于我来说,这是adietisheim伟大的回答下面的句子“为什么”
“为了能够将代码从本地git仓库推送到openshift,首先必须将您的openshift仓库与您本地的bitbucket克隆合并。”
在我的情况下,这个合并是需要从.openshift目录获取configuration文件。 花了很长时间才能find我,因为推送没有.openshift目录仍然使我的应用程序生成和部署成功。 我看到的唯一行为是关于缺lessjsp文件的报告,这让我觉得问题与我自己的web.xml和servletconfiguration有关。
如果您使用的是github,那么您可以configurationtravis来在您每次在github存储库中进行更改时进行部署
有一种方法可以做你想做的,也就是跳过Openshift的回购。 你需要做的是build立一个jenkins,并让它轮询你自己的仓库。
这里有一个链接,说明如何从头开始设置: http : //blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html
如果你正在使用java,那么有一个替代方法。 但即使在这种方法中,您仍然会使用OpenShift git存储库。 OpenShift提供的git仓库就是你给OpenShift你的代码,你的可部署的:
你可以 – 而不是将你的代码提交到OpenShift git仓库 – 只需将它提交给你的war文件即可。 你将OpenShift git仓库克隆到你的本地机器上。 然后,您从应用程序源构build一场战争,并将这场战争放入OpenShift git仓库(克隆)中的部署文件夹中。 然后添加,提交并将您的本地克隆推送到OpenShift。 一旦推动成功执行,JBoss AS7将挑选你的战争并部署它。
放轻松!
第1步:创build应用程序。 用你最喜欢的方法(从gitRepository,预制造商的Openshift等)。 如果你使用控制台metod
第2步: rhc git-clone nameApp
步骤3: rhc app-configure nameApp --auto-deploy
第4步:享受!