Path : 2121/build/docker
* UTM バージョン および Rocky Linux イメージはk8s環境構築と同じ。
k8s環境構築(MacOS)
1. Rocky Linux ISO ダウンロード (9.2 arm64 バージョン)- Download : https://dl.rockylinux.org/vault/rocky/9.2/isos/aarch64/Rocky-9.2-aarch64-minimal.iso- Site : https://rockylinux.org 2-1. UTM (4.6.5)- Downlaod : https://github.com/utmapp/UTM/rel
tokyoant.tistory.com
1.インストール
1.1 VMの初期設定 - 「Create a New Virtual Machine」を選択
- Start : Virtualize
- Operating System : Linux
- Linux : Boot ISO Image [Browse..] -> Rocky ISO 파일 선택
- Hardware : Memory : 2048 MB, CPU Cores : 2
- Size : 32 GB
- Shared Directory : 설정 안함
- Summary : Name : cicd-server
▶ Network
- Network > [V] Show Advanced Settings > Guest Network : 192.168.56.0/24 入力
1.2 作成したVMを起動後、Rocky Linuxの初期設定
-UTM画面 > cicd-serverを選択 > 実行(▶)ボタンをクリック > Rocky Linux 9.2 をインストール
1.言語:韓国語(大韓民国)
2.ユーザー設定
- rootパスワード(R):各自のrootパスワードを入力
- rootアカウントをロック:チェックを外す
- rootがパスワードでSSHログインできるようにする:チェック
3.インストール先(D)
- ストレージ構成:自動設定(A)[チェック]を確認後、[完了(D)]をクリック
4.ネットワークおよびホスト名
- ホスト名(H):cicd-server と入力後、[適用(A)]をクリック
- イーサネット(enp0s1):[設定(C)…]をクリック
1)[IPv4設定]タブをクリック
2)Method:手動
3)アドレス:[Add]をクリック後 → アドレス(192.168.56.20)、ネットマスク(255.255.255.0)、ゲートウェイ(192.168.56.1)を入力
-[完了(D)]をクリック
5.[インストール開始(B)]をクリック
6.インストール完了メッセージを確認後、[再起動]をクリック
1.3 Rocky Linuxの起動
- UTM画面の最下部にあるCD/DVDをクリックし、「Clear」をクリック(選択されているISOイメージが削除されます)
- 「Install Rocky Linux 9.2」の待機画面上部で[電源ボタン]を押してシャットダウンし、
[▶]ボタンを押してVMを起動する - UTMで提供されるコンソール画面は最小化する(コピー&ペーストがうまくできないため)
1.4 CI/CDサーバに接続 (Mac terminal)
$ ssh root@192.168.56.20
The authenticity of host '192.168.56.20 (192.168.56.20)' can't be established.
ED25519 key fingerprint is SHA256:+grKMOsgQHDF0lTTZTD65khFhnk5Q56wvNSFV4+NsnA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[root@192.168.56.20's password: (パスワード)
1.5 CI/CD Server インストール (arm64)
echo '======== [1] Rocky Linux 基本設定 ========'
echo '======== [1-1] パッケージ更新 ========'
# 講義と同一の実習環境を維持するため、Linuxのアップデートは行わないでください!
# yum -y update # (x)
echo '======== [1-2] タイムゾーン設定 ========'
timedatectl set-timezone Asia/Seoul
echo '======== [1-3] ファイアウォール無効化 ========'
systemctl stop firewalld && systemctl disable firewalld
echo '======== [2] Kubectl インストール ========'
echo '======== [2-1] リポジトリ設定 ========'
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
echo '======== [2-2] Kubectl インストール ========'
yum install -y kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
echo '======== [3] Docker インストール ========'
# https://download.docker.com/linux/centos/8/x86_64/stable/Packages/ リポジトリパス
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-3:23.0.6-1.el9.aarch64 docker-ce-cli-1:23.0.6-1.el9.aarch64 containerd.io-1.6.21-3.1.el9.aarch64
systemctl daemon-reload
systemctl enable --now docker
echo '======== [4] OpenJDK インストール ========'
yum install -y java-17-openjdk
echo '======== [5] Gradle インストール ========'
yum -y install wget unzip
wget https://services.gradle.org/distributions/gradle-7.6.1-bin.zip -P ~/
unzip -d /opt/gradle ~/gradle-*.zip
cat <<EOF | tee /etc/profile.d/gradle.sh
export GRADLE_HOME=/opt/gradle/gradle-7.6.1
export PATH=/opt/gradle/gradle-7.6.1/bin:${PATH}
EOF
chmod +x /etc/profile.d/gradle.sh
source /etc/profile.d/gradle.sh
echo '======== [6] Git インストール ========'
# 従来は git-2.43.0-1.el8 バージョンを固定していましたが、リポジトリに最新バージョンのみが登録されているため修正
yum install -y git
echo '======== [7] Jenkins インストール ========'
wget https://archives.jenkins.io/redhat-stable/jenkins-2.479.3-1.1.noarch.rpm
rpm -ivh jenkins-2.479.3-1.1.noarch.rpm
systemctl enable jenkins
systemctl start jenkins
# Jenkins インストール後、OpenSSL を最新バージョンへアップデート
yum update -y openssh-server openssh-clients openssl openssl-libs
systemctl restart sshd
2.Jenkins初期設定
-2.1 CI/CD サーバで初期パスワードを確認
# cat /var/lib/jenkins/secrets/initialAdminPassword
- 2.2 Jenkins DashBoardに接続し、パスワード入力
# http://192.168.56.20:8080/login

- 2.3 pluginインストール


※エラー発生
- 事象: プラグインのインストール失敗(依存関係およびバージョン不整合)
- 原因: Jenkins本体のバージョンに対し、プラグインの要求バージョンが新しすぎたため
- 対応: Jenkins本体を最新プラグインと互換性のあるLTSバージョン(2.492.1等)へアップグレード
- 結果: インストールおよび依存関係の問題が正常に解決
- 2.4 Adminユーザー作成

- 3.4 [Save and Finish] -> [Start using Jenkins]

3.グローバル設定
Jenkinsのビルドで使用するOpenJDKおよびGradleの設定。
- 3.1 [Dashboard] > [Jenkins 管理] クリック

- 3.2 JDK設定
// JDK17 パス確認
# find / -name java | grep java-17-openjdk

※ 必ず /bin/java の部分は除外してコピーすること。
▶ JAVA_HOMEに入力
# Name : jdk-17
# JAVA_HOME :上記の結果

- 3.3 Gradle 設定
# Name : gradle-7.6.1
# GRADLE_HOME : /opt/gradle/gradle-7.6.1

- 3.4 [Save]
4.Docker使用設定
# JenkinsにDocker使用権限を付与
[root@cicd-server ~]# chmod 666 /var/run/docker.sock
[root@cicd-server ~]# usermod -aG docker jenkins
# Jenkinsユーザーに切り替え
[root@cicd-server ~]# su - jenkins -s /bin/bash
# 自身のDocker Hubへログイン
[jenkins@cicd-server ~]$ docker login
Username:
Password:

JenkinsのDocker操作権限付与
1. このコマンドを実行すべき理由
Linuxシステムにおいて、/var/run/docker.sock ファイルはデフォルトで root ユーザーまたは docker グループに属するユーザーのみがアクセスできる。Jenkinsは通常 jenkins という専用の一般ユーザーアカウントで実行されるため、権한設定を行わないとDockerエンジンにコマンドを送信できず、「Permission Denied」 エラーが発生する。
2. コマンドごとの動作原理
chmod 666 /var/run/docker.sock
- 原理: Dockerデーモンと通信するためのUnixドメインソケットファイルの権限を、**「誰でも読み書き可能(666)」**に開放する。
- 結果: Jenkinsユーザーだけでなく、システム内の全ユーザーがDockerを操作できるようになる。
- リスク: セキュリティ上、非常に脆弱である。外部の攻撃者にアカウントを一つでも乗っ取られた場合、サーバー全体のルート権限を奪取されるのと同等である。
usermod -aG docker jenkins
- 原理: jenkins ユーザーを docker という名前のユーザーグループに追加(-aG)する。
- 結果: /var/run/docker.sock ファイルはデフォルトで docker グループに所有権があるため、Jenkinsがグループの一員として正当な権限を付与される。
- 推奨事項: 実무においては、666で全開放するよりも、この方法を使用する方が遥かに安全である。
3. 動作プロセス(Workflow)
- コマンド送信: Jenkinsパイプラインから docker build コマンドを実行する。
- ソケットへのアクセス: Dockerクライアントが /var/run/docker.sock を通じてDockerデーモン(サーバー)にコマンドを転送しようとする。
- 権限確認: カーネルが、当該ユーザーにソケットファイルを読み書きする権限があるかを確認する。(この際、上記のコマンドが効果を発揮する。)
- 実行: 権限が確認されると、Dockerデーモンがリクエストを受け入れ、コンテナの生成・ビルドを行う。
5.マスターノードから証明書をコピー
4-1.CI/CDサーバーでSCPコマンドを使用し、証明書を取得する
- 該当作業を行う前に、マスターノードが正常に稼働しているか確認すること。
- rootユーザーではなく、Jenkinsユーザーの状態で作業を行うこと。
# ディレクトリ作成
[jenkins@cicd-server ~]$ mkdir ~/.kube
# マスターノードから認証情報を取得
[jenkins@cicd-server ~]$ scp root@192.168.56.30:/root/.kube/config ~/.kube/
▶ 証明書の取得実行後、[fingerprint] には「yes」と入力し、[password] には自身のパスワードを入力すること。

▶ 動作確認

5.ビルド・デプロイパイプラインのためのスクリプト作成および実行

- 5.1 Build- gradle
5.1.1 project生成
item name : 2121-source-build

5.1.2 Dashboard > 2121-source-build > Configuration > General > GitHub project 選択
Project url : https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester/

5.1.3 ソースコード管理
Repository URL : https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester.git
Branch Specifier : */main

5.1.4 Build Steps > Invoke Gradle script
Gradle Version : gradle-7.6.1
Tasks : clean build

5.1.5 [保存]
5.1.6 Dashboard > 2121-source-build > Buildおよびログ確認

9.1.7 Jarファイル確認
[jenkins@cicd-server ~]$ ll /var/lib/jenkins/workspace/2121-source-build/build/libs

- 5.2 コンテナbuild - docker

5.2.1 project生成
item name : 2121-container-build

5.2.2 Dashboard > 2121-container-build > Configuration > General > GitHub project 選択
Project url : https://github.com/<Github-Uesrname>/kubernetes-anotherclass-sprint2/

5.2.3 ソースコード管理
Repository URL : https://github.com/<Github-Uesrname>/kubernetes-anotherclass-sprint2.git
Branch Specifier : */main

5.2.3 ソースコード管理> Additional Behavioures > Sparse Checkout paths
Path : 2121/build/docker

5.2.4 Build Steps > Execute shell
# jar ファイルコピー
cp /var/lib/jenkins/workspace/2121-source-build/build/libs/app-0.0.1-SNAPSHOT.jar ./2121/build/docker/app-0.0.1-SNAPSHOT.jar
# docker build
docker build -t <DockerHub_Username>/api-tester:v1.0.0 ./2121/build/docker
docker push <DockerHub_Username>/api-tester:v1.0.0

5.2.5 [保存]
5.2.6 Dashboard > 2121-container-build > Buildおよびログ確認

* Dockerfile 内容確認
cat /var/lib/jenkins/workspace/2121-container-build/2121/build/docker/Dockerfile

- 5.3 配布 - kubectl

5.3.1 Project生成(既存Projectコピー)
item name : 2121-deploy
Copy from : 2121-container-build

5.3.2 ソースコード管理 > Additional Behavioures > Sparse Checkout paths
Path : 2121/deploy/k8s

5.3.3 Build Steps > Execute shell
kubectl apply -f ./2121/deploy/k8s/namespace.yaml
kubectl apply -f ./2121/deploy/k8s/pv.yaml
kubectl apply -f ./2121/deploy/k8s/pvc.yaml
kubectl apply -f ./2121/deploy/k8s/configmap.yaml
kubectl apply -f ./2121/deploy/k8s/secret.yaml
kubectl apply -f ./2121/deploy/k8s/service.yaml
kubectl apply -f ./2121/deploy/k8s/hpa.yaml
kubectl apply -f ./2121/deploy/k8s/deployment.yaml

5.3.4 [保存]
5.3.5 Dashboard > 2121-deploy > Buildおよびログ確認
5.4 Dashboard確認
現象 デプロイ自体は正常に完了したが、コンテナが起動しない問題が発生。

原因 Podのイベントログを確認した結果、マウントパス用のボリュームが存在しないため。

対応
マウントパス用のディレクトリを作成後、デプロイを再起動。



'k8s > archive_2' 카테고리의 다른 글
| Jenkins Pipeline(Blue Green)構築 (0) | 2026.04.21 |
|---|---|
| デプロイの前に必ず確認すべきこと (0) | 2026.04.20 |
| Probe,Service,Secret,HPA (0) | 2026.04.18 |
| PV/PVC、Deployment、Service (0) | 2026.04.16 |
| Configmap、Secret (0) | 2026.04.15 |