是否只需要在 openshift 上安装 git repo?我已经有 bitbucket / github git repo 并且宁愿只推到那里。我可以简单地加入它以便 openshift 得到提示吗?
或者为了简化,我只在github上推送,但是当我想部署时,我用openshift做一些事情?
我确实检查了这个,但它让我感到困惑:它正在谈论合并退出和新的(openshift)git?
我的印象是你还不够习惯使用 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 。您将在最后一段“我们快到了”中发现上述步骤。
我知道这个问题已经 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
从您的项目文件夹中,执行
git remote add backup user@server:/path/to/git/test.git
git push backup master
我同意@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
您应该能够通过以下方式将现有 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 存储库中。
莫汉德的回答很完美,但我想总结一下完整的解决方案,以防其他人需要它:
要将您的 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$
希望这可以帮助
有一种方法可以做你想做的事,即跳过 Openshift 的 repo。您需要做的是设置一个 jenkins,并让它轮询您自己的存储库。
这里有一个链接解释了如何从头开始设置它:http: //blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html
如果您使用的是 github,则可以配置 travis 以在每次更改 github 存储库时进行部署
我在将预先存在的代码存储库部署到 Openshift 时遇到了问题。在我尝试部署 tomcat webapp 的特定环境中,.openshift 文件夹中包含的 Openshift tomcat 配置文件至关重要。
为我解决的问题是将 .openshift 文件夹包含在我现有的源代码树中,以及将 openshift 配置文件包含在我的 maven pom.xml 文件中。
这很可能与将您的存储库与新的 openshift 上游存储库合并时发生的情况相同。对我来说,这是 adietisheim 出色答案中以下句子背后的“为什么”:
“为了能够将代码从本地 git 存储库推送到 openshift,您首先必须将 openshift 存储库与本地 bitbucket 克隆合并。”
就我而言,需要此合并才能从 .openshift 目录中获取配置文件。我花了很长时间才弄清楚,因为没有 .openshift 目录的推送仍然使我的应用程序构建和部署成功。我看到的唯一行为是关于缺少 jsp 文件的报告,这让我认为问题与我自己的 web.xml 和 servlet 配置有关。
如果您使用的是 java,那么还有另一种方法。但即使采用这种方法,您仍然会使用 OpenShift git 存储库。OpenShift 提供的 git 存储库是您向 OpenShift 提供代码和可部署的方式:
你可以——而不是将你的代码提交到 OpenShift git repo——只需给它你的战争文件。您将 OpenShift git 存储库克隆到本地计算机。然后,您从应用程序源构建一个战争,并将这个战争放入 OpenShift git repo(克隆)中的部署文件夹中。然后,您添加、提交并将本地克隆推送到 OpenShift。一旦推送成功执行,JBoss AS7 将选择你的战争并部署它。
放轻松!
第 1 步:创建应用程序。使用您最喜欢的方法(来自 gitRepository、pre-maker Openshift 等)。如果您使用控制台方法
第 2rhc git-clone nameApp
步:第 3rhc app-configure nameApp --auto-deploy
步:第 4 步:享受!