継続的デリバリーPHPアプリケーション

PHPアプリケーションの継続的な統合と「痛みのない」展開を実装しようとする経験を共有したいと思います。 この問題に関するいくつかの側面を検討してみます。





継続的インテグレーション-それは何ですか?



継続的インテグレーション(Eng。継続的インテグレーション)-これはソフトウェア開発のプラクティスであり、プロジェクトの頻繁に自動化されたアセンブリを実装して、インテグレーションの問題を迅速に特定して解決します。



私が最初にCIについて聞いたとき、私にとってそれは理解できないほど超越的なものでした。 私はそれが何であるかを理解しようとしました。 少しグーグルで、CruiseControlのアドオンであるphpUnderControlに出会い、それがいかにクールで、実稼働サーバーに継続的に注ぐことができるかについて話します。



LANでそれを拾い上げ、表示されたすべてのものを接続しました。その結果、さまざまなグラフが表示され、テストのステータスを表示できる可能性がありました。 クールですが、テストを作成しない場合のポイントは何ですか? ビルドの作成方法。どこにもデプロイが見つかりませんでした。 私の頭の中にある「ビルド」とphpの概念は、どのような形にも当てはまらないため、CIはやがてそれを放棄しました。



しばらく経ってから、フロントエンドをさらに深く掘り下げ、開発サーバーでr.jsを最適化してCSSでLESSをプリコンパイルするという問題が解決されました。それでもCIを扱うことにしました。 ファイルを保存したり、通常のうなり声を上げたりすることで、ローカル環境ですべてがその場で再構築されたため、問題はありませんでした。



質問はすぐに解決しました。彼はJenkinsをサーバー上に上げ、クラウンからリポジトリから最新のリビジョンを引き出すタスクを作成し、何かを見つけた場合はうなり声を上げました。 うなり声を開始するときにエラーが発生した場合(誰かがlessファイルで混乱したか、jsコードをリントしなかった)、通知はすぐに到着しました。 Nginxはワークスペースでこのタスクをプロキシするように構成されていたため、devサーバーで収集されたすべてを監視できます。 誰もが幸せで、問題は解決しました。



要約すると、継続的統合は、アプリケーションの状態を常に監視するためのプラクティスです。 機能テストと統合テストの最小限のセットがある場合、部品が脱落したかどうかをすぐに確認し、コミットすることで犯人を追跡できます。



クールですが、どのように展開しますか?



デプロイは、さまざまな環境にアプリケーションをデプロイするプロセスです。 すべてが同様の方法で発生します。





これらはすべて、Jenkinsサーバーに個別のタスクとしてバインドすることで自動化できます。 はい、ジェンキンスはコード追跡モードでのみ動作しません。 すべてのサーバーとsshへのアクセスを指定することにより、ボタンをクリックするだけですべてをアップロードできます。







これまでのところ、すべてがリポジトリの1つのブランチに置かれているため、誤って何か間違ったものをデプロイする可能性があります。 この状況を修正します。



ビルとPHP-まだ接続できますか?





開発を2つのブランチ、devとstableに分割します。devではメインの開発を行い、それをstableにマージしてバージョンタグをハングさせる準備ができています。 実際には2つではなく、さらに多くのトピックがあり、トピック全体をこれに当てることができますが、今のところは、すべてが十分に説明されている成功したGit分岐モデルに慣れることができます。

すべてを手動で行わないために、Jenkinsで追加のタスクを実行します。これにより、安定版とdevがマージされ、タグがハングします。

安定したブランチがありますが、監視してみませんか? 「Dev CIジョブ」で同様のタスクを実行して、このキッチンを監視し、さらにnginxに別のホストを追加します。







これで、手動で呼び出されるタスクをマークしたポイントで、パイプライン(ピペリング)ができました。

ステージCIジョブは、Makeリリースが成功した場合にのみ呼び出されます。

すでに良く見えているので、テスターを接続します。



テストとリリースのプレビュー





現在、多少便利なリリースおよび展開管理システムがあります。 開発者は、「リリースの作成」ステップ以降のプロセスを実行しません。 私たちは安定したバージョンをリリースし、それはステージサーバーに行きました。そこでテスターは彼らの魂を取り、顧客に製品を見せることができます。 生産に注ぐかどうか、後者が決定します。



開発者が作成する統合テストと単体テストがバグから保護されないことは秘密ではないため、Seleniumツールを使用したテストの自動化に向かっています。 したがって、「ステージCIジョブ」の後に、システムおよび機能のテストを実施するステップがさらに1つ追加されます。







一部の開発者にとっては、既製の機能を表示するために独自のサンドボックスが必要になる可能性があるためです。 QAチームでは、互いに干渉しないように、いくつかのサンドボックスも必要です。 また、アプリケーションのボトルネックを探すためのストレステスト用の独立したサンドボックス。



All Articles