Auto-deploy para instâncias GIT

59 views
Skip to first unread message

Camilo Carromeu

unread,
Oct 3, 2016, 4:38:50 PM10/3/16
to Titan Framework
Olá pessoal,

Neste final de semana subi uma nova versão estável do CORE do Titan (versão 3.16.09-600). Nesta versão o script de auto-deploy (https://goo.gl/w0Wfeo) foi adaptado para funcionar com instâncias de repositórios GIT. Desta forma, é necessário ter apenas o GIT instalado no servidor Web caso esteja utilizando o CORE do Titan disponível no GitHub com uma instância disponível em um repositório GIT (GitHub, GitBucket, GitLab, etc).

Porém, é necessário atentar-se às mudanças conceituais em relação à versão SVN do auto-deploy. No GIT, o script irá sempre atualizar uma determinada BRANCH para a sua TAG mais recente. Assim, é necessário ter uma BRANCH para cada ENVIRONMENT que fará uso do auto-deploy, se quiser controlar separadamente o deploy em cada ambiente.

Além disso, ao contrário da prática adotada no SVN, o código da instância deve estar na raiz do repositório. Assim, sugere-se utilizar grupos (ou organizações, no caso do GitHub) para organizar o projeto. Por exemplo, há no PLEASE Lab um projeto denominado "Pandora" que foi migrado do SVN para o GIT. O repositório SVN contava com várias pastas:
  • app: contendo o código da aplicação Web (uma instância do Titan);
  • doc: documentação;
  • art: logo e artefatos da identidade visual;
  • mobile/phone: código do aplicativo móvel para smartphones;
  • mobile/totem: código de uma aplicativo móvel para tablets que atuam como totens; e
  • test: código de teste unitário para teste da camada REST.
Ao ser migrado para o GitLab do PLEASE, foi criado um grupo denominado "pandora" e diversos projetos independentes:
  • pandora / web;
  • pandora / doc;
  • pandora / art;
  • pandora / phone;
  • pandora / totem; e
  • pandora / test.
Com isso, a aplicação Web do Pandora, que é uma instância do Titan, ficou na raiz do projeto "pandora / web".

No 'configure/titan.xml' você deverá configurar o atributo "environment" da tag "update" com o nome da BRANCH a qual o script de auto-deploy deverá monitorar. Por exemplo:

<titan-configuration ...>
    ...
    <update
        environment="test"
        backup="true"

        file-mode="664"
        dir-mode="775"
        owner="root"
        group="staff"
    />
    ...
</titan-configuration>


Neste exemplo, o script irá procurar em uma BRANCH denominada "test" a TAG mais recente. Assim, para informar ao script que uma instância deve ser atualizada, basta criar uma nova tag com o nome da versão (p.e., 1.16.10-p14) na branch "test" e dar um push pra origin. Recomenda-se fortemente que o nome da tag siga o padrão da "Semantic Versioning 2.0.0" (http://semver.org/).

Repare que os atributos 'svn-login', 'svn-password' e 'svn-users' não são utilizados na configuração com instâncias em GIT. Assim, o controle de permissões sobre quem pode atualizar as instâncias é feito por meio do repositório GIT, ou seja, quem puder dar merge ou push na branch monitorada poderá ativar o script de auto-deploy (portanto, atente-se à concessão de permissões).

Assim, para instalar uma instância do Titan no servidor Web que irá usar o script de auto-deploy, você deve criar uma work copy observando a branch. Para o exemplo acima, poderia ser feito:

git clone -b test g...@your.git.host.com:group/repository.git /var/www/instance-name

git pull origin test

git checkout [last_tag]

A opção "-b" possibilita definir a branch.

Para tornar mais simples a instalação de instâncias em servidores, de forma que utilizem a branch correta na tag mais recente, foi criado um script de instalação de instâncias. O script está disponível na pasta "update" do CORE e pode ser chamado da seguinte forma:

php path/to/core/update/install.php g...@your.git.host.com:group/repository.git path/to/instance branch-name

Por exemplo, a sequência de comandos abaixo instala o CORE do Titan no caminho "/var/www/titan" e o ambiente de teste do sistema Pandora no caminho "/var/www/pandora":

composer create-project titan-framework/install /var/www/titan

php /var/www/titan/update/install.php g...@git.cnpgc.embrapa.br:pandora/web.git /var/www/pandora test

A maior vantagem do uso do script de instalação é que ele aplica automaticamente as alterações realizadas no banco de dados. Para que esta função funcione adequadamente é necessário que exista uma pasta denominada "db" na raiz da instência com um DUMP do banco de dados. O script irá carregar este DUMP e atualizar o banco a partir do SQLs da pasta "update/db" até que atinja a versão mais recente.

O script de auto-deploy ainda está sendo homologado, portanto utilizem com cuidado e, por favor, reportem o quanto antes eventuais erros.

Abraços,

Camilo

--
Reply all
Reply to author
Forward
0 new messages