Jump to content
NCS_One

GIT "deploy" de aplicação web.

Recommended Posts

NCS_One

Boas.

Tenho procurado uma forma simples de fazer o "deploy" das minhas aplicações web e encontrei várias, agora vinha aqui pedir que partilhassem as vossas.

Obrigado.


Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Share this post


Link to post
Share on other sites
Rui Carlos

Eu ando há um ano para escrever um artigo sobre o assunto :D

De forma resumida, tenho um repositório no servidor de produção, e defini um post-receive hook, para que sempre que fizer push para esse repositório, o git verifique qual o branch em causa, e execute as acções apropriadas, i.e., se for o branch de produção, faz para checkout na pasta do servidor web, e ajusta as permissões dos ficheiros conforme necessário.

Share this post


Link to post
Share on other sites
Knitter

Eu uso o mesmo sistema que o Rui, embora tenha mais algumas configurações a fazer e tenha utilizadores registados só para o processo de deploy onde o utilizador só tem permissões para fazer pull e nunca pode escrever para o repositório central. Também configuro o servidor web para esconder os ficheiros e pastas do Git.

Mas o processo base acaba por ser sempre o mesmo: ter um clone do repositório e ou de forma automática ou manual fazer um pull no servidor de produção no branch estável (eu tenho um só para deployment).

Share this post


Link to post
Share on other sites
Rui Carlos

Entretanto acabei por escrever o artigo a descrever o processo que uso em mais detalhe.

[...] Neste caso concreto, vamos usar um post-receive hook, que é executado no servidor no final de uma acção push. Assim, para definir o hook criamos o ficheiro hooks/post-receive, onde colocamos uma script com as acções a executar depois de um push. Na primeira linha da script vamos colocar #!/bin/bash, para indicar quem vai executar a script. Na linha seguinte colocamos read oldrev newrev refname. O objectivo desta linha é permitir saber qual o branch que foi usado no push, de modo a permitir efectuar acções diferentes em função do branch, que ficará associado à variável $refname.

Agora passamos à parte de especificar as acções a realizar. Vamos assumir que existem dois branchs, o dev e o master, e que sempre que se fizer push do dev se pretende actualizar os ficheiros na pasta /var/www/dev/ e sempre que se fizer push do master se pretende actualizar os ficheiros na pasta /var/www/main/. Para tal, vamos usar o seguinte código:

case "$refname" in
refs/heads/master)
	echo 'Deploying files to production website...'
	GIT_WORK_TREE=/var/www/main git checkout -f master
	echo 'Fixing file permissions...'
	# chmod ...
	echo 'Done.'
	;;
refs/heads/dev)
	echo 'Deploying files to development website...'
	GIT_WORK_TREE=/var/www/dev git checkout -f dev
	echo 'Fixing file permissions...'
	# chmod ...
	echo 'Done.'
	;;
*)
	echo "No deployment action (unknown refname: $refname)."
	;;
esac

O comando case trata de escolher a acção apropriada. Por exemplo, no caso do branch master, usamos o comando GIT_WORK_TREE=/var/www/main git checkout -f master para actualizar os ficheiros, indicando a pasta onde os mesmos são colocados através da variável GIT_WORK_TREE. Por vezes temos também que corrigir as permissões e/ou proprietários dos ficheiros, pelo que devem ser adicionados os comandos apropriados. Também podemos imprimir algumas mensagens de feedback, que serão mais tarde mostradas no cliente que está a fazer push.

Um pormenor a ter em conta é que o utilizador usado na operação de push terá que ter permissões para realizar as referidas operações [...]

  • Vote 1

Share this post


Link to post
Share on other sites
NCS_One

Obrigado por partilharem e também pelo excelente artigo.


Se a vida te voltar as costas aproveita e apalpa-lhe o cu.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.