inflearn logo
知識共有
inflearn logo

Jenkinsを利用したCI/CDパイプラインの構築

本講義は、クラウドネイティブアプリケーションを構成する4つの核心要素(MSA、CI/CD、DevOps、Container)の一つであるCI(Continuous Integration、継続的インテグレーション)とCD(Continuous Deployment、継続的デプロイメント)パイプラインについて扱う講義です。本講義を通じて、CI/CDツールであるJenkinsを利用してローカル環境とクラウド環境に自分だけの自動化パイプラインを構築し、デプロイするために必要なプロセスを理解し、実習することができます。

難易度 初級

受講期間 無制限

Jenkins
Jenkins
CI/CD
CI/CD
Ansible
Ansible
Kubernetes
Kubernetes
SonarQube
SonarQube
Jenkins
Jenkins
CI/CD
CI/CD
Ansible
Ansible
Kubernetes
Kubernetes
SonarQube
SonarQube

お知らせ

5 件

  • kenneth님의 프로필 이미지

    こんにちは、離島院です。

    「Jenkinsを使用したCI/CD Pipelineの構築」講義と「DevOpsのためのDocker仮想化技術(Private Harbor Registry)」講義では、所望のDockerコンテナ実行のためにDinD(Docker in Docker)方式で実践環境を構築し、例を実行しています。

    ただし、WindowsとMacOS環境がそれぞれ異なり、MacOSの場合、Intel chip、Apple chipによって設定しなければならないドッカーイメージが異なります。この画像では、SSHサーバーとDockerエンジンがインストールされているように構成し、実習の際、複数のドッカーコンテナが必要な場合に使いやすくするように構成したが、受講生の方々の環境に合わせて製作するには無理があるのも事実です。それでも、できるだけ一般的な環境では無理なく実習できるようにドッカーイメージを更新しようとしています。

    最近、MacOS Apple chip で使用する docker-server:m1 イメージを利用して、実習時、下記のエラーなどで実習できないエラーが確認されました。

     exec /docker-entrypoint.sh: invalid argument

    複数のパスで確認して修正もしてみましたが、MacOS Apple chipで使用するarm64アーキテクチャにDockerコンテナにドッカーエンジンをインストールして使用するDinD方式でエラーが発生するようです。 (エラーメッセージやログがないため原因を探すには限界がありますね)

    そのイメージでは解決が難しいと判断され、以下のようにUbuntuベースにSSH + Dockerエンジンをインストールしたバージョンを再ビルドして配布しました。

    https://hub.docker.com/repository/docker/edowon0623/docker-server/general

    上記で発生した問題等は全て解消されたことを確認しました。 Ubuntnでは、Dockerサービスを起動するために、以下のコマンドを先に実行してください。

     service start docker

    今後も、DinDの問題など、実習に関連する問題が確認されたように、更新された実践環境を提供します。

    来週は連休ですね。私個人的に多事多難した2024年でしたが、新しい心で新しい一年を始めるようにします。今年は、より良い講義で頻繁に訪れましょう。明けましておめでとうございます。

    ありがとうございます。

    0
  • kenneth님의 프로필 이미지

    ** ansible-serverからwindowsのK8sへのテスト時のリファレンス

    ansible-serverを利用してWindowsにインストールしたdocker-desktopのKubernetesに接続してテストを行う場合は、以下の内容を確認してください。

    ansible-serverでssh-copy-idコマンドを利用してwindowsにid_rsa.pubキーファイルの内容をコピーしようとすると、通常のキーファイルの内容ではなく、ECHO〜という文字列がシャベルになってしまう場合があります。この場合は、ssh-copy-idコマンドの代わりに、対応するid_rsa.pubキーファイルの内容を直接コピーして使用する必要があります。何らかの方法を使用した結果として、 windows の .ssh フォルダにある authorized_keys ファイルに ansible-server で生成したid_rsa.pubキーファイルの内容が保存されればよい。この時の注意点は、ansible-serverにログインしたアカウントとwindowsサーバーにログインするアカウントとが一致しなければならず、そのアカウントはwindowsで管理者権限を持っている必要があり、dockerやkubectlなどの命令を使用する際にエラーが発生しないではありません。要約すると、Windowsにログインするアカウントと同じアカウント名でansible-serverのアカウントを作成した後、キーをコピーする必要があります。このような過程が煩わしい場合は、ssh接続時に認証なしで接続するためにssh-copy-idコマンドを使用するので、この部分はそのままパスワードを入力しながら進行し、ansible-playbookではansibleのhostsファイルにwindows接続情報を記録するご使用いただくと、playbookの実行時には問題なく進行できます。

    以下の実行プロセスの説明を参照してください。

    • Windows OS (docker-desktop インストール、Kubernetes 実行、IP: 192.168.0.7)

    • docker-server (ドッカーコンテナ、IP: 172.17.0.3)

    • ansible-server(Dockerコンテナ、Ansibleインストール、IP:172.17.0.4)

    1. まず、ansible-serverで生成されたid_rsa.pubキーをdocker-serverにssh-copy-idコマンドを使用してコピーします。 docker-serverのキーをコピーして、sshがパスワードなしで接続されていることを確認してください。

    windows_ansible_step1.png

     

    1. ansible-serverのid_rsa.pubキーをwindowsサーバーにコピーします。 (下の画像は docker-server になっていますが、ansible-server から進んでください)。ただし、 id_rsa.pubキーを生成する際のアカウントと windows の openssh に接続するアカウントが同じでなければならず、その windows アカウントには docker や kubectl コマンドを実行できる管理者権限を持っている必要があります。このとき、ssh-copy-idコマンドを使用してid_rsa.pubキーのコピーを試みると、Windowsのauthorized_keysファイルにid_rsa.pubキーの内容がコピーされるのではなく、ECHO~という文字列がコピーされてしまう場合がありますが、このような場合は、そのキーを直接COPY-PASTE方式でWindowsのauthorized_keysファイルにコピーしてください。 (authorized_keysファイルがwindowsにない場合は、ファイルも直接作成できます)

    windows_ansible_step2.png

     

    1. id_rsa.pubキーをコピーする作業をする前に、以下の4)のようにwindowsでsshコマンドを使ってwindowsサーバーに接続されることを確認してください。 (opensshがインストールされていない場合はインストールしてください。)

    windows_ansible_step3.png

     

    1. 今回は、ansible-serverから直接sshコマンドでWindowsのopensshサーバーに接続するテストをしてみてください。

    windows_ansible_step4.png

     

    1. 上記の2で説明したように、 id_rsa.pubキーをコピーするときは、 id_rsa.pubキーをWindowsのアカウントと同じアカウントで作成する必要があります。を記録して使用することをお勧めします。とにかくsshコマンドを使用して直接接続を試みる場合よりも、ansible命令を使用して処理する場合が多いので、ssh-copy-id操作を進めることなく直接ansible hostsファイルに接続情報を保存して使用するようにします。このセクションでは、ansible_user、ansible_passwordエントリにWindowsアクセスアカウント情報(私は管理者権限を持つユーザーアカウント情報とパスワードを入力しました)を変更できます。 ansible hosts ファイル情報を完成したら、次の ansible 命令を使って ping モジュールが正常に実行されていることを確認してください。

      • ansible windows -m in_ping -u [windows アカウント]

    windows_ansible_step5.png

     

    1. ansible-playbook を実行する前に、windows に K8s の manifest ファイルが保存されている場所を確認し、kubectl コマンドを使って Kubernetes のリソースを確認してみます。以下の例では、K8sのサービスのリストを確認しており、基本的に作成されるサービス以外のユーザーが作成したサービスは見えないことを確認しています。

    windows_ansible_step6.png

     

    1. ansible-serverでplaybookファイルの内容を確認します。 windowsにコマンドを渡すので、以下の例のようにwin_commandコマンドを使用し(MacOSの場合はcommandコマンドを使用)、実行したいマニフェストファイルの場所を絶対パスとして指定します。 playbookファイルを実行して実行された結果を確認できます。

    windows_ansible_step7.png

     

    1. 最後に、windowsで実行したリソースが正常に反映されたか、kubectl命令を利用して確認してみることができます。

    windows_ansible_step8.png

     

    上記についてさらに質問がある場合は、質問掲示板に書いてください。

    問題が悩んでいた方々にお役に立てば幸いです。

    ありがとうございます。

    0
  • kenneth님의 프로필 이미지

    こんにちは、離島院です。

    「Jenkinsを利用したCI/CD Pipelineの構築」講義を進めながら、実習環境構成に苦労する方が多く、VMで環境構成を扱う部分についての講義を別途製作して共有することになりました。練習環境は、WindowsおよびMacOS(Intell chip)ユーザーの方が従来のDocker+SSH環境ではなく、VirtualBoxを利用した環境でVMを構成してみることができるようにしました。 VMにインストールされたDockerを利用して、少しでも簡単に実習環境を構成しましたので、参考にしてください。

    ありがとうございます。

    0
  • kenneth님의 프로필 이미지

    こんにちは、離島院です。

    まず、講義に関心を持ってくださった方々に感謝の挨拶をいたします。

    この講義は、実践が基本的に一緒になるべき講義です。特にJenkinsやTomcatやDockerサーバーは直接インストールして練習してみることをお勧めします。

    残念ながら、一部の受講生の方(特に、Windows)が実習を進めるために必要な環境構築に困難があると文を残していただきました。私は関連リソースとスクリプトを共有しましたが、解決できない受講生の方には申し訳ありません。

    先に共有していただいた、質問回答および追加映像などを通じてWindows+SSH+Dokcer環境での実習ガイドを提供していただきましたが、追加して確認された事項があり共有します。

    • Windows)SSHサーバー(with docker)実行命令(方法1)

      • docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:latest /usr /sbin/init

    • Windows)SSHサーバー(with docker)実行命令(方法2、上記の命令で実行されない場合)

      • docker run -itd --name docker-server -p 10022:22 -e container=docker --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v / var/run/docker.sock:/var/run/docker.sock edowon0623/docker:latest /usr/sbin/init

    私たちがテストした一部のWindows PCでは、以下の実習方法がすべて正常に動作していましたが、最近購入したWindows PC(WSL2インストール)で実習1度にエラーがあることを確認しました。現在把握したエラーの原因は、WSL2でiptablesの生成過程で以下のようなエラーが発生することでした。テストしてみると、現在までは大きな問題なく実習が可能と判断され、該当イメージとDockerfile共有します。

    https://hub.docker.com/r/edowon0623/docker/tags -> docker pull edowon0623/docker:no_iptables

    https://github.com/joneconsulting/docker-files

    したがって、Windows環境でDind方式(実習スクリーブ方法1)でDockerサーボが起動されない場合は、以下のコマンドを使って実習してみてください。

    • Windows)SSHサーバー(with docker)実行命令(方法3)

      • docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/docker:no_iptables /usr /sbin/init

    もちろん、該当のDockerコンテナを起動した後に、SSH接続後、systemctl start dockerコマンドを実行していただき、Dockerサーバが起動されます。

    もう一度、講義に関心をお寄せいただきありがとうございましたら、より良いコンテンツを持って新しい講義も準備させていただきます。

    ありがとうございます。

    0
  • kenneth님의 프로필 이미지

    こんにちは、離島院です。

    Jenkinsを使用したCI / CD Piplineの構築講義でNodejsで書かれたアプリケーションをデプロイする方法について講義資料を追加しました。このコンテンツを去る9月からリクエストしましたが、多くもない分量だったにもかかわらずアップロードします。資料が遅すぎてアップロードされて申し訳ありません。

    NodejsアプリケーションをPM2というProcess Managerで起動しながら、これをDockerイメージとしてデプロイして実行するプロセスについて説明しています。不足している資料ですが、必要な方に少しでも役立つことを願って、追加の質問事項のある部分は掲示板に書いてください。最近、プロジェクトの締め切りですぐに確認できませんでしたが、できるだけ早く確認して回答させていただきます。

    https://www.inflearn.com/course/%EC%A0%A0%ED%82%A8%EC%8A%A4-ci-cd-%ED%8C%8C%EC%9D%B4%ED% 94%84%EB%9D%BC%EC%9D%B8/unit/138551

    残りの2022年一年無駄によく仕上げてください。

    ありがとうございます。

    1

¥11,092