Как правильно автоматизировать git push на сервер

Я в процессе переноса наших файлов ansible на наш внутренний сервер gitlab, и у меня возникла некоторая путаница по поводу различных способов синхронизации каталога ansible ролей с проектом gitlab. Конечная цель - заставить мою команду добавлять / редактировать файлы через веб-среду IDE на gitlab, фиксировать изменения и отправлять эти изменения на сервер ansible (awx). Таким образом, участникам команды Windows не нужно входить в командную строку и запускать извлечение. Я могу придумать несколько разных способов сделать это, но у меня есть некоторая путаница по поводу различных функций gitlab.

1) Я смотрел на зеркалирование репо, в частности, на push mirror на gitlab. Похоже, чтобы это работало, это должно быть чистое репо. Когда я создаю голое репо на доступном сервере, я не вижу файла repo.git для включения в URL-адрес. Это не похоже на то, для чего предназначено зеркалирование, но мне интересно, является ли это жизнеспособным решением.

2) Веб-хуки, я смотрел на веб-хуки после получения, но не понимаю, как их применять. На сервере работает AWX (Ansible Web GUI), и я предпочитаю не настраивать другой веб-сервер для прослушивания веб-перехватчиков. Если только я не неправильно понимаю, как работают веб-хуки.

3) Cron - Настроить cronjob для извлечения каждую минуту. Я знаю, что это сработает, но в лучшем случае это хакерство. Я бы предпочел использовать инструменты и функции git, если это возможно.

Я понимаю риск автоматического перехода в рабочую среду, хотя в этом случае мы не выполняем критические операции на AWX, поэтому риск невелик. На правильном ли я пути с любым из них?

1
задан 9 November 2018 в 16:53
2 ответа

Взгляните на функции CI / CD GitLab ; это предполагаемый способ запуска нескольких сценариев действий после каждого изменения в репозитории (т.е. каждый git push или каждый коммит веб-IDE).

Простой конвейер CI может запускать что-то вроде ansible-lint в качестве проверки синтаксиса, а затем выполните scp на сервере AWX.

Первая настройка может показаться довольно сложной, потому что вам нужно настроить GitLab Runner, который является компонент для фактического выполнения ваших сценариев CI. Для вашего варианта использования просто установите бегун на свой сервер GitLab / виртуальную машину.

1
ответ дан 3 December 2019 в 23:10

Вы также можете рассмотреть ansible-pull , который запускается на целевом хосте (например, через cron), проверяет репозиторий на наличие изменений и запускает playbook, если репо было обновлено.

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.
0
ответ дан 3 December 2019 в 23:10

Теги

Похожие вопросы