9

Joelはデイリー ビルドを高く評価しているようです。従来のコンパイル済みアプリケーションについては、確かに彼の正当性を理解できますが、これは Web 開発とどのように類似しているのでしょうか? またはそうではないでしょうか?

私が求めているプロジェクトについて少し -- Django (Python) Web アプリに取り組んでいる 2 人の開発者がいます。1 つの svn リポジトリがあります。各開発者は、ローカルで実行されている MySQL のチェックアウトと独自のコピーを保持します (Django に慣れていない場合、Django には独自のテスト サーバーがバンドルされています。これは、ASP アプリが Visual Studio 内で実行できるのと同じです)。開発とテストはローカルで行われ、リポジトリにコミットされます。Web サイトの実際の作業コピーは SVN チェックアウトです (SVN エクスポートについては知っていますが、時間がかかりすぎます)。「ビルド」に最も近いのは、作業コピーで SVN 更新を実行し、django ビット (「manage.py syncdb」) を実行し、検索エンジン キャッシュ (solr) を更新してから、Apache を再起動するバッチ ファイルです。

私が見ていないのは、ウェブアプリとの類似点だと思います。

「夜間ビルド」を使用してソース管理された Web アプリを実行していますか? もしそうなら、それはどのようなものですか?

4

6 に答える 6

11

Django テスト フレームワークを使用して、ナイトリー ビルドとしてすべての Django 単体テストを簡単に実行できます。

それが私たちの仕事です。

また、Django の機能を利用しない通常の単体テストもいくつかあり、それらも実行します。

Python (および Django) は、コンパイル済み言語が行うような夜間のコンパイル/リンク/単体テストを必要としませんが、「ビルドを壊さないでください」という日常的な規律の恩恵を受けます。そして、所有するすべてのものを単体テストする毎日のサイクルは良いことです。

-3私たちは、Python 2.6 (これは私たちにとって完璧に機能します) を検討し、使用している非推奨の機能を確認するオプションを使用して単体テストを実行しようとしています。単体テストの完全なスイートがあることで、Python 3 互換性のための変更によってビルドが壊れないことが保証されます。そして、それらを毎晩実行するということは、正しくリファクタリングしていることを確認する必要があることを意味します。

于 2009-09-17T22:56:32.523 に答える
3

継続的インテグレーションは、適切なプロセスがある場合に役立ちます。慣れ親しんだい場合は、JetBrains の TeamCity が最適な出発点です。

http://www.jetbrains.com/teamcity/index.html

Django に直接関連する素晴らしい記事がここにあります。

http://www.ajaxline.com/continuous-integration-in-django-project

これで始められることを願っています。

于 2009-09-17T22:54:12.113 に答える
3

動的言語で構築された Web アプリケーションは、「コンパイル」ステップを必要としない場合がありますが、アプリを実行するために必要な「ビルド」ステップがいくつかある場合があります。ビルド スクリプトは、依存関係をインストールまたはアップグレードし、データベースの移行を実行してから、テスト スイートを実行して、コードがリポジトリに実際にチェックインされたバージョンと比較して「クリーン」であることを確認します。または、コードのコピーをテスト サーバーにデプロイし、新しいバージョンに対して一連の Selenium 統合テストを実行して、コア サイトの機能が引き続き機能することを確認します。

継続的インテグレーションのトピックについて読むと役立つ場合があります。これは、webapp 開発チームにとって非常に役立つプラクティスです。開発プロセスのペースが速くアジャイルになればなるほど、自動化されたテストと品質メトリクスからの定期的な入力が必要になり、コードの壊れたバージョンで迅速かつ大声で失敗するようになります。

于 2009-09-17T22:55:49.780 に答える
2

本当にあなたともう 1 人の開発者がそれに取り組んでいるだけの場合、ナイトリー ビルドはおそらくあまり役​​に立ちません。

ナイトリー ビルドに相当する Web アプリは、ステージング サイト (ナイトリー ビルド可能) であると言えます。

ステージング エリアへのナイトリー ビルドが真の利益をもたらし始めるのは、クライアント、プロジェクト マネージャー、および QA 担当者が、アプリの最新の比較的安定したバージョンを確認できるようにする必要がある場合です。あなたの開発者サンドボックス (少なくとも私のような人なら) は、次の機能を実装しようとして物事を壊しているため、使用できない状態で多くの時間を費やしている可能性があります。したがって、典型的な問題は、QA担当者がバグが修正されたことを確認したい、PMが計画された機能が正しく実装されていることを確認したい、またはクライアントが関心のある問題について進捗状況を確認したいということです。約。開発者のサンドボックスにしかアクセスできない場合は、それを見てみると、サンドボックスのバージョンが実行されていない可能性が高くなります (./manage. py runserver がどこかの端末で起動している)、または何か他の理由で壊れた状態になっている。それは本当にチーム全体を遅くし、多くの時間を無駄にします。

本番バージョンを自動的に更新するだけなので、ステージング設定がないようです。あなたが私 (そしてほとんどの開発者だと思います) よりもはるかに慎重で規律があり、完全に防弾ではないものを決してコミットしないのであれば、それは問題ありません個人的には、私の作品が本番環境に入る前に、私以外の誰かによる大ざっぱな QA を通過したことを確認したいと思っています。

結論として、私が働いているセットアップは次のとおりです。

  • 各開発者は独自のサンドボックスをローカルで実行します (あなたが行うのと同じです)
  • cronjob から夜間に更新される開発サーバーには、「共通の」ステージング サンドボックスがあります。PM、クライアント、QA はそこに行きます。開発者サンドボックスに直接アクセスすることは決してありません。
  • 本番環境への自動化された (手動で開始された) 展開があります。開発者または PM は、物事が十分に QA され、安定していて安全であると感じたときに、本番環境に「プッシュ」できます。

唯一の欠点は (毎晩のステージング ビルドを設定するための少し余分なオーバーヘッドを除いて)、バグ検証のターンアラウンドに 1 日かかることです。つまり、QA はソフトウェアのバグを報告し (その日のナイトリー ビルドを調べて)、開発者はバグを修正してコミットします。QA は翌日のビルドまで待って、バグが実際に修正されたことを確認する必要があります。誰もがスケジュールに影響を与えないほど十分な作業を行っているため、通常はそれほど問題にはなりません。ただし、マイルストーンが近づいていて、機能が凍結され、バグ修正のみのモードになっている場合は、ステージング サイトをより頻繁に手動で更新します。

于 2009-09-18T15:18:36.213 に答える
1

継続的インテグレーションにHudsonを使用して大きな成功を収めました。RedsoloによるPython での Hudson の使用に関する詳細。

数か月前、継続的デプロイを支持するいくつかの記事がオンラインでかなりの騒ぎを巻き起こしました。 IMVUには、1 日に最大 5 回展開する方法の詳細があります。

于 2009-09-17T23:14:40.163 に答える
1

頻繁なビルド (毎晩、または継続的インテグレーションのようにより頻繁に) の背後にある全体的な考え方は、問題の発生からその検出までの経過時間を短縮するために、即時のフィードバックを得ることです。したがって、頻繁にビルドすることは、コンパイル、(理想的には自動化された) テスト、品質チェックなどを通じて何らかのフィードバックを生成できる場合にのみ役立ちます。フィードバックがなければ、本当の意味はありません。

于 2009-09-17T23:46:24.657 に答える