DUICUO

Jenkins の継続的インテグレーションの動作原理、機能、および展開方法についての非常に詳細な紹介です。

今日は、Jenkins についての概念的な内容を次のように簡単にまとめました。

1. コンセプト

Jenkinsは、使いやすい継続的インテグレーションシステムを提供するオープンソースプロジェクトです。開発者は煩雑なインテグレーション作業から解放され、より重要なビジネスロジックの実装に集中できます。また、Jenkinsはインテグレーションエラーをリアルタイムで監視し、詳細なログファイルとアラートを提供し、プロジェクトのビルド傾向と安定性をグラフィカルに視覚的に表示できます。

Jenkinsは、自動化された継続的インテグレーション環境を構築できます。アプリケーションのコンパイル、パッケージ化、配布、デプロイを「自動化」できます。Ant、Maven、Gradleといった様々なサードパーティ製ビルドツールと互換性があり、SVNやGitともシームレスに統合できます。また、GitHubやBitbucketといった著名なソースコードホスティングサイトとの直接統合もサポートしています。

2. Jenkinsの機能

  • 定期的にコードを取得してコンパイルする
  • 静的コード分析
  • ベータ版のパッケージ化とリリース予定
  • ユニットテストの実行などのカスタム操作。
  • エラーメッセージ

3. 原則

ここでは、GitサーバーとしてGitLabを選択します。GitLabはGitHubと同様の機能を提供しますが、オープンソースであるため、プライベートGitサーバーを構築できます。また、非常に強力なWeb GUIも提供しており、開発者がソースコードを確認するのに非常に便利です。システムのワークフローは、おおよそ以下のステップに分けられます。

  • 開発者は新しいバージョンを Git サーバー (GitLab) にプッシュしました。
  • その後、GitLab は Jenkins マスター ノードでビルドをトリガーします (Web フックまたは時間指定チェック経由)。
  • Jenkinsのマスターノードは、このビルドタスクを登録済みのスレーブノードの1つに割り当てます。このスレーブノードは、事前に定義されたスクリプトに従ってビルドを実行します。このスクリプトは、コンパイル、テスト、テストレポートの生成など、様々な処理を実行できます。これらのタスクは、通常は手動で行う必要があり、Jenkinsに委任することができます。
  • ビルド プロセスではコンパイルを実行する必要があり、ここでは分散コンパイラ distcc を使用してコンパイル プロセスを高速化します。

Jenkinsは、まずGitLabからローカルマシンにソースコードをコピーし、設定されたスクリプトに従ってビルドすることで動作します。システム全体の鍵となるのは、統合中に実行されるタスクをJenkinsに指示するビルドスクリプトであることがわかります。

しかし、結局GitサーバーとしてGitHubを使うことにしました。でも、実際にはほとんど同じです。

4. 展開方法

(1) Jenkins によるビルドのトリガー:

開発環境のデプロイメントに使用され、開発者は GitLab プロジェクトのマスター ブランチにコードをプッシュまたはマージし、Jenkins は対応するサーバーにコードをデプロイします。

(2)ジェンキンスのパラメータ化構築:

テスト環境およびプレプロダクション環境へのデプロイでは、開発者がGitLabプロジェクトのマスターブランチにコードをプッシュまたはマージしても、コードはデプロイされません。代わりに、JenkinsのWebインターフェースにログインし、ビルドボタンをクリックし、ビルドするタグやデプロイするブランチなどのパラメータを指定してからデプロイする必要があります。

(3) Jenkinsのスケジュールビルド:

アプリの自動パッケージングでは、パラメータ化されたビルドに加えて、スケジュールされたビルドが追加されます。開発者はJenkinsにログインし、手動でタグを渡してアプリをパッケージ化できます。手動でパッケージ化しない場合は、Jenkinsが毎日深夜にGitLabから最新のアプリコードをプルし、パッケージ化します。

5. 継続的インテグレーションの分類

  • 継続的インテグレーション: これは、プログラマーが頻繁にコードをメイン ブランチにデプロイし、コード開発プロセス中に自動テストを実行する能力を指します。
  • 継続的なインタラクション: 継続的な統合に基づいて、オンライン テスト環境にコードを展開することを指します。
  • 継続的デプロイメント: 継続的インタラクションと継続的デプロイメントを含む、継続的インタラクションに基づいたコードの自動デプロイメントを指します。