如何正确地自动将 git push 到服务器

如何正确地自动将 git push 到服务器

我正在将我们的 ansible 文件迁移到我们的内部 gitlab 服务器,并且对保持 ansible 角色目录与 gitlab 项目同步的各种方法感到困惑。最终目标是让我的团队通过 gitlab 上的 Web IDE 添加/编辑文件,提交更改并将这些更改推送到 ansible (awx) 服务器。这样,团队中的 Windows 人员就不必登录命令行并运行 pull。我可以想到几种不同的方法来实现这一点,但对不同的 gitlab 功能有些困惑。

1) 我一直在研究 repo 镜像,特别是在 gitlab 上推送镜像。看起来要使它工作,它需要是一个裸仓库。当我在 ansible 服务器上创建裸仓库时,我没有看到要包含在 URL 中的 repo.git 文件。这听起来不像是镜像的目的,但我想知道这是否是一个可行的解决方案。

2) Web 钩子,我一直在研究接收后 Web 钩子,但不明白如何应用它。服务器正在运行 AWX(Ansible Web GUI),我宁愿不设置另一个 Web 服务器来监听 Web 钩子。除非我误解了 Web 钩子的工作原理。

3) Cron - 设置一个 cronjob 来每分钟拉取一次。我知道这会起作用,但它充其量只是一种 hack 行为。如果可能的话,我更愿意使用 git 工具和功能。

我了解自动推送到生产环境的风险,尽管在这种情况下我们没有在 AWX 上运行关键操作,因此风险很低。我是否正确理解了其中任何一个?

答案1

看一眼GitLab 的 CI/CD 功能;这些是在每次更改存储库(即git pushWeb IDE 的每次或每次提交)后运行多个脚本操作的预期方式。

一个简单的 CI 管道可以运行类似ansible-lint语法检查的操作,然后scp对 AWX 服务器执行操作。

首次设置可能看起来相当复杂,因为您必须设置 GitLab Runner,它是实际执行 CI 脚本的组件。对于您的用例,只需在您的 GitLab 服务器/VM 上安装运行器即可。

答案2

您还可以考虑ansible-pull,它在目标主机上运行(例如通过 cron)并检查 repo 是否有更改,如果 repo 已更新,则继续运行剧本。

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.

相关内容