既存のgitリポジトリをopenshiftで使用できますか?


102

OpenShiftでのみgit repoが必要ですか?私はすでにbitbucket / github git repoを持っているので、そこだけにプッシュしたいと思います。openshiftが親密になるように単純にそれにフックすることはできますか?

または、簡略化のために、githubでのみプッシュしますが、展開したい場合、openshiftで何かを行いますか?

私はこれをチェックしましたが、それは私を混乱させました:それは、終了と新しい(オープンシフト)gitのマージについて話しているのですか?


6
質問を校正していただけませんか?分かりづらいです。
Matt Fenwick

回答:


226

まだGitを使い慣れていない印象です。私はあなたのコードをオープンシフトにプッシュする方法を完全に理解するためにgitに入ることをお勧めします。それでも、関連する手順を説明しようと思います。一般的に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 repoのマスターブランチをローカルのgit repoとマージするように指示します。再帰的なマージ戦略を使用してマージし、競合がある場合は(「ours」)バージョンを選択するように指示します。

マージが実行されると、gitリポジトリをopenshiftにプッシュする準備が整います。それを行うには、次のようにします。

git push openshift HEAD

ローカルコードをリモートリポジトリの「openshift」というHEADブランチにプッシュするようにgitに指示します(openshift gitリポジトリを保存したエイリアス、さらにいくつかの段落)。

ところで。数か月前にopenshift-java-clientの使用方法を示すjbossツールのブログを書きました:https ://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client 。上記の手順は、最後の段落「もうすぐ終わりです」にあります。


30
これはまだ質問に答えていないと思います。問題は、openshiftのgit repoをリモートとして使用するのではなく、代わりにgithubのrepo(またはそのことについてはbitbucket)をgit repoとして使用することです。コラボレーションに使用されるgithub repoへのプッシュにより、openshiftに反映されることも保証されます。私も同じものを探していますが、答えが見つかりません。この問題の解決策が
見つかっ

9
openshift git repoは使用できません。OpenShift内のgitリポジトリは、OpenShiftにコードを渡す方法です。代わりはなく、「代わりにgithubを使用する」ことはできません。上記で概要を説明したように、OpenShiftのgitリポジトリはgithubの使用を除外していません。github / bitbucket / XXをマスターソース管理リポジトリとして使用し、ほとんどのユーザーがそれを行う場合-は、OpenShift gitリポジトリをリモートとしてローカルgithub / bitbucket / XX-cloneに追加するだけです。OpenShiftへのプッシュは、OpenShiftへの展開と同等です。
adietisheim 2013

1
私がそれを理解している場合、私がopenshiftで作業する場合、開発リポジトリ(たとえばgithub)で作業する必要があり、それを展開したい場合は、openshift HEADをプッシュするだけでいいですか?
Ricardo

1
フォートワース-fフラグ、およびGitのURLのSSH部分が両方とも必要不可欠であることに注意
サイモン・H

1
@adietisheimと新しいgit 2.9 --allow-unrelated-historiesでは、無関係な履歴をマージできないようにgitのデフォルトが変更されているため、追加する必要があります。
Alon Burg

23

質問は2歳で、@ adietisheimの回答は受け入れられました。OpenShiftリポジトリをパブリックリポジトリのマスターブランチに混在させたくないので、個人的にはOpenShiftリポジトリをローカルクローンにマージしたくありません。

を使用してリモートを追加したと仮定するとgit remote add openshift <openshift-git-repo-url>、ここに私がするでしょう:

ブランチにopenshift基づいて新しいローカルブランチを作成しますmaster

git checkout -b openshift

openshiftアプリの展開構成など、ブランチでいくつかのコミットを行うことができます。次に、現在のブランチをOpenShiftリポジトリー内のリモート参照マッチングマスター-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

6

あなたのプロジェクトフォルダから、

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

1つのリポジトリから2つのgitリモートオリジンへのプッシュgitリモートオリジンの変更を読むことができます。


git push backup masterrefspecの両側を指定する必要はありません。

1
2 gitリモートにプッシュするヒントは完璧です。次に、次のことも実行できます:git push -u allデフォルトのリモートに「すべて」。するとgit push、続いて2つのリポジトリにプッシュされます!
Akram Ben Aissi 2015年

5

@adietisheimの答えに同意します。openshiftを使用してデプロイする前に、より良いgitを理解する必要があります=)

これで、gitを理解していても、ディレクトリ構造がopenshiftで必要なディレクトリ構造と一致せず、古いディレクトリ構造を維持したい場合、既存のリポジトリをデプロイする方法は必ずしも明らかではありません。

そのために、私は次のヒントを持っています:

  • 展開に依存するオプションと、別のファイルに含まれていないオプションを区別します。たとえば、次のように、データベース設定を他の設定から別のファイルに分離します。

    • settings_deploy / openshift

    • settings_deploy / localhost

    そして、次のようなlocalhostテストへのシンボリックリンク:

    ln -s settings_deploy/localhost settings_deploy_file
    

    別のオプションは、環境変数を使用してホストを検出することです:

    if 'OPENSHIFT_APP_NAME' in os.environ:
        //openshift configurations
    else:
        //localhost
    

    これは、すべての構成を単一のファイルに配置できるため、少し単純です。これは少し一般的ではOPENSHIFT_APP_NAMEありません。ホストの別の1つが環境変数を提供しているため(このホストではありそうもないことです)、メソッドが壊れるからです。とにかく、展開に依存するものとそうでないものを明確に区別する必要があります。

  • ローカル展開ディレクトリを作成する

  • 最初の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の初期アプリケーションを提供します。

2番目の可能性として、ローカルのOpenSHift Gitリポジトリの作成をスキップできます。

rhc create-app $APPNAME ruby-1.9 --no-git

次に、上記の手順を使用して、OpenShiftリモートGitリポジトリをローカルGitリポジトリにマージします。


4

Mohanndの答えは完璧ですが、他の人がそれを必要とする場合に備えて、完全なソリューションを要約したいと思います。

Openshfitはgitフックを使用してコミットに基づいてデプロイまたは再デプロイをトリガーするため、githubリポジトリをOpenshiftリポジトリとして使用するための完璧なソリューションはありません。ただし、最も賢い方法は、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」という名前を付けることはできません。originorigin2の
Eric P

この実装を使用したが、私は、このようなリモート「openshift-のgit-レポ」を言うエラー..私は..上記のスクリプトに欠けがあると思いました
アルマン・オルテガ

2

Openshiftのリポジトリをスキップするなど、やりたいことを行う方法があります。あなたがする必要があるのはジェンキンスをセットアップし、それがあなた自身のリポジトリをポーリングするようにすることです。

ゼロから設定する方法を説明するリンクがここにあります:http : //blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html


1

既存のコードリポジトリをOpenshiftにデプロイするときに問題が発生しました。Tomcat webappをデプロイしようとした私の特定のコンテキストでは、.openshiftフォルダーに含まれているOpenshift tomcat構成ファイルが重要でした。

私にとってそれを修正したのは、既存のソースツリーに.openshiftフォルダーが含まれていることと、maven pom.xmlファイルにopenshiftプロファイルが含まれていることです。

これは、リポジトリを新しいオープンシフトアップストリームリポジトリにマージすることで発生する可能性と同じです。私にとって、これはadietisheimのすばらしい答えで次の文の背後にある「理由」です。

「ローカルgitリポジトリからopenshiftにコードをプッシュできるようにするには、まずopenshiftリポジトリをローカルのbitbucketクローンとマージする必要があります。」

私の場合、.openshiftディレクトリから設定ファイルを取得するには、このマージが必要でした。.openshiftディレクトリなしでプッシュしても、アプリのビルドとデプロイが成功したため、理解に時間がかかりました。私が見た唯一の動作は、欠落しているjspファイルに関するレポートでした。そのため、問題は自分のweb.xmlおよびサーブレット構成に関連していると思いました。



0

Javaを使用している場合は、別の方法があります。ただし、このアプローチでも、OpenShift gitリポジトリを使用します。OpenShiftが提供するgitリポジトリは、OpenShiftにコードとデプロイ可能なコードを提供する方法です。

OpenShift gitリポジトリにコードをコミットする代わりに、単純にwarファイルを与えることができます。OpenShift gitリポジトリをローカルマシンに複製します。次に、アプリケーションソースからwarをビルドし、このwarをOpenShift gitリポジトリ(クローン)内のデプロイメントフォルダーに配置します。次に、ローカルクローンを追加してコミットし、OpenShiftにプッシュします。プッシュが正常に実行されると、JBoss AS7が戦争を選択してデプロイします。


0

楽に行けよ!

ステップ1:アプリを作成します。お好みの方法(gitRepository、プリメーカーOpenshiftなどから)。コンソールメソッドを使用する場合
ステップ2:rhc git-clone nameApp
ステップ3:rhc app-configure nameApp --auto-deploy
ステップ4:楽しむ!


それは結構ですが、それは質問に対する答えではありませんでした:)
Janos Vinceller
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.