ステージ4
日時: 2023 年 8 月 21 日
参加者:クラス全員
内 容:
Jenkins に基づいて実稼働 CICD 環境を構築する
目次
1.環境概要
ソフトウェア開発の要件と複雑さが増加し続けるにつれて、ソフトウェア開発の品質を確保するためにチーム開発メンバー間でより適切に連携する方法は、開発プロセスにおいて徐々に避けられない問題になってきました。
Jenkins の自動デプロイメントは、統合、テスト、デプロイメントなどの反復的なタスクを解決できます。ツール統合の効率は手動操作よりも大幅に高く、継続的インテグレーションはコード変更情報をより早く取得できるため、より早くテストフェーズに入り、問題を発見できます。問題を解決するコストが大幅に削減されること、継続的インテグレーションにより、開発、統合、テスト、デプロイメントの各リンクの時間が短縮され、それによって途中での待ち時間が短縮されること、継続的インテグレーションは開発、統合、テスト、デプロイメントも意味します持続できる。
したがって、Jenkins の継続的統合および継続的デリバリー環境を構成した後、公開タスクを統合サーバーに引き渡すことができます。Maven (Ant) などを使用して、Java プロジェクトの自動ビルド、リリース、デプロイメントを実装します。
これらのツールは、ビルド プロセス中のリリース、ロールバック、その他のアクションを自動化するのに役立ちます。
2. Jenkins の概要
Jenkins は、Java で書かれたオープンソースの継続的統合ツールです。Oracle との紛争の後、このプロジェクトはハドソン プロジェクトから独立しました。
公式ウェブサイト:https://jenkins.io/。
Jenkins は、ソフトウェア開発のための継続的統合サービスを提供します。サーブレット コンテナ (Tomcat) で実行されます。ソフトウェア構成管理 (SCM) ツール (AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase、RTC など) をサポートし、Apache Ant および Apache Maven に基づいてプロジェクトを実行できるほか、任意のシェル スクリプトや Windows バッチ コマンドも実行できます。Jenkins の主な開発者は川口康介氏です。Jenkins は、MIT ライセンスに基づいてリリースされたフリー ソフトウェアです。
Jenkins は、継続的統合プロセスの問題をリアルタイムで監視し、詳細なログ ファイルとリマインダー機能を提供し、グラフを使用してプロジェクト構築の傾向と安定性を鮮明に表示することもできます。
(1) Jenkins には次の機能が含まれています。
インストールが簡単: jenkins.war は 1 つだけあり、公式 Web サイトからファイルをダウンロードした後、追加のインストールやデータベースのインストールを行わずに直接実行できます。
設定が簡単:使いやすい GUI 設定インターフェイスを提供します。
変更サポート: Jenkins は、コード リポジトリ (SVN/Git) からコード更新リストを取得および生成し、コンパイル出力情報に出力できます。
パーマネント リンクのサポート:ユーザーは Web 経由で Jenkins にアクセスします。これらの Web ページのリンク アドレスはパーマネント リンク アドレスであり、さまざまなドキュメントで直接使用できます。
統合メール/RSS/IM:統合が完了すると、これらのツールを通じて統合結果をリアルタイムで収集できます (統合の構築には一定の時間がかかります。この機能を使用すると、待機中に他の作業を行うことができます)結果);
JUnit/TestNG テスト レポート:グラフやその他の形式で詳細なテスト レポート機能を提供するために使用されます。
分散ビルドのサポート: Jenkins は、統合ビルドやその他の作業を複数のコンピューターに分散して完了させることができます。
ファイルのフィンガープリント情報: Jenkins は、統合のビルドによって生成された jar ファイルと、統合のビルドに使用されたバージョンを保存します。
サードパーティのプラグインのサポート: Jenkins はサードパーティのプラグインをサポートしており、Jenkins はますます強力になっています。
(2)継続的インテグレーション
継続的インテグレーション(英語: Continuous integration 、略称 CI)とは、ソフトウェアの全エンジニアの作業用コピーを 1 日に数回、共通のメインライン(メインライン)上に統合するソフトウェア エンジニアリング プロセスです。
この名前は、Grady Booch によって彼の地区メソッドで最初に提案されましたが、彼は 1 日に数回の統合については言及していませんでした。その後、これはエクストリーム プログラミング (XP) の一部になりました。テスト駆動開発 (TDD) は、自動化された単体テストと組み合わせられることがよくあります。
継続的インテグレーションは、主にシステムを統合する際にソフトウェアが直面するさまざまな問題を解決するために提案され、エクストリーム プログラミングではこれらの問題を統合地獄と呼んでいます。
継続的インテグレーションでは、開発者が新しいコードを送信した直後にビルドして (単体) テストする必要があることが主に強調されています。テスト結果に基づいて、新しいコードと元のコードが正しく統合されているかどうかを判断できます。簡単に言うと、頻繁に (1 日に複数回) コードをトランクに統合します。
1.継続的インテグレーションのメリット
·統合エラーは早期に発見され、リビジョンが小さいため追跡が容易で、プロジェクトの時間とコストが節約されます。
· リリース日の数分前、誰もが自分たちが作成した小さな互換性のないバージョンを確認しようとするときの混乱を避けてください。
·単体テストが失敗したりエラーが発生した場合、開発者がデバッグを行わずにコード ベースを問題のない状態に復元する必要がある場合、破棄する必要があるのは変更のごく一部だけです (統合が頻繁に行われるため)。
· テスト、デモンストレーション、またはリリースに使用できる「最新」プログラムを維持します。
· 頻繁にコードをコミットすることで、開発者はモジュール式の複雑さの低いコードを作成することが奨励されます。
●枝が幹から大きく逸れるのを防ぎます。統合が頻繁に行われず、バックボーンが常に更新されている場合、統合はさらに困難になるか、将来的には困難になる可能性があります。
2.継続的インテグレーションの役割
·チーム開発者によって提出されたコードの品質を保証し、ソフトウェアリリース時のプレッシャーを軽減します。
·継続的インテグレーションのすべてのリンクは、手動介入をあまり必要とせずに自動的に完了するため、繰り返しのプロセスが削減され、時間、コスト、作業負荷が節約されます。
3.継続的インテグレーションの特徴
·これは自動化された定期的な統合テスト プロセスであり、コードのチェックアウト、コンパイルとビルド、テストの実行、結果の記録、テスト統計など、すべてが手動介入なしで自動的に完了します。
·統合ビルドを実行するには専用の統合サーバーが必要です。
·コードホスティングツールのサポートが必要です。
(3)継続的デリバリー
継続的デリバリ(英語: Continuousdelivery 、略称 CD)とは、ソフトウェア製品の製造工程を短いサイクルで完了させ、ソフトウェアをリリース可能な状態で安定かつ継続的に維持できるようにするソフトウェア工学手法のこと。いつでも。
その目標は、ソフトウェアのビルド、テスト、リリースをより迅速かつ頻繁に行うことです。この方法により、ソフトウェア開発のコストと時間を削減し、リスクを軽減できます。
継続的デリバリーは継続的統合に基づいており、統合されたコードを実際の運用環境に近い「運用環境に似た環境」にデプロイします。たとえば、単体テストが完了した後、データベースに接続されたステージング環境にコードをデプロイして、さらにテストを行うことができます。コードに問題がない場合は、実稼働環境への手動デプロイを続行できます。
(4)継続的展開
継続的デプロイメント (英語: Continuous Deployment 、略称 CD ) は、継続的デリバリーの次のステップであり、コードがレビューに合格した後に本番環境に自動的にデプロイされることを指します。
場合によっては、継続的デプロイメントが継続的デリバリーと混同されることもあります。継続的デプロイメントとは、すべての変更が実稼働環境に自動的にデプロイされることを意味します。継続的デリバリーとは、すべての変更を実稼働環境にデプロイできることを意味しますが、ビジネス上の考慮事項により、デプロイしないことを選択することもできます。継続的デプロイメントを実装する場合は、まず継続的デリバリーを実装する必要があります。
継続的デプロイメントとは、継続的デリバリーに基づいて実稼働環境へのデプロイメントのプロセスを自動化することです。
キーワード: CI/CD 継続的インテグレーション/継続的デリバリー/継続的デプロイメント
(5) Maven の概要
Maven プロジェクト オブジェクト モデル (POM) は、小さな説明情報を通じてプロジェクトの構築、レポート、および文書化を管理できるソフトウェア プロジェクト管理ツールです。
Maven はプログラム構築機能に加えて、高度なプロジェクト管理ツールも提供します。Maven のデフォルトのビルド ルールは再利用性が高いため、単純なプロジェクトは 2 行または 3 行の Maven ビルド スクリプトで構築できることがよくあります。
Maven のプロジェクト指向のアプローチにより、多くの Apache Jakarta プロジェクトはドキュメントを公開するときに Maven を使用しており、Maven を使用する企業プロジェクトの割合は増加し続けています。
Maven という言葉は知識の蓄積を意味するイディッシュ語 (ユダヤ語) に由来しており、もともとはジャカタ タービン プロジェクトで構築プロセスを簡素化するために使用されていました。当時、一部のプロジェクト (独自の Ant ビルド ファイルを含む) はわずかに異なっていましたが、JAR ファイルは CVS によって保守されていました。したがって、プロジェクトを構築する標準化された方法、プロジェクトの構成を定義する明確な方法、プロジェクト情報を公開する簡単な方法、複数のプロジェクト間で JAR を共有する簡単な方法があることを願っています。
3. Jenkins のインストールと構成
1. ホストの初期化
[root@localhost ~]# hostname jenkins
[root@localhost ~]# bash
[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# iptables -F
[root@jenkins ~]# setenforce 0
2.ソフトウェア要件
Java 8 Java ランタイム環境 (JRE) または Java 開発キット (JDK) のいずれかが動作します。
1) 最初の方法:
[root@jenkins ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
[root@jenkins ~]# java -version
openjdkバージョン「1.8.0_161」
OpenJDK ランタイム環境 (ビルド 1.8.0_161-b14)
OpenJDK 64 ビット サーバー VM (ビルド 25.161-b14、混合モード)
2) 2 番目の方法:
[root@jenkins ~]#rm -rf /usr/bin/java
[root@jenkins ~]#rz
[root@jenkins ~]#tar xf jdk-17_linux-x64_bin.tar.gz
[root@jenkins ~]#mv jdk-17.0.8 /usr/local/java
[root@jenkins ~]#vim /etc/profile
[root@jenkins ~]#source /etc/profile
[root@jenkins ~]#java -version
Jenkinsのインストール方法1:warパッケージ
まず tomcat をインストールし、jenkins.war を webapps ディレクトリに直接配置します。
java -jar jenkins.war --httpPort=8080 コマンドを使用して直接実行します。
公式リポジトリ: https://pkg.jenkins.io/redhat-stable/
清華大学オープンソース ソフトウェア ミラー サイト:
/jenkins/redhat/ のインデックス | 清華大学オープンソース ソフトウェア ミラー ステーション | 清華大学オープンソース ミラー
対応するデータ パッケージをダウンロードするだけです。ここでは jenkins-2.401-1.1.noarch.rpm を使用しています。
Jenkinsのインストール方法2:rpm方式(推奨)
[root@jenkins ~]# rpm -ivh jenkins-2.181-1.1.noarch.rpm
ジェンキンスを開始する
[root@jenkins ~]# jenkins を開始します (開いたままにしておきます)
[root@jenkins ~]# netstat -lnpt | grep:8080
RPMパッケージのインストール内容
[root@jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins #スタートアップファイル
/etc/logrotate.d/jenkins # ログ分割設定ファイル
/etc/sysconfig/jenkins # jenkins メイン設定ファイル
/usr/lib/jenkins # war パッケージ ディレクトリを保存します
/usr/lib/jenkins/jenkins.war # war パッケージ
/usr/sbin/rcjenkins # コマンド
/var/cache/jenkins # war パッケージ解凍ディレクトリ jenkins Web コード ディレクトリ
/var/lib/jenkins # jenkins 作業ディレクトリ
/var/log/jenkins # ログ
設定ファイルの説明
[root@jenkins ~]# grep "^[aZ]" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" #jenkins 作業ディレクトリ
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins" # jenkinx 開始ユーザー
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080" # ポート
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="いいえ"
JENKINS_HANDLER_MAX="100" # 最大接続数
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
ウェブ運営
ブラウザ アクセス テスト: http://192.168.1 00.1 3 1 :8080
秘密キーを入力してください:
Jenkins のロックを解除し、パスワードをコマンド ラインから取得します。
認証パスワードを入力し、「次へ」をクリックします
推奨プラグインのインストールを選択する
プラグインを自動的にダウンロードします (ステータスはすべて緑色、次のステップ)
ステータスが赤になります。再起動して再度インストールしてください。
ステータスが赤になり、再起動すれば入ることができますが、プラグインのインストールエラーがあり、影響を受けます。
緑色に変わったら、次の操作を行います。
管理者ユーザーを作成し、管理者アカウントの使用を選択して続行します。
インスタンスの設定を保存して完了です。
クリックして始めましょう
使用する準備ができて!