paint-brush
AWS、K8S、Docker、Ansible、Git、Github、Apache Maven、Jenkins を使用した CI/CD パイプラインの構築@zufarexplained
38,449 測定値
38,449 測定値

AWS、K8S、Docker、Ansible、Git、Github、Apache Maven、Jenkins を使用した CI/CD パイプラインの構築

Zufar Sunagatov46m2023/09/07
Read on Terminal Reader

長すぎる; 読むには

Zufar Sunagatov を使用して、AWS、K8S、Docker、Ansible、Apache Maven、Git、Github、Jenkins を使用して高度な CI/CD パイプラインを作成する方法を学びます。このチュートリアルを終えると、Github 上のどのプロジェクトにも適用できる最新の CI/CD パイプラインをすぐに使用できるようになります。
featured image - AWS、K8S、Docker、Ansible、Git、Github、Apache Maven、Jenkins を使用した CI/CD パイプラインの構築
Zufar Sunagatov HackerNoon profile picture
0-item
1-item




前回の記事 「マイクロサービス アーキテクチャ パターン パート 1: 分解パターン」では、マイクロサービスの魅力的な世界について詳しく説明しました。これは、マイクロサービスとそのパターンに関する私の包括的な記事シリーズの始まりでした。


論理的なステップとしては、このシリーズの第 2 部に進むことになりますが、次に調査してお話ししたいのは、これらのマイクロサービスをエンド ユーザーにシームレスに提供する重要なプロセスであると判断しました。


コンテンツの概要

  • モチベーション
  • [モジュール 1]: AWS EC2 仮想サーバー
  • [モジュール 2]: Jenkins サーバー
  • [モジュール 3]: Git と Github
  • [モジュール 4]: Apache Maven
  • [モジュール 5]: ドッカー
  • [モジュール 6]: Ansible
  • [モジュール 7]: Kubernetes
  • 結論
  • 著者について



モチベーション

CI/CD は、アプリ開発のさまざまな段階に自動化を追加することで実現される、アプリを顧客に配信するための手法です。 CI/CD (継続的インテグレーションと継続的デプロイメント) を把握することで、開発者はバックエンド プロジェクトの成果物がプロジェクト リポジトリの境界を越えてどのように存在するかをより深く理解できるようになると私は信じています。この理解は、開発者の視点に根本的な変化をもたらす可能性もあります。自分の仕事を単にコード行として見るのではなく、プロジェクトのより広範なコンテキストを価値のある製品として受け入れることができるようになります。


この記事では、実際の応用を通じて CI/CD プロセスをわかりやすく説明することを目的としています。ステップバイステップのチュートリアルをモジュールごとに分けて説明し、CI/CD パイプラインを手動で構築します。これを行うために、 AWS、Docker、Kubernetes、Ansible、Git、Apache Maven、 Jenkinsなどの最新の DevOps ツールの力を活用します。それでは、この旅を始めましょう!


[モジュール 1]: AWS EC2 仮想サーバー

このモジュールは、AWS EC2 仮想サーバー インスタンスの作成専用です。この記事の一部として、Jenkins、Ansible、Kubernetes 用に 3 つの EC2 インスタンスをセットアップします。現時点では、次のモジュールに進み、「[モジュール 2]: Jenkins」、「[モジュール 6]: Ansible」、および「[モジュール 7]: Kubernetes」セクションでこのモジュールに再度アクセスできます。


ステップ 1: AWS アカウントを作成する

https://aws.amazon.com にアクセスします。

[AWS アカウントの作成]ボタンをクリックします。


「AWS アカウントの作成」ボタンへのポインターが表示された AWS メイン Web ページのスクリーンショット


アカウント作成 Web ページの指示に従います。


ステップ 2: AWS アカウントにサインインする

https://console.aws.amazon.com/console/home に移動します。 「サインイン」ボタンをクリックします。

「サインイン」ボタンへのポインタが表示された AWS メイン Web ページのスクリーンショット


この Web ページに必要な資格情報をすべて入力します。


ステップ 3: EC2 仮想サーバーを見つける

検索ボックスで EC2 を検索します。

検索ボックスへのポインターが表示された AWS Web ページのスクリーンショット


[EC2 サービス]をクリックして、[EC2 仮想サーバー] を選択します。

「EC2」AWS サービスへのポインタが表示された AWS Web ページのスクリーンショット


[インスタンスの起動]ボタンをクリックします。

「インスタンスの起動」ボタンへのポインタが表示された AWS Web ページのスクリーンショット


ステップ 4: 「名前とタグ」セクションを構成する

「名前とタグ」セクションに進みます。

「名前とタグ」セクションへのポインターが表示された AWS Web ページのスクリーンショット


「名前」セクションに新しい AWS EC2 仮想サーバー インスタンスの名前を入力します。

「名前とタグ」セクションの「名前」入力ボックスへのポインターが表示された AWS Web ページのスクリーンショット


「追加タグを追加」をクリックして、仮想サーバーにタグを追加することもできます。


ステップ 5: 「アプリケーションと OS イメージ (Amazon マシン イメージ)」セクションを構成する


「アプリケーションと OS イメージ (Amazon マシン イメージ)」セクションに進みます。

「アプリケーションと OS イメージ (Amazon マシン イメージ)」セクションへのポインタが表示された AWS Web ページのスクリーンショット


仮想サーバーを無料でプレイするには:

  1. 仮想サーバーのオペレーティング システム ( Amazon Linux)を選択します。
  2. [Amazon Machine Image (AMI)]セクションで、無料利用枠の対象タグを持つマシンを選択します。



「アプリケーションと OS イメージ (Amazon マシン イメージ)」セクションの「OS」ボタンと「マシン タイプ」ボタンへのポインタが表示された AWS Web ページのスクリーンショット


ステップ 6: 「インスタンスタイプ」セクションを構成する

「インスタンスタイプ」セクションに進みます。

「インスタンスタイプ」セクションへのポインタが表示された AWS Web ページのスクリーンショット


仮想サーバーを無料でプレイするには:

[インスタンス タイプ]セクションで、無料利用枠対象タグを持つタイプを選択します。

私の場合、それはt2.micro (ファミリー: t2 1cCPU 1 GiB メモリ、現在の世代: true)です。



「インスタンス タイプ」セクションの「インスタンス タイプ」ドロップダウンへのポインタが表示された AWS Web ページのスクリーンショット


ステップ 7: 「ストレージの構成」セクションを構成する

「ストレージの構成」セクションに進みます。

「ストレージの構成」セクションへのポインターが表示された AWS Web ページのスクリーンショット


仮想サーバーを無料でプレイするには:

デフォルト設定を変更しないでください。無料利用枠の対象となるお客様は、30 GB の EBS 汎用 (SSD) または磁気ストレージを入手できます。



「ストレージの構成」セクションにあるストレージの可能な構成へのポインターが表示された AWS Web ページのスクリーンショット


ステップ 8: 「ネットワーク設定」セクションを構成する

「ネットワーク設定」セクションに進みます。

「ネットワーク設定」セクションへのポインターが表示された AWS Web ページのスクリーンショット


仮想サーバーのセキュリティを設定する必要があります。これをする、

  1. 「セキュリティグループの作成」ボタンをクリックします。
  2. 「セキュリティ グループ名」セクションに新しいセキュリティ グループの名前を追加します。
  3. 「説明」セクションに新しいセキュリティ グループの説明を追加します。

デフォルトでは、仮想サーバーは (タイプ - SSH、プロトコル - TCP、ポート - 22 ) 経由でアクセスできます。追加の接続タイプが必要な場合は、追加の受信セキュリティ グループ ルールを追加して接続タイプを追加します。



「ネットワーク設定」セクションの「セキュリティ グループ」へのポインタが表示された AWS Web ページのスクリーンショット


ステップ 9: 「キーペア (ログイン)」セクションを構成する

「キーペア(ログイン)」セクションに進みます。

「Ket ペア (ログイン)」セクションへのポインターが表示された AWS Web ページのスクリーンショット


新しいキーペアをまだ作成していない場合は作成します。

「Ket ペア (ログイン)」セクションの「キー ペア名」、「キー ペア タイプ」、「秘密キー ファイル形式」へのポインターが表示された AWS Web ページのスクリーンショット


「キーペア」をまだ作成していない場合:

  1. 「新しいキーペアの作成」ボタンをクリックします。
  2. 「キー ペア名」セクションで新しいキー ペアに名前を付けます。
  3. キーペアのタイプRSAまたはED25519を選択します。私はRSAタイプを選びました。
  4. 秘密キーのファイル形式を選択します。 .pem.ppkの選択。私は.pem形式を選択します。
  5. 「キーペアの作成」ボタンをクリックします。
  6. 秘密キー ファイルをダウンロードするように求めるポップアップ ウィンドウが表示されます。同意してファイルをコンピュータにダウンロードします。

ステップ 10: EC2 仮想サーバーインスタンスを起動する


[インスタンスの起動]ボタンをクリックして EC2 仮想サーバー インスタンスを起動します。

「インスタンスの起動」ボタンへのポインタが表示された AWS Web ページのスクリーンショット


EC2 仮想サーバー インスタンスの作成プロセスが完了すると、次のように表示されます。


EC2 仮想サーバー インスタンスの作成プロセスが正常に完了したことを示す「成功」通知を表示する AWS Web ページのスクリーンショット


次に、 「すべてのインスタンスを表示」ボタンをクリックして「インスタンス」セクションに移動する必要があります。


実行中の EC2 インスタンスへのポインターが表示された AWS Web ページのスクリーンショット

これで、AWS EC2 仮想サーバー インスタンスが実行されていることがわかります。



[モジュール 2]: Jenkins サーバー

次に、EC2 仮想サーバー インスタンスで JenkinsServer を構成しましょう。

ステップ 1: AWS EC2 仮想サーバーインスタンスを作成する

Jenkins を実行するには仮想サーバーが必要です。

このチュートリアルの「[モジュール 1]: AWS EC2 仮想サーバー」セクションの手順に従ってこのステップを完了し、JenkinsServer という名前の EC2 仮想サーバー インスタンスを作成します。

セキュリティグループ設定を追加することを忘れないでください。これにより、 JenkinsSSH がそれぞれポート808022で動作できるようになります。


EC2 仮想サーバー インスタンスを区別するには、 「JenkinsServer」という名前を使用します。

新しい「JenkinsServer」 AWS EC2 インスタンス用に「CI_CD_Pipeline」セキュリティ グループと「CI_CD_Pipeline_Key_Pair」を作成します。記事内でさらに再利用できます。


ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する

AWS コンソールのホームページEC2 管理コンソールのダッシュボードインスタンスに移動します。

次に、 JenkinsServerを選択し、 「接続」ボタンをクリックします。

「接続」ボタンへのポインタが表示された AWS 「インスタンス」Web ページのスクリーンショット


すると、この Web ページが表示されます。もう一度「接続」ボタンをクリックしてください。

「接続」ボタンへのポインタが表示された AWS 「インスタンスへの接続」Web ページのスクリーンショット


これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。

AWS EC2 仮想サーバーインスタンスのオンラインターミナルのスクリーンショット


ステップ 3: Jenkins リポジトリをダウンロードする

次に、EC2 仮想サーバー インスタンスに Jenkins をダウンロードする必要があります。

次の指示に従ってください。


  1. Jenkins のダウンロードWeb ページに移動します。

  2. 安定版 (LTS) および通常リリース (毎週) のオプションが表示されます。 Red Hat/Fedora/Alma/Rocky/CentOS LTS オプションを選択します。


このWebページが表示されます。

Jenkins ダウンロード Web ページのスクリーンショット


  1. 「sudo get..」コマンドをコピーして実行すると、インターネット上の Jenkins リポジトリから Jenkins ファイルがダウンロードされ、EC2 仮想サーバー インスタンス上の指定された場所に保存されます。
 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

これで Jenkins がダウンロードされました。


ステップ 4: Jenkins キーをインポートする

Jenkins のインストールを完了するには、Jenkins キーをインポートする必要があります。

Jenkins キーをインポートするには、 「sudo rpm..」コマンドをコピーして実行する必要があります。


 sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

このようにして、 「rpm」パッケージ マネージャーは、インストールする Jenkins パッケージが Jenkins プロジェクトによって公開されたものとまったく同じであること、および改ざんまたは破損していないことを確認できます。


ステップ 5: Java をインストールする

Jenkins を実行するには、EC2 仮想サーバー インスタンスにJavaをインストールする必要があります。

Javaをインストールするには、次のコマンドを使用します。


 sudo amazon-linux-extras install java-openjdk11 -y


次のコマンドを使用して、 Javaが正しくインストールされたかどうかを確認します。

 java -version


そのようなものが見られます。

JDK 11 がインストールされた AWS EC2 仮想サーバー インスタンスのオンライン ターミナルのスクリーンショット


ステップ 6: fontconfig をインストールする

Jenkins を実行するには、EC2 仮想サーバー インスタンスにfontconfigをインストールする必要があります。

このコマンドを使用します。

 sudo yum install fontconfig java-11-openjdk -y


Fontconfig は、システム全体のフォント構成、カスタマイズ、アプリケーション アクセスを提供するように設計されたライブラリです。 Jenkins にはフォントをレンダリングする機能があるため、Jenkins にはこれが必要です。


ステップ 7: Jenkins をインストールする

前のステップでは、特定の Jenkins リポジトリを使用するように EC2 仮想サーバー インスタンスを構成し、このリポジトリに関連付けられた GPG キーをインポートしました。次に、追加した Jenkins も含め、認識しているすべてのリポジトリを検索して Jenkins パッケージを見つけるコマンドを実行する必要があります。 Jenkins リポジトリで Jenkins パッケージを見つけると、ダウンロードしてインストールします。


このコマンドを実行してみましょう。

 sudo yum install jenkins -y


ステップ 8: Jenkins を開始する

このコマンドを使用して Jenkins を起動できます。

 sudo systemctl start jenkins


Jenkins が実行されていることを確認するには、次のコマンドを使用します。

 sudo systemctl status jenkins


以下のスクリーンショットに出力がそのまま表示されます。

Jenkins がインストールされた AWS EC2 仮想サーバー インスタンスのオンライン ターミナルのスクリーンショット


これで、Jenkins が起動して実行されるようになります。

ステップ 9: Jenkins にアクセスする

Jenkins アプリケーションにアクセスするには、任意の Web ブラウザを開いて、EC2 インスタンスのパブリック IP アドレスまたはドメイン名に続いてポート 8080 を入力します。


 http://<your-ec2-ip>:8080


初めて Jenkins にアクセスすると、自動生成されたパスワードでロックされます。

AWS EC2 仮想サーバーにインストールされた Jenkins と管理者パスワードへのポインタのスクリーンショット


次のコマンドを使用して、このパスワードを表示する必要があります。

 sudo cat /var/lib/jenkins/secrets/initialAdminPassword


このパスワードをコピーし、ブラウザに戻り、管理者パスワード フィールドに貼り付けて、[続行] をクリックします。


すると、このWebページが表示されるようになります。


「Jenkins のカスタマイズ」Web ページへのポインタが表示された、AWS EC2 仮想サーバーにインストールされた Jenkins のスクリーンショット


これで、Jenkins サーバーを使用できるようになりました。


ステップ 10: 新しい Jenkins パイプラインを作成する

これで、Jenkins が正常に動作しているので、Jenkins パイプラインの作成を開始できます。 Jenkins パイプラインを作成するには、新しい「Freestyle プロジェクト」を作成する必要があります。新しい「Freestyle プロジェクト」を作成するには、Jenkins ダッシュボードに移動し、 「新しい項目」ボタンをクリックする必要があります。


「新しい項目」ボタンへのポインターが表示された Jenkins ダッシュボード Web ページのスクリーンショット


Github の名前「Freestyle プロジェクト」(「パイプライン」という名前は今後使用されます) を入力し、 「OK」ボタンをクリックします。


「項目名」項目ボックスへのポインターが表示された Jenkins 新しい項目 Web ページのスクリーンショット


次に、パイプラインの説明を入力します。

「説明」入力ボックスへのポインターが表示された Jenkins ジョブ構成 Web ページのスクリーンショット


次に、「適用」ボタンをクリックして「保存」します。その後、このチュートリアルで構築するパイプラインの基礎を作成したことになります。



[モジュール 3]: Git と Github

Jenkins が AWS EC2 仮想サーバー インスタンス上で実行されるようになったので、パイプラインを使用して Git を構成できます。

Git は、ソフトウェア チームが特別な種類のデータベース内のコードに対するすべての変更を追跡できるように設計された、無料のオープンソースの分散バージョン管理システム (VCS) です。間違いがあった場合、開発者は時計を戻し、コードの以前のバージョンを比較して、チームメンバー全員への混乱を最小限に抑えながら間違いを修正することができます。 VCS は特に次の場合に役立ちます。 DevOpsなぜなら、開発時間を短縮し、デプロイメントの成功率を高めるのに役立つからです [1]。

最も一般的なバージョン管理システムである Git を使用すると、プロジェクトの Github リポジトリから、Jenkins がインストールされている EC2 仮想サーバー インスタンスに最新のコードをプルできます。


ステップ 1: Git をインストールする

このコマンドを使用して Git をインストールします。

 sudo yum install git -y


次に、次のコマンドを使用して、Git が動作していることを確認します。

 git --version

現在、Git は EC2 仮想サーバー インスタンス上で正常に動作しています。


ステップ 2: Jenkins ダッシュボードを開く

Git は EC2 仮想サーバー インスタンス上で正常に動作しているため、Jenkins を Git と統合できるようになりました。

この統合を開始するには、Jenkins Github プラグインをインストールしましょう。

Jenkins ダッシュボード セクションに移動します。


Jenkins ダッシュボードのスクリーンショット


ステップ 3: Jenkins プラグイン マネージャーを開く

「Jenkins の管理」ボタンをクリックし、 「プラグインの管理」ボタンをクリックします。

「プラグインの管理」ボタンへのポインターが表示された Jenkins ダッシュボードのスクリーンショット


ステップ 4: Github Jenkins プラグインを見つける

「利用可能なプラグイン」ボタンをクリックします。

「利用可能なプラグイン」ボタンへのポインターが表示された Jenkins プラグイン マネージャー Web ページのスクリーンショット


Githubプラグインの検索ボックスを見つけます。


「Github」プラグインへのポインターが表示された Jenkins Plugin Manager Web ページのスクリーンショット


Githubプラグインを選択します。


ステップ 5: Github Jenkins プラグインをインストールする

Githubプラグインを選択します。そして、 「再起動せずにインストール」ボタンをクリックします。


「再起動せずにインストール」ボタンへのポインタが表示された Jenkins Plugin Manager Web ページのスクリーンショット


Github プラグインのダウンロードが完了するまで待ちます。


Github プラグインをダウンロードしている Jenkins Plugin Manager Web ページのスクリーンショット


はい! Jenkins Github プラグインがインストールされています。


ステップ 6: Github Jenkins プラグインを構成する

GitHub Jenkins プラグインがインストールされたので、最終的に Jenkins を Git と統合するようにこのプラグインを構成できます。そのためには、「トップページに戻る」ボタンをクリックしてメインページに戻る必要があります。


「トップページに戻る」ボタンへのポインタが表示された Jenkins Plugin Manager Web ページのスクリーンショット


次に、メイン ページで、 「Jenkins の管理」ボタンをクリックし、 「グローバル ツール構成」ボタンをクリックする必要があります。


「グローバル ツール構成」ボタンへのポインターが表示された Jenkins Plugin Manager Web ページのスクリーンショット


次に、グローバル ツール構成 Web ページで、Git セクションに移動する必要があります。


「名前」および「Git 実行可能ファイルへのパス」入力ボックスへのポインターが表示された Jenkins Global Tool Configuration Web ページのスクリーンショット


[Git] セクションでは、コンピューター上の Git の名前とパスを指定して Git を構成する必要があります。


次に、 「適用」ボタンと「保存」ボタンをクリックします**。**


これで、Jenkins Github プラグインの構成が完了しました。


ステップ 7: Git をパイプラインに統合する

Jenkins Github プラグインがインストールされて構成されたので、パイプライン内でこのプラグインを利用できるようになります。これにより、モジュール 2 で作成したパイプラインが、指定した GitHub リポジトリからプロジェクト コードをプルできるようになります。


このプラグインをパイプラインに統合するには、[ソース コード管理] セクションに移動し、パイプラインで Git を選択する必要があります。次に、プロジェクト リポジトリの URL を指定する必要があります。プロジェクト リポジトリが Github で公開されている場合、認証情報を提供する必要はありません。プロジェクト リポジトリが Github 上でプライベートである場合は、認証情報を提供する必要があります。


「ソース コード管理」設定を含む Jenkins ジョブ構成 Web ページのスクリーンショット


次のリポジトリ URL: https://github.com/Sunagatov/Hello.gitで私のプロジェクトを使用できます。

それをコピーして「リポジトリ URL」入力に貼り付けるだけです。次に、 「適用」ボタンと「保存」ボタンをクリックして、Git とパイプラインの統合を完了します。


ステップ 8: パイプラインに統合された Git をテストする

これで、更新されたパイプラインを使用して、Github からプロジェクトをプルできるようになりました。これを行うには、**「今すぐビルド」** ボタンをクリックする必要があります。その結果、ビルド履歴にビルドが成功したことが表示されます。


「今すぐビルド」ボタンと「ビルド履歴」セクションへのポインターを含む Jenkins Web ページのスクリーンショット



ビルド履歴から最初のビルドを開きます。

成功したジョブ結果を含む Jenkins Pull_Code_From_Github_Job のスクリーンショット


これで、最初のビルドの成功したジョブ結果が表示されます。 AWS EC2 ターミナルを開いた場合。パイプラインが正常に動作していることを確認できます。


このコマンドを使用するだけです。

 cd /var/lib/jenkins/workspace/{your pipeline name}


このようにして、Github からのプロジェクトが AWS EC2 仮想サーバー インスタンスにプルされたことがわかります。


EC2 インスタンスのターミナルにダウンロードされた Github プロジェクトのスクリーンショット



[モジュール 4]: Apache Maven

Apache Maven は、ソフトウェア開発において広く使用されているビルド自動化およびプロジェクト管理ツールです。プロジェクトの依存関係を管理し、一貫したビルド ライフサイクルを提供することで、コードのコンパイル、テスト、パッケージ化のプロセスを合理化します。 Maven は、XML ベースの構成ファイル (POM ファイル) を使用してプロジェクトの構造、依存関係、およびタスクを定義し、開発者が複雑なソフトウェア プロジェクトを効率的に管理および展開できるようにします。


Git をパイプラインに統合したので、プロジェクトをビルド、テスト、パッケージ化できる Apache Maven を組み込むことでパイプラインをさらに強化できます。これを行うには、Jenkins と Git がインストールされている AWS EC2 仮想サーバー インスタンスに Apache Maven をインストールする必要があります。


ステップ 1: Apache Maven をダウンロードする

Apache Maven をダウンロードするには、 「/opt」ディレクトリに移動します。

 cd /opt


そして、このコマンドを使用します。

 sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz


このコマンドは、最新の公式 Apache Maven をダウンロードします (公式 Apache Maven Web サイトで最新バージョンを確認してください)。最新の公式 Apache Maven リリースを見つけるには、リンクhttps://maven.apache.org/download.cgiを使用してください。


ステップ 2: アーカイブから Apache Maven を抽出する

次のコマンドを使用して、ダウンロードしたアーカイブから Apache Maven を抽出します。

 sudo tar -xvzf apache-maven-*.tar.gz


ステップ 3: JAVA_HOME と M2_HOME を追加する

このコマンドを使用してルート フォルダーに移動します。

 cd ~


このコマンドを使用して.bash_profileファイルを編集します。

 vi .bash_profile


JAVA_HOME変数と M2_HOME 変数を追加します。


JAVA_HOME変数には JDK11 へのパスを割り当て、 M2_HOME変数には Maven ディレクトリへのパスを割り当てます。


JDK パスを検索するには、次のコマンドを使用します。

 sudo find / -name java 



.bash_profile ファイルを含む AWS EC2 仮想サーバー インスタンスのターミナル Web ページのスクリーンショット


VIMの使い方

  • ファイルを編集するには、キーボード ボタン「I」を押してデータを挿入します。
  • ファイルを保存するには、キーボード ボタン「esc」を押して「:w」と入力します。
  • ファイルを終了するには、キーボード ボタン「esc」を押して「:q」と入力します。

変更を保存します。


次に、このコマンドを実行してシステム変数を更新します。

 source .bash_profile


$PATHを確認するには、次のコマンドを使用します。

 echo $PATH


Apache Maven を確認するには、次のコマンドを使用します。

 mvn -v


すべてを正しく実行すると、Apache Maven のバージョンを表示できるようになります。

Apache Maven のバージョンを使用した AWS EC2 仮想サーバー インスタンスのターミナル Web ページのスクリーンショット


ステップ 4: Apache Maven Jenkins プラグインをインストールする

Apache Maven は EC2 インスタンスで使用できるため、Apache Maven プラグインをインストールしてパイプラインと統合できます。


これを実現するには、次の手順に従います。

  1. 「ダッシュボード」 →「Jenkinsの管理」→「プラグインの管理」→「利用可能」に移動します。
  2. 検索ボックスに「Maven」と入力します。
  3. 「Maven Integration」プラグインを選択します。


AWS EC2 仮想サーバーにインストールされた Jenkins と Maven プラグインへのポインターのスクリーンショット


ダウンロードプロセスが終了するまで待ちます。


そして「トップページに戻る」ボタンをクリックしてください。

AWS EC2 仮想サーバーにインストールされた Jenkins と Maven プラグインのダウンロード プロセスへのポインターのスクリーンショット


ステップ 5: Apache Maven Jenkins プラグインを構成する

Apache Maven Jenkins プラグインが正常にインストールされると、モジュール 2 と 3 で作成および更新したパイプライン内でこのプラグインを利用できるようになります。


これを行うには、次の手順に従います。

  1. 「ダッシュボード」 →「Jenkinsの管理」→「グローバルツール構成」→「JDK」に移動します。
  2. 「JDKを追加」ボタンをクリックします。
  3. 「自動的にインストールする」のチェックを外します。



AWS EC2 仮想サーバーにインストールされた Jenkins と JDK 設定へのポインターのスクリーンショット



次に「Maven」セクションに進みます。 「Maven を追加」ボタンをクリックします。 「自動的にインストールする」のチェックを外します。

次に、名前MAVEN_HOMEパスを追加します。



AWS EC2 仮想サーバーにインストールされた Jenkins と Apache Maven 構成へのポインターのスクリーンショット



「適用」ボタンと「保存」ボタンをクリックします。

これで、Apache Maven Jenkins プラグインの構成が完了しました。


ステップ 6: Apache Maven をパイプラインに統合する

Apache Maven GitHub プラグインがインストールされて構成されたので、パイプライン内で Apache Maven を利用できるようになりました。これにより、「[モジュール 2]: Jenkins Server」で作成したパイプラインでプロジェクト コードを構築し、jar アーティファクトを作成できるようになります。


Apache Maven をパイプラインに統合するには、次の手順に従う必要があります。

  1. 「ダッシュボード」 →「CI_CD_Pipeline」→「構成」→「ビルドステップ」に移動します。
  2. 「ビルドステップを追加」ボタンをクリックします。
  3. 「トップレベルの Maven ターゲットを呼び出す」オプションを選択します。
  4. 「Maven バージョン」として「Apache-Maven」を選択します
  5. 「目標」入力に「クリーンパッケージ」コマンドを追加します。
  6. 「詳細」ボタンをクリックします。
  7. 「POM」入力に「pom.xml」を追加します。



「適用」ボタンと「保存」ボタンへのポインターを含む、パイプライン構成の「ビルドステップ」セクションのスクリーンショット



最後に、 「適用」ボタンと「保存」ボタンをクリックして、Apache Maven とパイプラインの統合を完了する必要があります。

ステップ 7: パイプラインに統合された Apache Maven をテストする

これで、更新されたパイプラインを使用して Github プロジェクトを構築できるようになりました。これを行うには、**「今すぐビルド」** ボタンをクリックする必要があります。その結果、ビルド履歴にジョブの成功結果が表示されます。

AWS EC2 ターミナルを開いた場合。パイプラインが正常に動作していることを確認できます。


このコマンドを使用するだけです。

 cd /var/lib/jenkins/workspace/{your pipeline name}/target


こうすることで、GitHub からのプロジェクトのビルドが成功したことを示す JAR アーティファクトを確認できます。



[モジュール 5]: ドッカー

次に、Docker と Ansible をインストールする新しい EC2 インスタンスを「Ansible Server」という名前で作成しましょう。


ステップ 1: AWS EC2 仮想サーバーインスタンスを起動する

このチュートリアルの「 AWS EC2 仮想サーバー インスタンスの起動」セクションの手順に従って、このステップを完了します。セキュリティグループ設定を追加することを忘れないでください。これにより、Docker と SSH がそれぞれポート 8080 と 22 で動作できるようになります。


ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する

「接続」ボタンをクリックします。

「接続」ボタンへのポインタが表示された AWS Web ページのスクリーンショット


これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。

AWS EC2 仮想サーバーインスタンスのオンラインターミナルのスクリーンショット


 sudo chown ansible-admin:ansible-admin /opt/docker


ステップ 3: Ansible EC2 仮想サーバーに Docker をインストールします。

次に、Ansible EC2 インスタンスに docker をインストールする必要があります。これを行うには、新しい docker フォルダーを作成する必要があります。

 sudo mkdir /opt/docker


次に、次のコマンドを実行して docker をインストールします。

 sudo yum install docker -y


ステップ 4: 現在のユーザーを Ansible EC2 仮想サーバーの Docker グループに追加する

Docker 管理者権限を付与するには、現在のユーザー「ansible-admin」をEC2 仮想サーバー「AnsibleServer」の Docker グループに追加する必要があります。


 sudo usermod -a -G docker ansible-admin


これらの変更を有効にするには、ログアウトしてから再度ログインする必要があります。


その後、次のコマンドを実行できます

id ansible-admin


新しい docker ユーザーが存在することを確認します。


Docker ユーザーへのポインターを含む Ansible EC2 インスタンスのスクリーンショット


ステップ 5: Docker を起動する

これで、Docker が Ansible EC2 インスタンスにインストールされたので、次のコマンドを実行して起動できるようになります。

 sudo systemctl start docker


Docker が起動すると、次のコマンドを実行できます。

 sudo systemctl status docker


docker がアクティブで現在実行中であることを確認します。

アクティブな Docker ステータスを示す Ansible EC2 インスタンスのスクリーンショット


ステップ 6: Dockerfile を作成する

パイプラインの最終バージョンでは、プロセスに GitHub プロジェクトから新しい Docker イメージを作成し、それを Docker Hub にプッシュすることが含まれます。これを実現するには、GitHub プロジェクトに Dockerfile が含まれている必要があります。


[モジュール 3]: Git と Github」モジュールで提供されたプロジェクト「Hello」を使用した場合、このプロジェクト リポジトリには既に Dockerfile が含まれているため、新しい Dockerfile を作成する必要はありません。


 FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]


独自のプロジェクト リポジトリを使用していて、そこに Dockerfile が含まれていない場合は、新しい Dockerfile を作成する必要があります。


新しい Dockerfile を作成するには、次のコマンドを実行すると、新しいファイルが作成されます。

 sudo touch Dockerfile


次に、コンテナ化されたアプリケーション環境を構築する方法を説明する一連のコマンドをこのファイルに入力します。これらのコマンドには、イメージへのファイルのコピー、ソフトウェアのインストール、環境変数の設定、コンテナーの構成などのアクションが含まれます。


これらのコマンドを Dockerfile に入力するには、次のコマンドを実行します。

 vim Dockerfile

Dockerfile を使用する準備ができました。


ステップ 7: Docker にログインする

Dockerfile を使用する準備ができたので、**"JenkinsServer"**EC2 インスタンスからプロジェクトの JAR アーティファクトをコピーし、それを"AnsibleServer" EC2 インスタンスに貼り付けます。この転送はパイプラインを通じてさらに自動化されることに注意することが重要です。

このステップを完了すると、セットアップした Docker 環境とともに Dockerfile をテストする準備が整います。


テストを開始する前に、Dockerhub で必ず認証を行ってください。次のコマンドを実行します。

 docker login


このコマンドでは、ユーザー名とパスワードを含む Dockerhub ログイン資格情報の入力を求められます。

「AnsibleServer」EC2インスタンスで成功したdockerログインのスクリーンショット


これで、 Dockerへのログインプロセスが完了し、テストを続行する準備が整いました。

ステップ 8: Docker 環境と Dockerfile をテストする

Dockerhub へのログインが完了すると、準備した Dockerfile のテストを開始する準備が整いました。


このコマンドを実行してdockerイメージを作成します。

 docker build -t hello:latest .


次に、後続のコマンドを実行して、イメージの Dockerhub へのアップロードを容易にするタグを確立します。

 docker tag hello:latest zufarexplainedit/hello:latest


最後に、このコマンドを実行して、Docker イメージを Dockerhub にプッシュします。

 docker push zufarexplainedit/hello:latest


これらの手順に従って、Dockerhub アカウントに移動して、新しいイメージが表示されるかどうかを確認します。

新しい画像が追加された Dockerhub アカウントのスクリーンショット


画像が効果的に追加されたことが確認できるはずです。この結果により、Docker 環境のインストールが成功し、Dockerfile が正しいことが確認されます。



[モジュール 6]: Ansible

次に、EC2 仮想サーバー インスタンス上で Ansible サーバーを構成しましょう。


ステップ 1: AWS EC2 仮想サーバーインスタンスを作成する

Ansible を実行するには仮想サーバーが必要です。


このチュートリアルの「[モジュール 1]: AWS EC2 仮想サーバー」セクションの指示に従ってこのステップを完了し、Ansible の EC2 仮想サーバー インスタンスを作成します。

セキュリティグループ設定を追加することを忘れないでください。これにより、 AnsibleSSH がそれぞれポート808022で動作できるようになります。


EC2 仮想サーバー インスタンスを区別するには、 「AnsibleServer」という名前を使用します。

「CI_CD_Pipeline」セキュリティ グループと「CI_CD_Pipeline_Key_Pair」を新しい「AnsibleServer」 EC2 インスタンスに再利用できます。


ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する

AWS コンソールのホームページ → EC2 管理コンソールのダッシュボード → インスタンス → AnsibleServer に移動します。


次に「接続」ボタンをクリックします。

「接続」ボタンへのポインタが表示された AWS Web ページのスクリーンショット


すると、この Web ページが表示されます。もう一度「接続」ボタンをクリックしてください。


「接続」ボタンへのポインタが表示された AWS 「インスタンスへの接続」Web ページのスクリーンショット


これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。

AWS EC2 仮想サーバーインスタンスのオンラインターミナルのスクリーンショット


次に、EC2 仮想サーバー インスタンス上で Ansible Server を構成しましょう。

ステップ 3: 「AnsibleServer」AWS EC2 仮想サーバー インスタンスのホスト名を変更する

EC2 仮想サーバー インスタンスで AnsibleServer を構成する場合、最初に行う必要があるのは、ホスト名を変更することです。


やりましょう。次のコマンドを実行してホスト名ファイルを開きます。

 sudo vi /etc/hostname


次のようなものが表示されるはずです。

ホスト名ファイルを含む AWS EC2 仮想サーバー インスタンスのスクリーンショット


このホスト名を「ansible-server」に置き換えます。次に、再起動します。

 sudo init 6 



ホスト名へのポインターが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


ステップ 4: 「AnsibleServer」AWS EC2 仮想サーバー インスタンスに新しいユーザーを追加して構成する

次に、新しいansible-adminユーザーを AWS EC2 仮想サーバー インスタンスに追加しましょう。

これを行うには、次のコマンドを使用します。


 sudo useradd ansible-admin


次に、 ansible-adminユーザーのパスワードを設定します。

 sudo passwd ansible-admin


また、 sudoersファイルを編集してユーザー権限を構成する必要があります。

 sudo visudo


このsudoersファイルに「ansible-admin ALL=(ALL) ALL」を追加します。

管理者権限へのポインタが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


また、 /etc/ssh/sshd_configファイルを編集して PasswordAuthentication を有効にする必要があります。

 sudo vi /etc/ssh/sshd_config 


管理設定へのポインターが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


次に、サービスをリロードしてこれらの変更を確認する必要があります。

 sudo service sshd reload


このコマンドを実行すると、次のように表示されます。


sshd リロード結果へのポインターが表示された AWS EC2 仮想サーバー インスタンス ターミナルのスクリーンショット


これで、このコマンドを使用して、以降のすべてのコマンドに sudo を追加することを避けることができます。

 sudo su - ansible-admin


ステップ 5: AWS EC2 仮想サーバーインスタンスでキーを生成する

この記事では、K8s EC2 仮想サーバー インスタンスなどのリモート サーバーをさらに管理することを計画しています。このため、SSH キーを設定する必要があります。

 ssh-keygen


このコマンドを実行すると、次のように表示されます。

ssh-keygen の結果へのポインターが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


これで SSH キーが生成され、使用できるようになりました。

ステップ 6: Ansible をインストールする

これで、 「AnsibleServer」 EC2 仮想サーバー インスタンスに Ansible をインストールできるようになりました。

やりましょう。


このコマンドを実行して Ansible をインストールします。

 sudo amazon-linux-extras install ansible2


Ansible を確認するには、次のコマンドを使用します。

 ansible --version


このコマンドを実行すると、次のように表示されます。

sudo yum install ansible の結果へのポインターが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


ステップ 7: JenkinsServer EC2 インスタンスに Jenkins の「Publish over SSH」プラグインをインストールする

Ansible は「AnsibleServer」 EC2 仮想サーバー インスタンスにインストールされているため、Ansible と統合するように Jenkins を構成できます。 Jenkins を Ansible がインストールされている EC2 仮想サーバー インスタンスおよびKubernetesがインストールされている他の EC2 仮想サーバー インスタンスと統合するには、「Publish over SSH」プラグインをインストールする必要があります。


「ダッシュボード」 →「 Jenkinsの管理」「システムの構成」「利用可能なプラグイン」に移動します。

次に、検索ボックスに「Publish over SSH」と入力します。


AWS EC2 仮想サーバーにインストールされた Jenkins と、「利用可能なプラグイン」Web ページへのポインターのスクリーンショット


「再起動せずにインストール」ボタンをクリックします。ダウンロードプロセスが終了するまで待ちます。


AWS EC2 仮想サーバーにインストールされた Jenkins と「ダウンロードの進行状況」Web ページへのポインタのスクリーンショット



これで、「Publish over SSH」プラグインが Jenkins EC2 仮想サーバー インスタンスにインストールされました。


ステップ 8: Jenkins の「Publish over SSH」プラグインを構成する

Apache Maven Jenkins プラグインが正常にインストールされると、モジュール 2 と 3 で作成および更新したパイプライン内でこのプラグインを利用できるようになります。


これを行うには、次の手順に従います。


「ダッシュボード」「Jenkins の管理」「システムの構成」「SSH 経由で公開」に移動します。

「Publish over SSH」プラグインを使用した AWS EC2 仮想サーバー インスタンス ターミナルのスクリーンショット


ホスト名、ユーザー名、秘密キー (該当する場合はパスワード) など、必要なデータをスクリーンショットにあるとおりにすべて入力します。


「Publish over SSH」プラグインを使用した AWS EC2 仮想サーバー インスタンス ターミナルのスクリーンショット


次に、 「適用」ボタンと「保存」ボタンをクリックします。


これで、 「Publish over SSH」 Jenkins プラグインの構成が完了しました。


次に、「設定のテスト」をクリックして、プラグインが正しく動作していることを検証します。



「Test Configuration」ボタンを備えた「Publish over SSH」プラグインのスクリーンショット


左側では、テスト プラグインの設定ステータスが「成功」であることがわかります。これはプラグインの設定が正しいことを意味します。


ステップ 9: AnsibleServer に新しい Docker ディレクトリを作成する

AnsibleServer EC2 インスタンス上に、プロジェクト JAR が保存される新しいフォルダーを作成する必要があります。この jar は、後で Docker イメージを作成するために使用されます。


はじめましょう。


AnsibleServer EC2 インスタンスの「/opt」フォルダーに移動します。

 cd /opt


そこに新しいフォルダー「docker」を作成します。

 sudo mkdir docker


この「docker」フォルダーに権限を与えます。

 sudo chown ansible-admin:ansible-admin docker


次に、このコマンドを実行して「docker」フォルダーの権限を確認します。

 ll


「docker」フォルダーに「ansible-admin」ユーザーでアクセスできることがわかります。


「AnsibleServer」EC2インスタンスの「docker」フォルダーのスクリーンショット


ステップ 10: 「Publish over SSH」 Github プラグインをパイプラインに統合する


「Publish over SSH」 Github プラグインがインストールおよび構成されたので、「[モジュール 2]: Jenkins Server」で作成したパイプラインにプラグインを統合して、プロジェクトの jar アーティファクトを「 JenkinsServer」から「AnsibleServer」


「Publish over SSH」 Github プラグインをパイプラインに統合するには、次の手順に従う必要があります。


  1. 「ダッシュボード」 →「CI_CD_Pipeline」→「構成」→「ビルド後のアクション」に移動します。
  2. 「ビルド後のアクションを追加」ボタンをクリックします。
  3. 「SSH 経由でビルド アーティファクトを送信する」オプションを選択します。
  4. 「SSH サーバー」セクションの「名前」入力に「AnsibleServer」を追加します**。**
  5. 「転送セット」セクションの「ソースファイル」入力に「target/*.jar」を追加します**.**
  6. 「転送セット」セクションの「プレフィックスの削除」入力に「target/」を追加します**。**
  7. 「転送セット」セクションの「リモート ディレクトリ」入力に「//opt/docker/」を追加します**。**
  8. ここでは、「転送セット」セクションの「実行コマンド」入力に空の文字列を入力するだけです。



パイプライン構成の「SSH 経由でビルド アーティファクトを送信する」セクションのスクリーンショット


最後に、 「適用」ボタンと「保存」ボタンをクリックして、 「SSH 経由で公開」プラグインとパイプラインの統合を完了する必要があります。


ステップ 11:パイプラインに統合されたGithub プラグイン「SSH 経由で公開」をテストする

これで、更新されたパイプラインを使用して、プロジェクト jar アーティファクトを「 JenkinsServer」から「AnsibleServer」に転送できるようになりました。これを行うには、 「今すぐビルド」ボタンをクリックする必要があります。その結果、ビルド履歴にジョブの成功結果が表示されます。


「AnsibleServer」 AWS EC2ターミナルを開いた場合。パイプラインが正常に動作していることを確認できます。

このコマンドを使用するだけです。


 cd /opt/docker


こうすることで、GitHub からのプロジェクトのビルドが成功したことを示す JAR アーティファクトを確認できます。

プロジェクト jar アーティファクトを含む /opt/docker ディレクトリのスクリーンショット


ステップ 12: Ansible ホストを構成する

Ansible Playbook を実行するときは、それを実行するホストを指定します。これは 2 つの方法で行うことができます。


  1. Playbook でホストを直接指定する: Playbook で、 hostsパラメーターを IP アドレスまたはホスト名のリストに設定できます。
  2. インベントリ ファイルを使用する: Ansible では、インベントリ ファイルでホストのリストを定義し、Playbook の実行時にこのファイルを参照できます。デフォルトのインベントリ ファイルは/etc/ansible/hostsです。


/etc/ansible/hostsを編集すると、Playbook を実行するたびにホストの IP アドレスを書き出すことなく、ホストのグループを簡単に管理できます。


次のコマンドを実行して、AnsibleServer EC2 インスタンスのホストを調べてみましょう。

 sudo ifconfig 


AnsibleServer EC2 インスタンスのネットワークインターフェース設定のスクリーンショット


AnsibleServer EC2 インスタンス ホストを見つけたら、次のコマンドを実行して、それを Ansible hosts ファイルに追加できます。


 sudo vi /etc/ansible/hosts


「[ansible]」を参照として追加することもできます

Ansible hosts ファイルのスクリーンショット


サーバーのクラスターを管理していて、そのすべてにプレイブックを適用したい場合は、プレイブックで各サーバーの IP アドレスを指定する代わりに、すべてのサーバーをインベントリ ファイルのグループに追加して、プレイブック内のグループ。


ステップ 13: Ansible のローカルホストへのパスワードレス SSH 認証を構成する

Ansible は、リモート サーバー上のタスクを自動化するように設計されています。パスワードレス SSH 認証により、Ansible は手動でパスワードを入力しなくてもこれらのサーバーに接続できるようになります。

このコマンドを実行して、ansible-admin ユーザーの SSH キーを使用して、自分のコンピューターから別のコンピューター (IP アドレス 172.31.34.41 のコンピューターなど) への安全な接続を作成します。


 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}


私の場合はこんな感じです。

 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected] 


パスワードなしの ssh 認証のインストールが成功した結果のスクリーンショット


「追加されたキーの数: 1」が表示されます。パスワードなしの SSH 認証のインストールが正常に完了したことを意味します。

ステップ 14: Docker タスク用の新しい Ansible プレイブックを作成する

Ansible の設定がすべて完了し、準備が整ったので、パイプライン用の新しい Ansible プレイブックを作成できます。この Playbook により、Ansible が新しい Docker イメージを作成して Dockerhub に送信できるようになります。

その方法は次のとおりです。


  1. まず、新しい Ansible Playbook ファイルを作成します。このコマンドを使用するだけです。
 touch hello-app.yml


  1. 次に、新しく作成したhello-app.ymlファイルを編集します。このコマンドを使用して編集用に開きます。
 vi hello-app.yml


  1. ファイル内に次の内容を入力します。
 --- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest

Docker タスク用の Ansible プレイブックを使用する準備ができました。

ステップ 13: Docker タスクを使用して Ansible プレイブックをテストする

Ansible、Ansible Playbook、AnsibleServer、および JenkinsServer がすべて適切に構成されたら、Ansible Playbook をテストします。


Ansible プレイブックの場所に移動します。

 cd /opt/docker


次に、以下のコマンドを実行します。

 sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml


完了すると、Ansible プレイブックの実行結果が正常に表示されることがわかります。

Docker タスクの Ansible Playbook の正常な実行結果のスクリーンショット


さらに、Dockerhub アカウントにアクセスして、新しいイメージが表示されるかどうかを確認してください。


新しい画像が追加された Dockerhub アカウントのスクリーンショット


新しく追加された画像が表示されるはずです。この結果により、Ansible プレイブックが正しいことが確認されます。


ステップ 14: Ansible Docker タスクをパイプラインに統合する

「Publish over SSH」 Github プラグイン、Ansible、Docker がインストールおよび設定されたので、「[モジュール 2]: Jenkins Server」で作成したパイプラインにそれらをすべて統合して、プロジェクトの jar アーティファクトを転送できるようになりました。 「 JenkinsServer」から「AnsibleServer」に変更し、プロジェクトから新しい Docker イメージを構築して、この Docker イメージを Dockerhub にプッシュします。


これを実現するには、次の手順に従う必要があります。

  1. 「ダッシュボード」 →「CI_CD_Pipeline」→「構成」→「ビルド後のアクション」→「SSH 経由でビルド アーティファクトを送信」に移動します。
  2. 「Exec command」入力に「sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml」コマンドを追加します。


パイプライン構成の「SSH 経由でビルド アーティファクトを送信する」セクションのスクリーンショット


最後に、 「適用」ボタン「保存」ボタンをクリックして、パイプラインとの Ansible Docker タスクの統合を終了します。

ステップ 15:パイプラインに統合された「Docker タスクを含む Ansible プレイブック」をテストする

これで、アップグレードされたパイプラインをテストして、プロジェクトの jar アーティファクトを「 JenkinsServer」から「AnsibleServer」にシームレスに転送し、プロジェクトから新しい Docker イメージを構築して、この Docker イメージを Dockerhub にプッシュできるようになりました。これを行うには、 「今すぐビルド」ボタンをクリックする必要があります。その結果、ビルド履歴にジョブの成功結果が表示されます。


さらに、Dockerhub アカウントにアクセスして、新しいイメージが表示されるかどうかを確認してください。


新しい画像が追加された Dockerhub アカウントのスクリーンショット


新しく追加された画像が表示されるはずです。この結果は、Docker タスクを含む Ansible プレイブックがパイプラインに正常に統合されたことを確認します。


[モジュール 7]: Kubernetes

次に、EC2 インスタンスで K8 を構成しましょう。新しい EC2 インスタンスを作成し、 Kubernetesクラスターとさらに対話するための kubectl コマンドライン ツールをインストールします。


ステップ 1: AWS EC2 仮想サーバーインスタンスを起動する

このチュートリアルの「 AWS EC2 仮想サーバー インスタンスの起動」セクションの手順に従って、このステップを完了します。


セキュリティグループ設定を追加することを忘れないでください。これにより、すべてのツールSSH がそれぞれポート808022で動作できるようになります。


EC2 仮想サーバー インスタンスを区別するには、 「K8sServer」という名前を使用します。

「CI_CD_Pipeline」セキュリティ グループと「CI_CD_Pipeline_Key_Pair」を新しい「K8sServer」 EC2 インスタンスに再利用できます。


ステップ 2: AWS EC2 仮想サーバー インスタンスに接続する

「接続」ボタンをクリックします。

「接続」ボタンへのポインタが表示された AWS Web ページのスクリーンショット


これで、EC2 仮想サーバー インスタンスのオンライン ターミナルが表示されます。

AWS EC2 仮想サーバーインスタンスのオンラインターミナルのスクリーンショット


ステップ 3: 「KubernetesServer」AWS EC2 仮想サーバー インスタンスのホスト名を変更する

EC2 仮想サーバー インスタンス上で KuberenetesServer を構成する場合、最初に行う必要があるのは、ホスト名を変更することです。


やりましょう。次のコマンドを実行してホスト名ファイルを開きます。

 sudo vi /etc/hostname


このようなものが表示されるはずです。

ホスト名ファイルを含む AWS EC2 仮想サーバー インスタンスのスクリーンショット


このホスト名を「kubernetes-server」に置き換えて再起動します。

 sudo init 6


ホスト名が変更されました。

ホスト名へのポインターが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


ステップ 4: AWS CLI のバージョンを確認する

このコマンドを使用してAWS のバージョンを確認します。

 aws --version


こうすることで、現在の aws-cli バージョンを確認できます。

aws バージョンのコマンド結果を含む AWS EC2 仮想サーバー インスタンスのオンライン ターミナルのスクリーンショット


バージョンaws-cli/1.18が表示される場合は、最新バージョンをダウンロードする必要があります。


ステップ 5: AWS CLI を更新する

EC2 インスタンスに古い aws-cli バージョンがあることがわかったので、それを更新する必要があります。それには、AWS → ドキュメント → AWS コマンドラインインターフェイス → バージョン 2 のユーザーガイドに移動します。


バージョン 2 のユーザー ガイドを含む AWS EC2 仮想サーバー インスタンス Web ページのスクリーンショット


curl コマンドをコピーして貼り付けます。


まず、このコマンドを実行して awscli バージョン 2 をダウンロードします。

 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

ダウンロードプロセスが開始されるまで待ちます。


このようなものが表示されるはずです。

aws バージョン 2 の結果をダウンロードしている AWS EC2 仮想サーバー インスタンスのオンライン ターミナルのスクリーンショット


次に、このコマンドを実行して、awscli バージョン 2 アーカイブを解凍する必要があります。

 unzip awscliv2.zip


3 番目に、このコマンドを実行して awscli バージョン 2 をインストールする必要があります。

 sudo ./aws/install


次に、Kubernetes EC2 仮想サーバー インスタンスのオンライン ターミナルをリロードします。


次に、このコマンドを使用して AWS のバージョンを確認します。

 aws --version


aws cli に aws-cli/2 があることがわかります。

AWS EC2 仮想サーバー インスタンスのオンライン ターミナルと aws バージョン コマンドの結果のスクリーンショット


ステップ 6: kubectl をインストールする

Kubectl は、基盤となるインフラストラクチャに関係なく、Kubernetes クラスターと対話するための基本的なコマンドライン ツールです。これにより、Kubernetes クラスター内でリソースの管理、アプリケーションのデプロイ、ネットワークの構成、ログへのアクセス、その他のさまざまなタスクの実行が可能になります。


次に、Kubernetes クラスターとさらに対話するために、kubectl コマンドライン ツールをインストールする必要があります。そのためには、 「AWS」「ドキュメント」「Amazon EKS」「ユーザーガイド」 →「 kubectl のインストールまたは更新」「Linux」に移動する必要があります。


または、リンクhttps://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.htmlをクリックするだけです。


AWS EKS ユーザーガイドのスクリーンショット



まず、このコマンドを実行してkubectlをダウンロードします。

 curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl


ダウンロードプロセスを待ちます。


このようなものが表示されます。

kubectl の結果をダウンロードしている AWS EC2 仮想サーバー インスタンスのオンライン ターミナルのスクリーンショット


kubectlに権限を与えます。

 chmod +x kubectl


kubectl を /usr/local/bin フォルダーに移動します。

 sudo mv kubectl /usr/local/bin


kubectlのバージョンを確認してください。

 kubectl version --output=yaml


ステップ 7: eksctl をインストールする

Eksctlは、特に Amazon EKS サービスに合わせて調整された別のコマンドライン ツールです。 Eksctl を使用すると、AWS EKS クラスターの作成、ノード グループの管理、および AWS インフラストラクチャのセットアップと管理の多くを抽象化することによる IAM ロールや他の AWS サービスとの統合など、EKS に固有のタスクを実行できます。


コマンドを実行してkubectlをダウンロードします。

 curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp


eksctl を /usr/local/bin フォルダーに移動します。

 sudo mv /tmp/eksctl /usr/local/bin


eksctlのバージョンを確認してください。

 eksctl version


バージョンが表示されるはずです

eksctl バージョンを使用した AWS EC2 仮想サーバー インスタンスのオンライン ターミナルのスクリーンショット


ステップ 8: eksctl の IAM ロールを作成する

IAM ロールを作成し、 「KubernetesServer」 EC2 インスタンスにアタッチする必要があります。

これを行うには、検索ボックスで EC2 を見つける必要があります。


https://us-east-1.console.aws.amazon.com/ec2 / のリンクをクリックして、EC2 仮想サーバーを選択します。

「IAM」へのポインタが表示された AWS Web ページのスクリーンショット


IAMダッシュボードロールに移動します。

「IAM ロール」へのポインターが表示された AWS Web ページのスクリーンショット


IAMロール Web ページで[ロールの作成]ボタンをクリックします。


次に、 「AWS サービス」、「EC2」を選択します。そして「次へ」ボタンをクリックします。

「IAM ロール構成」へのポインターが表示された AWS Web ページのスクリーンショット


次に、検索ボックスで「AmazonEC2FullAccess」「AmazonEC2FullAccess」「IAMFullAccess」「AWSCloudFormationFullAccess」を見つけて、 「アクセス許可の追加」ボタンをクリックします。


そして、 「次へ」ボタンをクリックします。

AdministratorAccess 権限へのポインターが表示された AWS Web ページのスクリーンショット

次に、 「ロール名」入力に「Eksctl_Role」と入力します。

そして「ロールの作成」ボタンをクリックします。

権限ロール設定へのポインターが表示された AWS Web ページのスクリーンショット


最後にロールが作成されます。


ステップ 9: IAM ロールを eksctl に接続する

AWS EC2 インスタンスの Web ページに移動します。 「KuberbetesServer」を選択します。次に、 「アクション」「セキュリティ」「IAM ロールの変更」をクリックします。


KubernetesServer Security ボタンへのポインターが表示された AWS Web ページのスクリーンショット



「Eksctl_Role」を選択し、 「IAM ロールを更新」ボタンをクリックします。


Elsctl_Role IAM ロールへのポインターが表示された AWS Web ページのスクリーンショット


これで、IAM ロールが「EKS_Server」および eksctl ツールに接続されました。

ステップ 10: eksctl クラスターを作成する


Amazon EKS (Elastic Kubernetes Service)クラスターは、AWS 上の管理された Kubernetes 環境であり、セットアップ、スケーリング、メンテナンスなどの複雑なインフラストラクチャタスクを自動化します。これは、コンテナ化されたアプリケーションのデプロイ、管理、スケーリング、運用の合理化、開発者が基盤となるインフラストラクチャの管理ではなくコーディングに集中できるようにするための、効率的で安全な AWS に最適化されたプラットフォームを提供するため、不可欠です。


次に、EKS クラスターをセットアップします。


これを実現するには、次の手順に従います。


  1. 次のコマンドを特定の情報に変更します。
 eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>


例えば私の場合はこんな感じです。

 eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro


  1. 変更したコマンドを実行し、クラスターの作成プロセスが完了するまで辛抱強く待ちます。 AWS CloudFormation Web ページでは、EKS クラスターのステータスが「作成中」と表示されていることがわかります。


AWS CloudFormation へのポインターが表示された AWS Web ページのスクリーンショット。EKS クラスターの「作成中」ステータスが表示されます。


クラスターの作成手順には通常、約 20 分かかります。完了すると、ターミナルにプロセスの結果が表示されます。


EKS クラスターの作成結果が表示される AWS EC2 ターミナルへのポインターが表示された AWS Web ページのスクリーンショット


さらに、AWS CloudFormation ウェブページでEKS クラスターの作成が成功したことを確認できます。


EKS クラスターの作成結果を確認できる AWS CloudFormation へのポインターを含む AWS Web ページのスクリーンショット


ステップ 11: Kubernetes デプロイメント yaml ファイルを作成する

Kubernetes デプロイメント YAML ファイルは、 Kubernetes クラスター内の特定のアプリケーションまたはサービスを管理および保守する方法を定義する YAML 形式で記述された構成スクリプトです。これには、アプリケーションを実行しているコンテナーのデプロイ、スケーリング、更新、および監視を調整するための手順がカプセル化されています。このファイルには、コンテナー イメージ、必要なレプリカ数、リソース制限、環境変数、ネットワーク設定などの詳細が含まれます。 Kubernetes クラスターに適用すると、デプロイメント YAML ファイルはアプリケーションの望ましい状態を確保し、コンテナーの作成、スケーリング、リカバリを自動的に管理して、望ましいレベルの可用性と信頼性を維持します。


これで、Kubernetes クラスター、eksctl、kubectl がインストールおよび構成されたので、Kubernetes デプロイメント yaml ファイルを作成できます。


次のコマンドを実行することでこれを行うことができます。

 touch hello-app-deployment.yaml


次に、次のコマンドを実行してこのファイルを編集します。

 vi hello-app-deployment.yaml


このコンテンツを hello-app-deployment.yaml に追加します。

 apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1


これで hello-app-deployment.yaml が作成され、使用できるようになりました。


ステップ 12: Kubernetes Service yaml ファイルを作成する

Kubernetes Service YAML ファイルは、ポッドのセットのネットワーク抽象化を定義する YAML 形式で記述された構成スクリプトであり、Kubernetes クラスター内で一貫してポッドにアクセスできるようにします。このファイルは、他のサービスまたは外部クライアントによるサービスの検出、アクセス、および負荷分散の方法を概説します。これには、サービス タイプ (ClusterIP、NodePort、LoadBalancer)、ポート番号、ポッドを識別するセレクターなどの仕様が含まれます。 Kubernetes クラスターに適用すると、サービス YAML ファイルは、トラフィックを適切なポッドにルーティングする仮想 IP とポートを作成し、基礎となるポッドの変更を抽象化し、通信に安定したエンドポイントを提供して、シームレスな接続と動的なスケーリングを可能にします。


Kubernetes クラスター、eksctl、kubectl がインストールおよび構成されているので、Kubernetes Service yaml ファイルを作成できます。


これを行うには、次のコマンドを実行して Kubernetes Service yaml ファイルを作成する必要があります。

 touch hello-app-service.yaml


次に、次のコマンドを実行してこのファイルを編集します。

 vi hello-app-service.yaml


このコンテンツを hello-app-deployment.yaml に追加します。

 apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer

これで hello-app-service.yaml が作成され、使用できるようになりました。


ステップ 13: kubectl を使用して Kubernetes クラスターをテストする

Kubernetes EKS クラスターが正常にインストールおよび構成され、Kubernetes サービスとデプロイメント ファイルの準備ができたら、kubectl コマンドを使用してテストを行ってみましょう。


  1. デプロイメントを適用します。

    次のコマンドを使用して、デプロイメント構成を適用します。

 kubectl apply -f hello-app-deployment.yaml

これにより、指定された数のレプリカとローリング アップデート戦略を使用したデプロイメントが作成され、アプリケーションの可用性と管理性が確保されます。


2. サービスを適用します。

次に、サービス構成を適用します。

 kubectl apply -f hello-app-service.yaml

これにより、LoadBalancer タイプのサービスがセットアップされ、アプリケーションがインターネットに公開されます。

LoadBalancer がプロビジョニングされ、外部 IP アドレスが取得されるまでに少し時間がかかる場合があることに注意してください。


  1. ロードバランサーのステータスを確認します。

    を使用してサービスのステータスを監視します。

 kubectl get service zufarexplainedit-hello-app-service

外部 IP が割り当てられると、アプリケーションにアクセスする準備がほぼ整います。


  1. アプリケーションにアクセスします。

    Web ブラウザを使用して、割り当てられた外部 IP アドレスの後に「:8080」を入力します。しばらくすると、ページが読み込まれ、「HelloWorld」メッセージが表示されます。初期読み込みには数秒かかる場合があることに注意してください。


    Hello アプリの Web ページのスクリーンショット


kubectl コマンドを使用したクリーンアップ

Kubernetes 環境内のリソースを整理する必要がある場合は、次の kubectl コマンドを使用して、デプロイメント、ポッド、サービスを効果的に削除できます。


1. すべてのデプロイメントを削除します

すべてのデプロイメントを削除するには、次のコマンドを使用できます。

 kubectl delete deployments --all

このアクションにより、クラスター内にアクティブなデプロイメント インスタンスが残らないようになります。


2. すべてのポッドを削除します

デプロイメントによって管理されているかどうかに関係なく、すべてのポッドを削除する必要がある場合は、次のコマンドを使用できます。

 kubectl delete pods --all

ポッドをクリアすると、クラスターの状態をリセットしたり、新しいデプロイメントの準備をしたりするのに役立ちます。


3. すべてのサービスを削除します

アプリケーションをネットワークに公開するサービスをクリーンアップするには、次のコマンドを使用できます。

 kubectl delete services --all

サービスの削除にはダウンタイムが伴う可能性があるため、続行する前にその影響を考慮してください。

Amazon EKS クラスターの削除

eksctlで作成された指定された Amazon EKS クラスターに関連付けられたすべてのリソース (ワーカーノード、ネットワークコンポーネント、その他のリソースを含む) を削除するには、次のコマンドを使用できます。

 eksctl delete cluster --name {your cluster name} --region {your region name}

私にとってはそうです。

 eksctl delete cluster --name zufarexplainedit --region eu-north-1

クラスターを停止すると元に戻せなくなり、データが失われる可能性があるため、必ずクラスターを停止してください。



ステップ 14: 「KubernetesServer」AWS EC2 仮想サーバー インスタンスに新しいユーザーを追加して構成する

次に、新しいansible-adminユーザーを「KubernetesServer」 AWS EC2 仮想サーバー インスタンスに追加しましょう。


これを行うには、このコマンドを使用します。

 sudo useradd ansible-admin


次に、 ansible-adminユーザーのパスワードを設定します。

 sudo passwd ansible-admin


また、 sudoersファイルを編集してユーザー権限を構成する必要があります。

 sudo visudo


このsudoersファイルに「ansible-admin ALL=(ALL) ALL」を追加します。

管理者権限へのポインタが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


また、 /etc/ssh/sshd_configファイルを編集して PasswordAuthentication を有効にする必要があります。

 sudo vi /etc/ssh/sshd_config 


管理設定へのポインターが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


次に、これらの変更を行うためにサービスをリロードする必要があります。

 sudo service sshd reload


このコマンドを実行すると、次のように表示されます。

sshd リロード結果へのポインターが表示された AWS EC2 仮想サーバー インスタンス ターミナルのスクリーンショット


これで、このコマンドを使用して、以降のすべてのコマンドに sudo を追加することを避けることができます。

 sudo su - ansible-admin


ステップ 15: AWS EC2 仮想サーバーインスタンスでキーを生成する

この記事では、 K8s EC2 仮想サーバー インスタンスなどのリモート サーバーをさらに管理することを計画しています。このため、SSH キーを設定する必要があります。


 ssh-keygen


このコマンドを実行すると、次のように表示されます。

ssh-keygen の結果へのポインターが表示された AWS EC2 仮想サーバー インスタンスのターミナルのスクリーンショット


これで SSH キーが生成され、使用できるようになりました。

ステップ 16: Ansible のローカルホストへのパスワードレス SSH 認証を構成する

Ansible は、リモート サーバー上のタスクを自動化するように設計されています。パスワードレス SSH 認証により、Ansible は手動でパスワードを入力しなくてもこれらのサーバーに接続できるようになります。

このコマンドを実行して、ansible-admin ユーザーの SSH キーを使用して、自分のコンピューターから別のコンピューター (IP アドレス 172.31.34.41 のコンピューターなど) への安全な接続を作成します。


 sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}


私の場合はこんな感じです。

 sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected] 


パスワードなしの ssh 認証のインストールが成功した結果のスクリーンショット


「追加されたキーの数: 1」が表示されます。パスワードなしの SSH 認証のインストールが正常に完了したことを意味します。


ステップ 17: AnsibleServer EC2 インスタンスで Ansible ホストを構成する

Ansible Playbook を実行するときは、それを実行するホストを指定します。このステップでは、KubernetesServer EC2 インスタンスのホストを指定する必要があります。これを行うには、「 [モジュール 6]: Ansible」で実行したのと同じ手順を繰り返す必要があります。


次のコマンドを実行して、KubernetesServer EC2 インスタンスのホストを調べてみましょう。

 sudo ifconfig 


「ifconfig」ファイルのスクリーンショット


KubernetesServer EC2 インスタンス ホストを見つけたら、次のコマンドを実行して、それを Ansible hosts ファイルに追加できます。

 sudo vi /etc/ansible/hosts 


ansible ホストと kubernetes ホストを含む「hosts」ファイルのスクリーンショット


「[kubernetes]」を参照として追加することもできます

ステップ 18: Kubernetes タスク用の新しい Ansible プレイブックを作成する

Kubernetes のセットアップがすべて完了し、準備が整ったので、パイプライン用の Kubernetes タスクを含む新しい Ansible プレイブックを作成できます。この Playbook により、Ansible は kubectl コマンドを使用して Kubernetes クラスター上でアプリを実行できるようになります。


その方法は次のとおりです。


  1. まず、新しい Ansible Playbook ファイルを作成します。このコマンドを使用するだけです。
 touch kubernetes-hello-app.yml


  1. 次に、新しく作成したhello-app.ymlファイルを編集します。このコマンドを使用して編集用に開きます。
 vi kubernetes-hello-app.yml


  1. ファイル内に次のように入力します。
 --- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app

Kubernetes タスク用の Ansible プレイブックを使用する準備ができました。


ステップ 19: Kubernetes タスク用の新しい Ansible プレイブックを Jenkins と統合する

Kubernetes、Ansible、および Kubernetes タスク用の Ansible プレイブックがすべてセットアップされ、準備が整ったので、これを Jenkins と統合できます。


  1. 「JenkinsServer」→「Jenkins ダッシュボード」→「新しい項目」に移動します。

  2. 「CD-Job」という名前で新しい Jenkins Freestyle プロジェクトを作成します。


    新しい Jenkins フリースタイル プロジェクト「CD-Job」のスクリーンショット


  3. 「OK」ボタンをクリックします。

  4. 「ビルド後のアクション」セクションに進みます。

  5. 「ビルド後のアクションを追加」ボタンをクリックします。

  6. 「SSH 経由でビルド アーティファクトを送信する」オプションを選択します。

  7. SSH サーバーとして「AnsibleServer」を選択します。

  8. このコマンドを「exec command」入力に追加します。


 sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml


  1. 「適用」ボタンと「保存」ボタンをクリックします。

  2. Jenkins ダッシュボード → 「CI_CD_Pipeline」 → 「構成」 → 「ビルド後のアクション」セクションに移動します。

  3. 「ビルド後のアクションを追加」ボタンをクリックします。

  4. 「他のプロジェクトをビルドする」オプションを選択します。

  5. 「他のプロジェクトのビルド」セクションに進みます。

  6. 「ビルドが安定している場合にのみトリガーする」オプションを選択します。

  7. 「ビルドするプロジェクト」入力に「CD ジョブ」を追加します。



    「他のプロジェクトのビルド」セクションのスクリーンショット


  8. 「適用」ボタンと「保存」ボタンをクリックします。


これで、パイプラインが完全に完成し、使用できる状態になったと考えることができます。


ステップ 20: 最終パイプライン バージョンのテスト

ここで、パイプラインの最終バージョンをテストします。


Jenkins → Jenkins ダッシュボード → 「CI_CD_Pipeline」に移動します。


「今すぐビルド」ボタンをクリックします。


結果を確認するには、ビルド コンソールのログを確認してください。


ビルドコンソールログのスクリーンショット


ビルド コンソール ログで「CD ジョブ」がトリガーされ、最終ステータスが SUCCESS とマークされていることがわかります。

4

さらに、Dockerhub にアクセスして、新しい Docker イメージの追加を確認できます。

最後に、Web ブラウザを使用してアプリケーションにアクセスできます。割り当てられた外部 IP アドレスに「:8080」を続けて入力します。しばらくすると、ページが読み込まれ、「HelloWorld」メッセージが表示されます。


結論

この最新の CI/CD パイプラインのセットアップはうまくいきました。

あなたは素晴らしい仕事をしました、そしてあなたは本物のヒーローです!


ご尽力ありがとうございました!




著者について

Zufar Sunagatov は、最新のソフトウェア システムの設計に情熱を注ぐ経験豊富なシニア ソフトウェア エンジニアです。


ズファル・スナガトフ