チームのアプリ用に次のセットアップを構築しています。
- Docku が実行されている Heroku ライクな VM (結果として git と Docker)
- 同じマシンで別の Docker コンテナーを使用してレポをホストしています (Gogs 経由ですが、実際には任意の github-clone である可能性があります)。
- Gogs リポジトリをプロジェクトのメイン リポジトリとして使用し、Dokku によって生成されたコンテナーをアプリのデプロイされたインスタンスとして使用したい
- コードが Gogs リポジトリにプッシュされるとすぐに、このアプリを自動再デプロイしたい (基本的に、リポジトリのマスター ブランチと常に同期しているステージング環境が必要)
これを設定する方法を理解しようとしています。Gogs 環境は GitHub のレプリカで、Dokku は Heroku のレプリカなので、その 2 つのタグも追加しました。基本的に、コミット時にGitHubをHerokuに自動デプロイしようとしています。Gogs の Webhook と git hook にアクセスできます。
ここに私が検討していたアプローチがありますが、それぞれがどれほど実現可能であり、時間/安定性のためにどのアプローチを破棄すべきかはわかりません:
- Gogs に commit webhook を追加して、git の別のインスタンスのラッパーの API エンドポイントをトリガーします (これは、ウェイクアップ ping として効果的に機能します)。このラッパーは、Gogs リポジトリをローカル リポジトリにプルし、Dokku にプッシュします。 . (これは私には少し壊れやすいようです)
- Dokku に直接プッシュできるように、ある種の git フックを Gogs に書き込みます。(これは理想的ですが、Gogs のインターフェースを介してこれが可能かどうかはわかりません)
- 定期的な cron ジョブに同期を行わせます (サーバーにオーバーヘッドを追加せずに遅延を最小限に抑えたいので、私はこれのファンではありませんが、30 秒の ping はおそらく世界の終わりではありません)