Posso usar meu repositório git existente com o openshift?

102

É necessário ter git repo apenas no openshift? Já tenho bitbucket / github git repo e prefiro enviar apenas lá. Posso simplesmente enganchar nele para que o open-shift receba intimação?

Ou, para simplificar, eu empurro apenas no github, mas quando quero implantar, faço algo com o openshift?

Eu verifiquei isso, mas me confundiu: está falando sobre mesclar sair e novo (openshift) git?

Jigar Shah
fonte
6
Você poderia revisar a pergunta? É muito difícil entender.
Matt Fenwick

Respostas:

226

Tenho a impressão de que você ainda não está acostumado a usar o git o suficiente. Aconselho você a entrar no git para entender completamente como enviar seu código para o openshift. No entanto, deixe-me tentar explicar as etapas envolvidas: Como você faria com o git em geral, a abordagem a ser escolhida aqui é clonar seu outro repositório git (por exemplo, no bitbucket) para sua máquina local:

git clone <bitbucket-repo-url>

Seu clone local tem então seu outro repo (bitbucket etc.) como um repo remoto. Seu repo remoto é armazenado com o alias "origin" (o alias padrão usado pelo git se você clonar). Em seguida, você adiciona o repositório openshift como remoto ao seu clone. Faça isso enquanto usa explicitamente um alias para o repo remoto que você adiciona - estou usando "openshift" como alias aqui:

git remote add openshift -f <openshift-git-repo-url>

Para poder enviar o código de seu repositório git local para o openshift, primeiro você precisa mesclar seu repositório openshift com seu clone bitbucket local. Você faz isso emitindo localmente:

git merge openshift/master -s recursive -X ours

Com este comando, você diz ao git para mesclar o branch master no repositório git openshift com seu repositório git local. Você diz a ele para mesclar usando a estratégia de mesclagem recursiva e escolher sua ("nossa") versão quando houver conflitos.

Assim que a fusão for executada, você estará pronto para enviar seu repositório git para o openshift. Você faz isso fazendo:

git push openshift HEAD

Você diz ao git para enviar seu código local para o branch HEAD no repositório remoto chamado "openshift" (o alias em que armazenamos o repositório git openshift, alguns parágrafos adiante).

btw. Eu escrevi um blog de ferramentas jboss que estava demonstrando como usar o openshift-java-client alguns meses atrás: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client . Você encontrará as etapas acima no último parágrafo "Estamos quase lá".

Adietisheim
fonte
30
Acho que isso ainda não responde à pergunta. A questão é sobre não usar o repositório git do openshift como o remoto, mas em vez disso, usar o repo no github (ou bitbucket, nesse caso) como o repositório git. Um push para o repo do github usado para colaboração também deve garantir que ele seja refletido no openshift. Também estou procurando o mesmo, mas não encontrei a resposta. Vou tentar atualizar se conseguir uma solução para isso
Manoj NV
9
Você não pode não usar o repositório git openshift. O repositório git dentro do OpenShift é como você entrega o código ao OpenShift. Não há alternativa, não há "usar o github ao invés". Como tentei delinear acima, o repositório git no OpenShift não está excluindo você de usar o github. Se você usar github / bitbucket / XX como seu repositório master de controle de origem - e a maioria dos usuários fará isso -, então você simplesmente adicionaria o repo git OpenShift como remoto ao seu github / bitbucket / XX-clone local. Empurrar para OpenShift é então equivalente a deplyoing para OpenShift.
adietisheim
1
Se eu entendi, se eu trabalhar com o openshift, devo trabalhar com um repositório de desenvolvimento (por exemplo, github) e se eu quiser implantá-lo, basta pressionar o openshift HEAD, certo?
Ricardo
1
Vale a pena notar que o sinalizador -f e a parte ssh do URL do git são essenciais
Simon H
1
@adietisheim com o novo git 2.9 você precisará adicionar, --allow-unrelated-historiesjá que o padrão do git mudou para não permitir a fusão de históricos não relacionados.
Alon Burg de
23

Sei que a pergunta tem 2 anos e a resposta de @adietisheim foi aceita. Eu pessoalmente não gosto de mesclar o repositório openshift em meu clone local porque não quero misturar o repositório OpenShift no branch master do meu repositório público.

Supondo que você tenha adicionado o controle remoto usando git remote add openshift <openshift-git-repo-url>, aqui está o que eu faria:

Crie uma nova filial local com openshiftbase na masterfilial.

git checkout -b openshift

Você pode fazer alguns commits no branch openshift, como as configurações de implantação de seu aplicativo. Em seguida, envie o branch atual para o mestre de correspondência de ref remoto no repositório OpenShift com o sinalizador -fpara sobrescrever tudo no masterbranch remoto .

git push openshift master -f

Sempre que eu quiser implantar meu aplicativo no OpenShift, eu verificaria o openshiftbranch local e mesclaria o masterbranch com ele, então forçaria o push para o OpenShift, no entanto, -fpode não ser necessário para os próximos push:

git checkout openshift
git merge --no-ff master
git push openshift master -f
Sithu
fonte
6

De sua pasta de projeto, faça

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

Você pode ler Empurrando para duas origens remotas git de um repositório e Alterando a origem remota git .

Mohannd
fonte
git push backup masteré suficiente, você não precisa especificar ambos os lados do refspec.
1
A dica para empurrar para 2 git remoto é perfeita. Você também pode fazer um: git push -u allpara 'todos' para o controle remoto padrão. Ao fazer git pushisso, ele irá posteriormente empurrar para os 2 repositórios!
Akram Ben Aissi
5

Eu concordo com a resposta de @adietisheim: você precisa entender melhor o git antes de implantar com openshift =)

Agora, mesmo que você entenda o git, não é necessariamente óbvio como implantar seu repo existente se sua estrutura de diretório não corresponder à estrutura de diretório exigida pelo openshift e se você quiser manter sua estrutura de diretório antiga.

Para isso, tenho as seguintes dicas:

  • opções separadas que são dependentes de implantação daquelas que não estão em arquivos diferentes. Por exemplo, separo minhas configurações de banco de dados de outras configurações em arquivos diferentes como:

    • settings_deploy / openshift

    • settings_deploy / localhost

    e, em seguida, crie um link simbólico para seu teste de host local como algo como:

    ln -s settings_deploy/localhost settings_deploy_file
    

    Outra opção é detectar o host usando variáveis ​​de ambiente:

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

    Isso é um pouco mais simples, pois permite que você coloque todas as configurações em um único arquivo. É um pouco menos geral, pois se algum outro de seus hosts oferecer uma OPENSHIFT_APP_NAMEvariável de ambiente (improvável para este), o método será interrompido. De qualquer forma, você ainda precisa separar claramente o que é dependente da implantação e o que não é.

  • crie um diretório de implantação local

  • clonar o template inicial de OpenShift nele

  • crie um script de implantação que:

    • hardlinks tudo do seu antigo local existente para seus locais corretos no

      hardlinks são rápidos de criar e usam muito pouca memória

      você poderia usar algo como:

      cp -lrf original_repo_dir deploy_repo_dir

    • mantenha apenas o settings_deployarquivo correto no repositório de implantação:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • force push:

      cd deploy_repo

      git push -f origin master

    • limpe o repositório de implantação:

      git reset --hard HEAD

      git clean -df

para aqueles interessados ​​na implantação do django, tenho um exemplo no meu github , em particular, verifique o deploy.shscript e o projeto projects/elearnque ele implanta.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fonte
4

Você deve ser capaz de passar um repositório Git existente para o pipeline de ativos via

rhc create-app $APPNAME ruby-1.9 --from-code $GIT_LOCATION

O repositório Git remoto então entrega o aplicativo inicial para OpenShift.

Como uma segunda possibilidade, você pode pular a criação do repositório OpenSHift Git local via

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

e, em seguida, use as etapas descritas acima para mesclar o repositório Git remoto OpenShift em seu repositório Git local.

estefankolb
fonte
4

A resposta de Mohannd é perfeita, mas gostaria de resumir a solução completa, caso alguém mais precise:

Para usar seu repositório github como um repositório Openshift, não há solução perfeita agora, porque, Openshfit usa git hooks para acionar a implantação ou reimplantação com base em seus commits. No entanto, a maneira mais inteligente seria usar 2 repos (o do openshift e o do github) para enviar simultaneamente o código.

Para fazer isso: Adicione um controle remoto chamado "all" e adicione 2 urls push a ele.

git remote add all ssh://[email protected]/~/git/yourapp.git
git remote set-url openshift-git-repo --push --add ssh://[email protected]/~/git/yourapp.git
git remote set-url github-repo --push --add [email protected]:youruser/yourapp.git

Em seguida, defina o controle remoto chamado 'all' como o remoto push padrão:

git push -u all

Para confirmar e enviar seu código, proceda como de costume: ele irá enviar 2 controles remotos e implantar no OpenShift

git add .
git commit -m "my commit"
git push

E veja o resultado:

[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 [email protected]: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://[email protected]/~/git/myapp.git/
   a036a44..3fc96b2  master -> master
MyLaptop:myapp User$

Espero que isto ajude

Akram Ben Aissi
fonte
Você tem um erro. Você pode ter vários repositórios, mas ambos não podem ser nomeados como "origem". Eles devem ser únicos, como: origem e origem2
Eric P
usando esta implementação, mas recebi um erro que diz Não existe tal remoto 'openshift-git-repo' .. Acho que falta no script acima ..
Arman Ortega
1

Tive problemas para implantar um repositório de código pré-existente no Openshift. No meu contexto particular, onde tentei implantar um webapp do tomcat, os arquivos de configuração do tomcat OpenHift incluídos na pasta .openshift foram cruciais.

O que consertou para mim foi a inclusão da pasta .openshift em minha árvore de código-fonte existente, bem como a inclusão do perfil openshift em meu arquivo maven pom.xml.

É muito provável que seja o mesmo que aconteceria ao fundir seu repositório com o novo open-shift upstream. Para mim, este é o "porquê" por trás da frase seguinte na grande resposta de adietisheim:

"Para poder enviar o código de seu repositório git local para o openshift, primeiro você precisa mesclar seu repositório openshift com seu clone bitbucket local."

No meu caso, essa mesclagem foi necessária para obter os arquivos de configuração do diretório .openshift. Levei muito tempo para descobrir para mim porque empurrar sem o diretório .openshift ainda fazia meu aplicativo ser compilado e implantado com sucesso. O único comportamento que vi foi um relatório sobre arquivos jsp ausentes, o que me fez pensar que o problema estava relacionado ao meu próprio web.xml e à configuração do servlet.

Bram Luyten
fonte
0

Se você estiver usando java, existe uma abordagem alternativa. Mas, mesmo nessa abordagem, você ainda usaria o repositório git OpenShift. O repositório git fornecido pelo OpenShift é como você fornece ao OpenShift seu código, seus implementáveis:

Você pode - em vez de comprometer seu código para o repositório git OpenShift - simplesmente fornecer seu arquivo war. Você clona o repositório git OpenShift para sua máquina local. Em seguida, você constrói um war a partir do código-fonte do aplicativo e o coloca na pasta de implantações dentro do seu repositório git OpenShift (clone). Em seguida, você adiciona, confirma e envia seu clone local ao OpenShift. Assim que o push for executado com sucesso, o JBoss AS7 escolherá sua guerra e a implantará.

Adietisheim
fonte
0

PEGA LEVE!

etapa 1: crie o aplicativo. Com seu método favorito (de gitRepository, pre-maker Openshift, etc). se você usar console metod
etapa 2: rhc git-clone nameApp
etapa 3: rhc app-configure nameApp --auto-deploy
etapa 4: APROVEITE!

Patricio Joaquin Labarca Guzma
fonte
Tudo bem, mas essa não era a resposta à pergunta :)
Janos Vinceller