Como automatizar corretamente o git push para o servidor

1

Estou migrando nossos ansible files para nosso servidor interno do gitlab e tenho alguma confusão sobre as várias maneiras de manter o diretório ansible roles em sincronia com o projeto gitlab. O objetivo final é que minha equipe adicione / edite arquivos pelo IDE da web no gitlab, confirme as alterações e faça com que essas alterações sejam enviadas ao servidor ansible (awx). Dessa forma, o pessoal do Windows na equipe não precisa fazer login em uma linha de comando e executar um pull. Posso pensar em algumas maneiras diferentes de conseguir isso, mas tenho alguma confusão sobre os diferentes recursos do gitlab.

1) Eu tenho procurado por espelhamento de repo, especificamente push mirror no gitlab. Parece que para isso funcionar, precisa ser um repositório vazio. Quando eu crio um repositório nu no servidor ansible, não vejo um arquivo repo.git para incluir no URL. Não soa como isso é o que o espelhamento é destinado, mas eu estou querendo saber se é uma solução viável.

2) Ganchos da Web, tenho olhado para o gancho da web pós-recebimento, mas não entendo como aplicá-lo. O servidor está executando o AWX (Ansible Web GUI) e eu prefiro não configurar outro servidor da web para escutar os ganchos da web. A menos que eu esteja entendendo mal como os web hooks funcionam.

3) Cron - Configure um cronjob para extrair cada minuto. Eu sei que isso vai funcionar, mas o seu hacky na melhor das hipóteses. Eu preferiria usar ferramentas e recursos do git, se possível.

Eu entendo o risco de empurrar automaticamente para a produção, embora neste caso não estamos executando operações críticas no AWX, então o risco é baixo. Estou no caminho certo com algum desses?

    
por Edyoucaterself 09.11.2018 / 15:53

2 respostas

1

Dê uma olhada nas funções CI / CD do GitLab ; essa é a maneira pretendida de executar várias ações com script após cada alteração no repositório (ou seja, cada git push ou cada confirmação pelo IDE da Web).

Um pipeline de CI simples poderia executar algo como ansible-lint como uma verificação de sintaxe e, em seguida, fazer um scp para o servidor do AWX.

A primeira configuração pode parecer bastante complicada, porque você precisa configurar um GitLab Runner, que é o componente para realmente executar seus scripts de CI. Para o seu caso de uso, basta instalar o runner no seu servidor GitLab / VM.

    
por 09.11.2018 / 16:07
0

Você também pode considerar ansible-pull , que é executado no host de destino (como o cron) e verifica o repositório em busca de alterações, e continua a executar o manual se o repo tiver sido atualizado.

ANSIBLE-PULL(1)         System administration commands         ANSIBLE-PULL(1)

NAME
       ansible-pull  -  pulls  playbooks from a VCS repo and executes them for
       the local host

SYNOPSIS
       ansible-pull -U <repository> [options] [<playbook.yml>]

DESCRIPTION
       is used to up a remote copy of ansible on each managed node,  each  set
       to  run  via  cron  and update playbook source via a source repository.
       This inverts the default push  architecture  of  ansible  into  a  pull
       architecture, which has near-limitless scaling potential.

       The  setup  playbook can be tuned to change the cron frequency, logging
       locations, and parameters to ansible-pull.  This  is  useful  both  for
       extreme  scale-out  as  well  as  periodic  remediation.   Usage of the
       'fetch' module to retrieve logs from  ansible-pull  runs  would  be  an
       excellent way to gather and analyze remote logs from ansible-pull.
    
por 09.11.2018 / 16:11