web-dev-qa-db-ja.com

プロジェクトをファイルごとに手動でサーバーにデプロイするのがベストプラクティスですか?

私が現在働いている会社は、継続的デリバリーをまだ実装していません。ファイルごとにサーバーにプロジェクトを手動でデプロイします。ベストプラクティスは、デプロイメントごとに1つのプロジェクトアーティファクトを手動でデプロイするか、ファイルごとのデプロイメントを継続するかです。

26
Jake Muller

ベストプラクティスはどれですか。展開ごとに1つのプロジェクトアーティファクトを手動で展開するか、ファイルごとの展開を続けますか?

どちらでもない。

ベストプラクティスは自動化完全かつ排他的に展開することです。つまり、nobodyanythingを手動でサーバーに配置します。

「要約の要約を要約する:人々は問題です。」 (ダグラス・アダムス)

人々は間違いを犯します。 忘れるでコピーするファイルの1つが大幅に変更された共有「ライブラリ」である場合、本番サイト全体がクラッシュする可能性があります。

103
Phill W.

手動の手順は多くの労力を要し、危険です。必要なファイルを忘れてしまう可能性があります。たぶん、チームの誰もがコピーする必要があるファイルを知っているわけではありません。これらの問題はすべて、展開を大きく、困難で、まれなものにします–完全に不必要です。自動化はこれらに対処します。

デプロイメントが簡単になるため、最も単純な自動化ステップでも大きなメリットがあります。 (S)FTP、Rsync、または別のテクノロジーを介してファイルまたは成果物をコピーするスクリプトは、優れた最初のステップです。後でそのスクリプトを展開して、サービスの再起動のように、サーバー上で展開前および展開後の手順を自動的に実行できます。

14
amon

ベストプラクティスは、何らかの自動プロセスを実装することです。

考慮しなければならない「ファイルごとの」アプローチに特別な理由がないことを確認するように注意してください。

9
Ewan

継続的デリバリー(または実際にはデプロイメント)と各ファイルの手動移動を使用すると、2つの極端な状況がわかります。 (まだ)完全に自動化されたパイプラインを作成することはできない、またはしたくないことは完全に理解できます。ただし、プロセスの一部を自動化することを検討する必要があります。

手作業で各ファイルを移動することは非常に危険です。たとえば、コードリポジトリにタグを付け、コンピューターでそのタグをチェックアウトし、アーティファクトを構築してサーバーにアップロードすることで、そのリスクを軽減できます。これらの各ステップは自動化できるので、マウスを数回クリックするだけで実行できます。これにより、ファイルを忘れたり、誤って余分なファイルを送信したりするリスクが大幅に減少します。

一度に1ステップずつ、できることを自動化します。完全に自動化されたCDパイプラインを購入できないという事実は、一部の部品の自動化を妨げるものではありません。

6
Blueriver

ベストプラクティスは、特定の会社の特定の展開に対してコスト/利益分析を行うことです。

一般的な答えは、「手動で行うのではなく、自動化する」です。これは一般的に、一般的な種類の企業にとって正しい答えです。あなたが受け取っている回答の均一性は、コミュニティがこれがベストプラクティスであるとどれだけ強く認識しているのかを示す何らかの指標になるはずです。自動化が適切なツールではないと会社が感じた場合は、自動化の独自性を理解してもらう必要があります。その独自性は、意思決定プロセスに織り込む必要があります。サンプルセットが1の場合、「ベストプラクティス」はありません。

「ファイルの数」、「更新頻度」、「問題が発生した場合の影響」、「悪い変更をどれだけ迅速にロールバックできるか」などの質問は、重要な質問です。自動化する場合、これらの質問の多くは重要ではなくなりますが、手動更新プロセスのコストと利点を適切に割り当てるために重要です。

1
Cort Ammon

ファイルごとの手動コピーと継続的デリバリーの間には、グレーの色合いがたくさんあります。

展開プロセスの複雑さを軽減することから始めます。たとえば、Zipファイル、rpmスタイルのパッケージ化、コード管理ツールとしてのインフラストラクチャ(puppetやchefなど)を使用するか、単純なスクリプトを使用してファイルをコピーします。 FTPサーバーのステージング領域。

手動の手順が多い展開プロセスは、エラーが発生する可能性が高く(そのために失敗します)、他の人が言ったように、人間の要素を取り除きます。

完全な継続的デリバリーを実装する必要はありません(コストがかかり、時間の経過とともに労力/投資/イノベーションが必要です)。簡単に始め、機能させ、メリットを実証し、そこから始めます。

1
vikingsteve

使用しているソフトウェア技術(またはスタック)(解釈言語、コンパイル済み言語、デスクトップアプリ、モバイルなど)によって異なります。開発者。自動化するツールがある場合、部門のポリシー、アプリの重要性、考慮すべき1つの重要なことは、ソフトウェアアーキテクチャ(アプリの設計方法)です。これがあなたがここで異なる答えを持っている理由です。経験則として、最善のアプローチは、間違いを避けるために、デプロイメントタスクへの人間の介入を可能な限り減らすことです。導入前にQAサーバーのすべてをテストし(予算に問題がある場合は仮想サーバーを使用することを検討してください)、災害時に前のバージョンに復元する逆の手順を実行することをお勧めします([〜#〜]は常に[〜#〜]バックアップがあります)。

0
Edu Garcia