仅在openshift上才需要git repo吗?我已经有bitbucket / github git repo,并且只想推送到那里。我可以简单地挂入它,以便openshift获得亲密感吗?
还是为了简化起见,我只在github上推送内容,但是当我要部署时,我会使用openshift做什么?
我确实检查了一下,但是这让我感到困惑:它是在谈论合并退出和新的(openshift)git吗?
仅在openshift上才需要git repo吗?我已经有bitbucket / github git repo,并且只想推送到那里。我可以简单地挂入它,以便openshift获得亲密感吗?
还是为了简化起见,我只在github上推送内容,但是当我要部署时,我会使用openshift做什么?
我确实检查了一下,但是这让我感到困惑:它是在谈论合并退出和新的(openshift)git吗?
Answers:
我的印象是您还不习惯使用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 。您将在最后一段“我们快到了”中发现上述步骤。
--allow-unrelated-histories
因为git默认已更改为不允许合并无关的历史记录。
我知道这个问题已经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
在您的项目文件夹中,执行
git remote add backup user@server:/path/to/git/test.git
git push backup master
您可以阅读从一个存储库推送到两个git远程起源和更改git远程起源。
git push -u all
全部”到默认遥控器。做的时候git push
,它将随后推送至2个存储库!
我同意@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
部署的项目。
您应该能够通过以下方式将现有的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存储库中。
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$
希望这可以帮助
有一种方法可以执行您想要的操作,即跳过Openshift的回购。您需要做的是设置一个jenkins,并让它轮询您自己的存储库。
这里有一个链接,说明了如何从头开始进行设置:http : //blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html
我遇到了将预先存在的代码存储库部署到Openshift的问题。在我特定的环境中,当我尝试部署tomcat Web应用程序时,.openshift文件夹中包含的Openshift tomcat配置文件至关重要。
对我而言,解决此问题的方法是在现有的源代码树中包含.openshift文件夹,以及在我的maven pom.xml文件中包含openshift配置文件。
这很可能与将存储库与新的openshift上游存储库合并而发生的情况相同。对我来说,这是阿迪蒂斯海姆(Adietisheim)出色回答中以下句子的“原因”:
“为了能够将代码从本地git存储库推送到openshift,您首先必须将openshift存储库与本地bitbucket克隆合并。”
就我而言,需要进行这种合并才能从.openshift目录中获取配置文件。我花了很长时间才知道,因为没有.openshift目录的推送仍然使我的应用程序成功构建和部署。我看到的唯一行为是关于缺少jsp文件的报告,这使我认为问题与我自己的web.xml和servlet配置有关。
如果您使用的是github,则可以配置travis,以便每次在github存储库中进行更改时进行部署
如果您使用的是Java,则有另一种方法。但是即使采用这种方法,您仍将使用OpenShift git存储库。OpenShift提供的git存储库是您如何向OpenShift提供代码和可部署的代码:
您可以-无需将代码提交给OpenShift git repo-只需将其提供给您的war文件即可。您将OpenShift git存储库克隆到本地计算机。然后,您可以从应用程序源构建战争,并将该战争放入OpenShift git repo(克隆)中的Deployments文件夹中。然后,您添加,提交并将本地克隆推送到OpenShift。推送成功执行后,JBoss AS7将选择您的战争并进行部署。
放轻松!
第1步:创建应用。使用您最喜欢的方法(来自gitRepository,预制的Openshift等)。如果您使用控制台方法
步骤2:rhc git-clone nameApp
步骤3:rhc app-configure nameApp --auto-deploy
步骤4:享受!