私が今働いている会社は、継続的デリバリーをまだ実装していません。ファイルごとにサーバーにプロジェクトを手動でデプロイします。ベストプラクティスは次のとおりです。展開ごとに1つのプロジェクトアーティファクトを手動で展開するか、ファイルごとの展開を続けますか?
私が今働いている会社は、継続的デリバリーをまだ実装していません。ファイルごとにサーバーにプロジェクトを手動でデプロイします。ベストプラクティスは次のとおりです。展開ごとに1つのプロジェクトアーティファクトを手動で展開するか、ファイルごとの展開を続けますか?
回答:
どちらがベストプラクティスですか?デプロイメントごとに1つのプロジェクト成果物を手動でデプロイするか、ファイルごとにファイルをデプロイし続けますか?
どちらでもない。
ベストプラクティスは、展開を完全かつ排他的に自動化することです。つまり、誰も手動でサーバーに何かを置くことはできません。
「要約の要約を要約する:人々は問題です。」(ダグラス・アダムス)
人々は間違いを犯します。コピーするのを忘れたファイルの1つが大幅に変更された共有「ライブラリ」である場合、本番サイト全体をクラッシュさせることができます。
手動の手順は多くの労力を要し、危険です。必要なファイルを忘れてしまう可能性があります。チームの全員がどのファイルをコピーする必要があるかを知っているとは限りません。これらの問題はすべて、デプロイメントを大きく、困難で、まれなものにします-完全に不必要です。オートメーションはこれらに対処します。
展開が簡単になるため、最も単純な自動化ステップでも大きなメリットがあります。(S)FTP、Rsync、または別のテクノロジーを介してファイルまたはアーティファクトをコピーするスクリプトは、素晴らしい最初のステップです。後でそのスクリプトを展開して、サービスの再起動など、サーバーで展開前および展開後の手順を自動的に実行できます。
ベストプラクティスは、何らかの自動プロセスを実装することです。
あなたが考慮しなければならない「ファイルごと」アプローチの特別な理由がないことを確認するように注意してください。
継続的配信(実際には展開)と各ファイルを手動で移動することで、2つの極端な状況を確認できます。完全に自動化されたパイプラインを(まだ)作成できない、または作成したくないことは完全に理解できます。ただし、プロセスの一部の自動化を検討する必要があります。
各ファイルを手動で移動するのは非常に危険です。たとえば、コードリポジトリにタグを付け、コンピューターでそのタグをチェックアウトし、アーティファクトを構築してサーバーにアップロードすることにより、そのリスクを軽減できます。これらの各ステップは、マウスを数回クリックするだけで実行されるように自動化できます。これにより、ファイルを忘れたり、誤って余分なファイルをプッシュするリスクが大幅に減少します。
一度に1ステップずつ、できることを自動化します。完全に自動化されたCDパイプラインを購入する余裕がないという事実は、一部の部品の自動化を妨げるものではありません。
ベストプラクティスは、特定の企業の特定の展開に対してコスト/利益分析を行うことです。
一般的な答えは、「手動で物事を行うな、自動化する」です。一般的に、これは一般的な種類の企業にとって正しい答えです。受け取った回答の均一性は、コミュニティがこれをベストプラクティスであるとどれだけ強く感じているかを示すものでなければなりません。あなたの会社が、自動化が適切なツールではないと感じている場合、彼らは何がそれらをユニークにするかを理解する必要があります。その一意性は、意思決定プロセスに考慮される必要があります。サンプルセットが1の場合、「ベストプラクティス」はありません。
「ファイル数」や「更新頻度」、「破壊の結果は何か」、「悪い変更をどれだけ迅速にロールバックできるか」などの質問は、答える重要な質問です。自動化すると、これらの質問の多くは重要ではなくなりますが、手動更新プロセスのコストと利点を適切に割り当てるために不可欠です。
手動のファイルごとのコピーと連続配信の間には、多くのグレーの濃淡があります。
展開プロセスの複雑さを軽減することから始めます。たとえば、zipファイル、rpmスタイルのパッケージ化、コード管理ツールとしてのインフラストラクチャ(パペットやシェフなど)、またはファイルをftpサーバーのステージング領域。
手動の手順が多い展開プロセスでは、エラーが発生する可能性が高くなります(したがって、失敗します)。
完全な継続的デリバリー(コストがかかり、時間をかけて努力/投資/イノベーションが必要)を実装する必要はありません。
使用しているソフトウェアテクノロジー(またはスタック)(解釈された言語、コンパイルされた言語、デスクトップアプリ、モバイルなど)、ソフトに依存します。開発者 部門ポリシー、自動化するツールがある場合、アプリの重要度、および考慮すべき重要なことの1つは、ソフトウェアアーキテクチャ(アプリの設計方法)です。あなたがここで異なる答えを持っているのはこのためです。経験則として、最良のアプローチは、ミスを避けるために、展開タスクにおける人間の介入を可能な限り減らすことです。展開する前にQAサーバーのすべてをテストし(予算が問題になる場合は仮想サーバーを使用することを検討してください)、災害の場合に以前のバージョンに復元するための逆の手順を用意してください(常にバックアップが必要です)。