私は先週、Chefを増やし、Capistranoの使用をやめる準備をしています(感情的および運用的に)。(Railsアプリをホストしています。)
GitHubのフローに従います。つまり、マスターと多数の機能ブランチがあります。現在、継続的インテグレーションと継続的デプロイにはJenkinsを使用しておりmaster
、サーバーへのデプロイにはCapistranoを使用していますが、ユニット、統合、および受け入れのテストに合格した場合に限ります。
私はChefのdeploy_revision
リソースを使用しており、それがどれほどうまく機能しているかにわくわくしています。「プッシュ」から「プル」になりたいです。しかし、テストに合格しない限り、コードをデプロイしたくありません。私はその効果を達成するための代替アプローチ間の選択に固執しています:
- Chefをタグ(例
2.0
)に向け、デプロイメントレシピでそのタグを定期的に更新します。(これは実際には継続的なデプロイメントではないため、これは好きではありません。コードをリリースするたびに、コードを手に持つようになりました。) - ブランチのシェフを指して
master -> release
、テストスイートに合格した後にJenkinsをマージします。(これは、Jenkinsサーバーがリポジトリへの読み取り/書き込みアクセス権を持っているためです。) - Chefを定期的に実行するように構成しないでください。代わりに、Jenkins
chef-client
をSSH経由で実行してください。(JenkinsマシンがサーバーにSSHでアクセスできなくなる日を楽しみにしていたので、これは好きではありません。) - コードをデプロイしますが、後でテストが失敗した場合はコミットを元に戻します。(私の見解では、エラーが発生しやすいです。)
私はすでに十分な宿題をしたと思います。私は、とりわけSteve Jangの徹底的な記事をフォローしており、 Chefのドキュメントに何時間も費やしてきました。しかし、Chefによる継続的デプロイに関するすべての優れたコミュニティチュートリアルでは、この特定のユースケースについての言及はありません。
上記のほとんどのオプションで生活できましたが、それが実証済みのアプローチであることがわかっていれば、気分が良くなります。そこにある他の組織はすでにこれを解決していると確信しています。どうやってやったの?