web-dev-qa-db-ja.com

サーバーへのGitプッシュを適切に自動化する方法

私はansibleファイルを内部のgitlabサーバーに移行している最中で、ansibleロールディレクトリをgitlabプロジェクトと同期させるさまざまな方法について混乱しています。最終目標は、私のチームにWeb経由でファイルを追加/編集させることですIDE、変更をコミットし、それらの変更をansible(awx)サーバーにプッシュすることです。チームはコマンドラインにログインしてプルを実行する必要はありません。これを実現する方法はいくつか考えられますが、gitlabのさまざまな機能に混乱があります。

1)私はレポミラーリング、特にgitlabのプッシュミラーを見てきました。これが機能するには、最低限のリポジトリである必要があります。 ansibleサーバーでベアリポジトリを作成すると、URLに含めるrepo.gitファイルが表示されません。これはミラーリングが意図されているもののようには聞こえませんが、それが実行可能な解決策かどうか疑問に思っています。

2)Webフック。受信後のWebフックを見てきましたが、適用方法がわかりません。サーバーはAWX(Ansible Web GUI)を実行しており、Webフックをリッスンするように別のWebサーバーを設定しない方がよいでしょう。 Webフックのしくみを誤解していない限り。

3)cron-毎分プルするようにcronjobを設定します。私はこれがうまくいくことを知っていますが、せいぜいハックです。可能であればgitツールと機能を使用したいと思います。

自動で本番環境に移行するリスクを理解していますが、この場合、AWXで重要な操作を実行していないため、リスクは低くなっています。私はこれらのいずれかで正しい軌道に乗っていますか?

1
Edyoucaterself

GitLabのCI/CD関数 を見てください。これらは、リポジトリへのすべての変更(つまり、すべてのgit PushまたはWeb IDEによるすべてのコミット)後に複数のスクリプトアクションを実行するための意図された方法です。

単純なCIパイプラインは、構文チェックとしてansible-lintのようなものを実行してから、AWXサーバーに対してscpを実行できます。

CIスクリプトを実際に実行するコンポーネントであるGitLab Runnerをセットアップする必要があるため、初回のセットアップはかなり複雑に見えるかもしれません。ユースケースでは、GitLabサーバー/ VMにランナーをインストールするだけです。

1
mschuett

ansible-pullは、ターゲットホスト(cronなどを介して)で実行され、レポの変更をチェックします。レポが更新されている場合は、プレイブックの実行に進みます。

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
guzzijason