「自動ビルド」とはどういう意味ですか?


15

プロジェクトに継続的インテグレーションを追加しようとしています。

ウィキペディアによる、CIの主要な部分の1つは自動ビルドです。ただし、CIとビルド自動化の記事が一致していないように見えるため、正確に何を意味するのかについて混乱しています。

特定の混乱点:「自動ビルド」とは次のコンテキストで何を意味するか

  • PythonやPerlなどのインタープリター言語を使用するプロジェクトですか?
  • エンドユーザーのマシンのソースからビルドしますか?
  • ユーザーのマシンにローカルなRDBMS内のデータベースなど、単純にプリコンパイルおよび配布できない依存関係を持つアプリケーションですか?

2
両方buildsでタグ付けしましたが、どちらbuildを使用するかわからなかったためです。

回答:


14

一部のテクノロジでは、コンパイル手順が不要であることに注意してください。ただし、「ビルド自動化」という用語を解釈するときは、より広い視野をとることをお勧めします。次の2つの主要コンポーネントを含む「ビルド」について考えてください。

  • エンドユーザーに展開される変換ソースアーティファクト(コード、データベーススキーマ、ドキュメントなど)のプロセス。
  • 当該変換中の品質保証手段の適用

自動化とは、これらの操作のすべて(すべてではないにしても)を自動化すること(つまり、手動による介入を必要としないこと)を指します。これには、テクノロジに応じて、非常にさまざまな手順が含まれる場合があります。

変換手順:

  • 編集
  • リンク
  • パッケージング
  • 展開
  • データ移行
  • バックアップ
  • お知らせ

品質保証手順:

  • コンパイラの警告/エラー
  • 単体テスト
  • 統合テスト
  • システムテスト
  • 展開認証

最近では、優れたCIツールを使用して、これらすべての懸念に対処できます。当初、ほとんどのショップはコードのコンパイルの自動化に関心があります。これは、従来のソフトウェア開発における最初の、そして最も目に見える問題の原因であるためです。


21

自動ビルドは、次の基本事項をカバーするプロセスの説明です。

  1. ソース管理から最新のコードを取得する
  2. 最新のコードを実行可能ファイルにコンパイルします
  3. コンパイルされたコードに対してテスト(ユニットテスト、システムテスト、統合テスト)を実行する
  4. 完成した実行可能ファイルを既知の展開場所に展開します。
  5. ビルドの結果を公開します。
    5.1コンパイルの成功、単体テストの成功

これは、手動の介入なしで実行する必要のある、人手を介さないプロセスです。


3
明示的に尋ねられたため、適用されないステップはオプションであることに言及するかもしれません。たとえば、アプリが多数のpythonスクリプトである場合、手順2は何もないか、コードを1つのファイルに圧縮するだけの簡単なものかもしれません。コンパイル手順がないことは完全に受け入れられます。
ブライアンオークリー

@BryanOakleyそれは公平です。スクリプトのコンパイルを行わないことと同等のことは、依存関係がある場合は、すべての依存関係がこの時点で適切に収集されるようにすることです。たとえば、Pythonスクリプトに必要な追加のサードパーティライブラリは、次のすべての手順に含まれるように含める必要があります。ターゲットとビルドマシンに必要なすべてのライブラリが常にあることがわかっている場合、これも不要です。
シェルドンワーケンティン

2

私の考えでは、自動ビルドとは

  • スケジュールに従って、またはソース管理へのコミットごとに、自動的に行われます
  • 任意のサーバーに簡単にデプロイできるアーティファクトのセットを作成します

目的は、繰り返すことができる-読む:テストする-展開プロセスを持つことです。これにより、実稼働環境に展開するまでに、物事がうまくいかないことがかなり確実になります。ビルドプロセスと展開プロセスでの人間のやり取りが少ないほど、リリースの安全性が高まります。

コンパイルされていない言語を使用している場合でも、サイトを構築し、それを圧縮して単一のアーティファクトを作成できます。

優れたCIツールを使用すると、ユニットテストの実行など、多くのタスクをビルドプロセスにスクリプト化できます。また、成功したビルドと失敗したビルド、テストカバレッジなどの記録も保持されます。しかし、それらのどれも、自動ビルドとして定義するものの一部ではありません。(つまり、優れた自動ビルドプロセスにはこれらの機能がありますが、貧弱なプロセスにはこれらの機能がないため、「自動ビルド」と呼ばれることは間違いありません。)

統合/回帰テストは、ビルドプロセスではなく、展開プロセスの一部として実行することをお勧めします(ただし、便利な環境があれば、すべてのビルドで展開できます)。


スケジュールされたビルドを使用して、開発者が1つのアクションで自動ビルドを開始できるようにすることも役立ちます(2つのアクションの場合、実際には自動化されていませんか?)各コミットのキックオフに長いので、スケジュール通りに、リクエストに応じて。
デビッドソーンリー

@DavidThornley:はい。それは便利です。ほとんどのCIツールを使用すると、設定したスケジュール以外でビルドを開始できます。ただし、このオプションが存在しないため、自動ビルドが終了することはありません。開発者が常にそれをトリガーしなければならない場合、それは自動ビルドではなくなります。
pdr

1
a project using an interpreted language, such as Python or Perl?

インタプリタ言語の場合、物事はヒットまたはミスする可能性があります。一部の相互侵入言語にはコンパイラがありますが、多くの場合、コンパイラを使用する必要はほとんどありません。その場合、私は通常、コンパイルの代わりに構文と構文解析エラーのコードをスキャンするか、コードのテストの実行に直接スキップします。

エンドユーザーのマシンのソースからビルドしますか?

私にとってこれは、エンドユーザーがプログラムの最新バージョンを取得し、それをコンパイルし、必要に応じて構成およびデプロイするために実行できる単一のコマンドを提供できることを意味します。

ユーザーのマシンにローカルなRDBMS内のデータベースなど、単純にプリコンパイルおよび配布できない依存関係を持つアプリケーションですか?

これらは、データベースが自動的に破棄および再構築され、スクリプトが正しいこと、およびプログラムが正しくテストすることを確認できるため、継続的インテグレーションのテスト部分に該当します。


1

あなたの質問で議論しているのは、実際には3つの異なる概念です。

コアでの継続的インテグレーションは、小さな変更を行い、それらの変更を「グローバルな真実」と頻繁に同期させることです。開発者は、チェックアウトを行って1週間待つのではなく、1日以内に完了できるタスクに取り組み、コードがメインリポジトリとあまり同期しないようにする必要があります。

チームに苦痛を与えることなくこれを達成するために(つまり、既存の機能を構築しない、または破壊するソースをチェックインする)。開発者は、自分のコードが「ビルドを壊さない」ことを確認する必要があります。手動で行う場合、これは開発プロセスに追加のオーバーヘッドを追加します(ビルドに時間がかかる、および/またはコードの1行の変更が予期しない方法でアプリケーションに影響を与える可能性のある多くの相互依存関係があるプロジェクトを考えてください)。

この状況を緩和するために、他の手法を使用してこのオーバーヘッドを削除します。

自動ビルドを使用してソースをチェックアウトし、必要に応じてアプリケーションが正常に動作することを確認する自動テストを実行してビルドします(この手順はテストスイートと同じくらい便利です)。

さらなるステップの継続的デリバリーは、データベースおよびその他の懸念事項に関する問題に対処します。ここでの考え方は、データベースや環境のその他の要因にある程度のバージョン管理を提供し、アプリケーションが可能な限り本番に近い環境で動作することをできる限り迅速に確認できるようにすることです。


1
すばらしい点...ほとんどの人がスレッドの一番下まで読んで投票しないのは残念です。
hotshot309

0

「自動ビルド」とは、1つの(スケジュール可能な)アクション(通常はシェルスクリプトまたはバッチファイル)を使用して、ソース管理から出荷可能なパッケージに移動できることを意味します。

このコンテキストでビルドを正確に構成するものは、出荷する内容、配信方法、および開発スタックのさまざまな部分に必要な手順に大きく依存しますが、いずれにしても、ソース管理に含まれるもの、そして最終的に出荷可能な製品(またはエラーメッセージと怒っているプロジェクトマネージャー)になります。

単純なPythonプロジェクトの場合、自動ビルドは2つのステップだけで構成されます-ソースをチェックアウトし、関連するファイルを正しいディレクトリにコピーします。より複雑なプロジェクトの場合、次のようなものが含まれます。

  • コンパイル、リンク
  • 自動テストの実行
  • インストーラーパッケージの作成
  • 取り付け
  • データベースの変更
  • バックアップの作成(ロールバックが必要な場合)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.