2022. 9. 16. 15:27ใSystem ์์ ์ค/DevOps
์ด ๋ด์ฉ์ ์ธํ๋ฐ - Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ ์
๋๋ค.
ํด๋น ๋ด์ฉ์ Code ๋ด์ฉ์ ์ด ๊ณณ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
๐ ๋ชฉ์ฐจ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ์๋ํ ๋๊ตฌ์ ์ฌ์ฉ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Jenkins + Infrastructure as Code ์์ ์ฐ๋
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Jenkins + Ansible + Kubernetes ์์ ์ฐ๋
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โ - Pipeline
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โก - SonarQube
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - Advenced Jenkins ์ฌ์ฉ โข - Multi Nodes
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ์์ฉ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ฐฐํฌํ๊ธฐ
โ [DevOps] Jenkins๋ฅผ ์ด์ฉํ CI/CD Pipeline ๊ตฌ์ถ - ๋ถ๋ก
๐ AWS ํ๊ฒฝ์ ๋ฐฐํฌํ๊ธฐ
๐ฝ AWS Cloud
๐ฆ ์๊ฐ
AWS์์ VM์ ์ด์ฉํด์ ์์ ๊ฐ์ด ํ๊ฒฝ์ ๊ตฌ์ฑํด ๋ณด๋ ค๊ณ ํด์.
๐ฆ Image๋ฅผ ์ด์ฉํ์ฌ EC2 ๋ง๋ค๊ธฐ
EC2์์ EC๋ Elastic Computing์ ์ฝ์์์.
๊ฐ๋จํ๊ฒ Cloud ํ๊ฒฝ์์ ๊ตฌ๋ํ ์ ์๋ ๊ฐ์ Server๋ผ๊ณ ์๊ฐํ๋ฉด ๋์.
์ต์ด ์ฃผ๋ํ๋์ ์์ ๊ฐ์ด ๊ธฐ๋ณธ ์ง์ - ๋ฌด๋ฃ๋ก ํ์ ๊ฐ์
์ ํ์์ด์.
์ง์
์ ํ๊ฒ ๋๋ฉด ์์ ๊ฐ์ ํ๋ฉด์ด ๋ณด์ผํ
๋ฐ, ์ฌ๊ธฐ์ EC2๋ก ๋ค์ด๊ฐ๊ฒ์.
๊ทธ๋ฆฌ๊ณ , ์ผ์ชฝ์ ์ธ์คํด์ค๋ฅผ ๋๋ฌ์ค๋๋ค.
AWS Resion์ ๋ํด ์ฃผ๋ํ๋์ ์์ธ์ ์ ํํด ์ฃผ์์ด์.
๊ฐ๊ฐ์ Resion์ ๋ง๋ค์ด์ง ๋ด์ฉ๋ค์ ๊ณต์ ๊ฐ ๋์ง ์๋๋ค๋ ์ ์ ์์ผ๋ฉด ์๋๋ ๊ฒ์ด์์.
'์ธ์คํด์ค ์์'์ ๋๋ฌ์ฃผ์ธ์.
๋จผ์ ์ด๋ฆ์๋ค๊ฐ ํด๋น EC2์ ์ฉ๋๋, ์ด๋ฆ์ ์ ์ด์ฃผ์ธ์.
๋์ค์ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅํด์!
์ด ๊ณณ์ ์ฌ์ฉํ Server์ ์ค์น๋ OS๋ฅผ ๊ณ ๋ฅด๋ ๊ณณ์ด์์.
๋๋ผ์ด ๊ฑด Mac OS๋ ์ง์์ด ๋๋ค๋ ์ฌ์ค!!
์ฃผ๋ํ๋์ Amazon Linux๋ฅผ ์ด์ฉํด๋ณด๋ ค๊ณ ํด์.
๐ก ์ฐธ๊ณ ์ฌํญ
AWS ์ต์ด ๊ฐ์ ์ ํ๋ฆฌ ํฐ์ด Service๋ฅผ 80 ~ 90๊ฐ ์ ๋ ์ด์ฉ ๊ฐ๋ฅ.
EC2๋ ํ๋ฌ ๊ธฐ์ค 750์๊ฐ์ฉ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
๋จ, EC2 ์ธ์คํด์ค ๊ฐ ๋น 750์๊ฐ์ด ์๋ ๋ง๋ค์ด ๋ ผ ์ธ์คํด์ค ์ด ์ด์ฉ์๊ฐ ๊ธฐ์ค.
๋ง์ฝ 10๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ด์ฉํ๋ค๊ณ ๊ฐ์ ํ์ ๋, ๊ฐ ๋น 75์๊ฐ์ฉ ์ด์ฉ ๊ฐ๋ฅ.
์ธ์คํด์ค ์ ํ์ Hardware ์ ํ ํน์ ์ข
๋ฅ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ณ , ์ข ๋ ์ฝ๊ฒ ์ค๋ช
ํ์๋ฉด
๋ด๊ฐ ๊ฐ๊ณ ์ ํ๋ ์ปดํจํฐ์ CPU, Memory๋ฅผ ๊ณ ๋ฅด๋ ๊ณณ์ด์์.
์ฃผ๋ํ๋์ ๋ฌด๋ฃ๋ก ์ด์ฉ(t2.micro)ํ ์ ์๋ ๊ฒ์ ์ ํํ ๊ฒ์ด์์.
Key Pair๋ ์ธ์คํด์ค์ ์ ์ํ๊ธฐ ์ํ Token ํน์ ์ด๋ค ์ํธํ ๋ Key File์ด๋ผ๊ณ ๋ณด๋ฉด ์ข์ ๊ฑฐ ๊ฐ์์.
์ฃผ๋ํ๋์ ํ์ฌ Key Pair๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์๋ก ๋ง๋ค์ด ๋ณด๋๋ก ํ ๊ฒ์.
์ฃผ๋ํ๋์ ์์ ๊ฐ์ด Key Pair๋ฅผ ๋ง๋ค์ด ์ค๊ฑฐ์์.
ํ์ฌ ์ฃผ๋ํ๋์ Mac OS์์ ์์
์ ํ๊ธฐ ๋๋ฌธ์ Putty ๊ฐ์ Program์ ์ด์ฉํ์ง ์์์.
๋ง์ฝ Window ์ฌ์ฉ์ ์ค Putty๋, Xshell ๋ฑ์ ์ด์ฉํ ์์ ์ด๋ผ๋ฉด .ppk๋ฅผ ์ ํํ๋๊ฒ ์ข์ ์ ํ์ผ ์ ์์ด์.
์ด๋ ๊ฒ Key Pair๊ฐ ๋ด๋ ค๋ฐ๊ธฐ ๋์์ด์.
๋คํธ์ํฌ ์ค์ ๋ถ๋ถ์์๋ ํฌ๊ฒ ๋ง์ง๊ฒ์ ์์ง๋ง, ๋ฐฉํ๋ฒฝ์ ๋ณด์ ๊ทธ๋ฃน ์์ฑ์ด๋ผ๋ ๊ฒ์ ๊ณต๋ถํด ๋ณด์๋ฉด
ํด๋น ์ธ์คํด์ค์ ์ ์ํ ์ ์๋ Port์ IP ๋ฑ์ ๋ฑ๋กํด์ ์ธ๋ถ์ ํต์ ํ๊ฒ ํ ์ ์๋๋ก ์ค์ ํ ์ ์๋ ๋ถ๋ถ์ด์์.
์ด๋ ๋ฐฉํ๋ฒฝ์ด๋ผ๋ ํน์ฑ์ ๊ณต๋ถํ๋ฉด ๋ ์ข์์!
Storage ์ฆ, HDD๋ SDD ์ฉ๋์ ๊ณ ๋ฅด๋ ๊ณณ์ด์์.
๊ธฐ๋ณธ 8GB๋ฅผ ์ค๋ค๊ณ ํ๋๋ฐ, ์ต๋ 30GB๋ฅผ ์ด์ฉํ ์ ์๋ค๊ณ ํ๋ค์!
์ฃผ๋ํ๋์ 30GB ์ ํํ ๊ฒ์.
์ด ๊ณณ์ Default Value๋ก ๋์ด๊ฐ๊ฒ์.
์ด๋ ๊ฒ ๋ง๋ค์ด ๋ณผ๊ฒ์.
'์ธ์คํด์ค ์์' ํด๋ฆญ!
๋ค ๋ง๋ค์ด์ก์ด์.
ํน์ ๋ชจ๋ฅด๋ ์์ ์๊ธ ์๋ฆผ ๋ฐ๊ธฐ ์์ง๋ง์ธ์!
์ด๋ ๊ฒ ์ฃผ๋ํ๋์ ์๋ฆผ ์ค์ ์ ํ์ด์.
'๋ชจ๋ ์ธ์คํด์ค ๋ณด๊ธฐ'๋ฅผ ๋๋ฅธ ๋ค ์๋ก ๊ณ ์นจ์ ํ๋ฉด ๋ง๋ค์๋ ์ธ์คํด์ค๊ฐ ๋ณด์ด๊ฒ ๋์.
๐ก ์ฐธ๊ณ ์ฌํญ
์ธ์คํด์ค ์ค์ง : ๊ธฐ๋ ์ค์ธ ์ธ์คํด์ค System ์ข ๋ฃ (Shutdown)
์ธ์คํด์ค ์ข ๋ฃ : ์ธ์คํด์ค ์ญ์
๋ง์ฝ ์ธ์คํด์ค ์ค์ง๋ฅผ ํ๋ค๊ฐ ์ฌ ๊ธฐ๋์ ํ๊ฒ ๋๋ฉด Public IP๊ฐ ๋ณ๊ฒฝ๋จ.
๊ณ ์ IP๋ฅผ ๋ฐ์๋ฒ๋ฆฌ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ผ์ชฝ ๋คํธ์ํฌ ๋ฐ ๋ณด์์ ํ๋ ฅ์ IP ์ ํ
ํ๋ ฅ์ IP ์ฃผ์ ํ ๋น์ ๋๋ฅด๋ฉด ๊ณ ์ IP๋ฅผ ๋ฐ์ ์ ์์.
๋จ, ๋ ๋ด์ผ ํฉ๋๋ค.
๐ฆ EC2 ์ธ์คํด์ค ์ ์
์ต์ด ์ฃผ๋ํ๋์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ EC2 ์ธ์คํด์ค์ ์ ์ํ๊ธฐ ์ํด SSH Client Tool์ ์ค์นํด ์ฃผ์์ด์.
๋ค์ํ Tool์ด ์์ด ์
๋ง์ ๋ง๋ ๊ฒ์ ์ด์ฉํด๋ ์ข์ ๊ฑฐ ๊ฐ์ง๋ง, ์ฃผ๋ํ๋์ด ์ค์นํ Tool์ด ๊ถ๊ธํ์๋ค๋ฉด ์ด ๊ณณ์์ ๋ง๋๋ณด์ค ์ ์์ด์.
์ต์ด ์์ ๊ฐ์ด SSH Client Tool์์ New Host๋ฅผ ๋ฑ๋กํด ์ค ๊ฑฐ์์.
์์ ๊ฐ์ด Server ์ด๋ฆ์ ์์ ๋กญ๊ฒ Label์ ์
๋ ฅํด์ฃผ๊ณ , EC2 ์ธ์คํด์ค Public IP4 ์ฃผ์๋ฅผ Address์ ์
๋ ฅํด ์ค๋๋ค.
EC2 ์ธ์คํด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ์ด ๋๋ฉด ec2-user๋ผ๋ ๊ณ์ ์ด ๋ง๋ค์ด์ง๊ฒ ๋ฉ๋๋ค.
EC2 ์ธ์คํด์ค๋ ID, Password ๋ฐฉ์์ผ๋ก Logingํ๋ ๊ฒ์ด ์๋๋ผ,
์์์ EC2 Key Pair๋ฅผ ๋ฑ๋กํ ๋, ๋ด๋ ค ๋ฐ์์ก๋ ๊ฐ์ ๋ฑ๋กํด์ Login์ ํด์ฃผ์ด์ผ ํด์.
Password ์
๋ ฅํ๋ ๊ณณ ์์ Keys Button์ ๋๋ฌ์ค๊ฒ์.
Create a new key๋ฅผ ํด๋ฆญํ ๊ฒ์.
์์ ๊ฐ์ด ์ด๋ฆ์ ๋ฑ๋กํ๊ณ ,
Import from key file์ ๋๋ฌ Key File์ ๊ฐ์ ธ์ ๋ณผ๊ฒ์.
๊ทธ๋ฌ๋ฉด Private key์ ์์ ๊ฐ์ด ์ํธํ ๋ ๋ฌธ์์ด์ด ๋ฑ๋ก๋๋ ๊ฑธ ๋ณผ ์ ์์ด์.
์ ์ฅ์ ๋๋ฌ์ค๊ฒ์.
๋ฑ๋ก๋ Server Icon์ ํด๋ฆญํด์ Server์ ์ ์ํด ๋ณผ๊ฒ์.
์ฒ์ ์ ์ํ์ ๋, Add and continue๋ฅผ ๋๋ฌ Key๋ฅผ ๋ฑ๋กํด ์ฃผ๋ฉด ๋์.
์์ ๊ฐ์ด EC2 ์ธ์คํด์ค์ ์ ์์ ํ์์ด์.
์ด๋ ๊ฒ ์ ์์ด ๊ฐ๋ฅํ ๊ฑด ์์ ๊ฐ์ด ๋ฐฉํ๋ฒฝ์์ 22๋ฒ (SSH)์ ๋ํด ์ฐจ๋จ ์ ์ฑ
์ด ์๊ณ , ๋ชจ๋ ์ด๋ ค์๊ธฐ ๋๋ฌธ์ด์์.
๐ฆ EC2 ์ธ์คํด์ค JAVA ์ค์น
์ต์ด yum Repository๋ฅผ ์ต์ ํ ํด์ค๊ฒ์.
์ค์น ๊ฐ๋ฅํ JAVA ๋ชฉ๋ก์ ํ์ธํด ๋ณด๋ 1.8 ์ด์์ ์๋ค์.
ํ์ง๋ง, 1.8 Version์ ๋๋ฌด ๋ฎ๊ธฐ ๋๋ฌธ์ AWS์์ ์ ๊ณตํ๋ jdk 11 Version์ ๋ด๋ ค๋ฐ๊ธฐ ํด ๋ณผ ๊ฒ์ด์์.
๋ด๋ ค ๋ฐ๊ณ , ์ค์นํด ์ฃผ์์ด์.
์์ ๋ช
๋ น์ด๋ก Server์ ์ค์น๋์ด ์๋ JAVA ์ค ๋ด๊ฐ ์ํ๋ JAVA๋ฅผ ์ ํํ ์ ์๋ ๋ช
๋ น์ด์์.
ํ๋๋ฐ์ ์์ด์ ๊ทธ๋ฅ Enter๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋ ๊ฑฐ ๊ฐ์์.
๋ด๋ ค ๋ฐ์๋ jdk rmp File์ ์ง์์ฃผ์์ด์.
๐ฝ EC2 ์ธ์คํด์ค
๐ฆ Image ๋ง๋ค๊ธฐ
์ด๋ฒ์ ํด ๋ณผ ์์
์ ์์์ ๋ง๋ EC2 ์ธ์คํด์ค์ ๋ํ Image๋ฅผ ๋ง๋ค์ด JAVA๊ฐ ์ค์น๋ ํ๊ฒฝ์ ์ธ์คํด์ค๋ฅผ ํธ๋ฆฌํ๊ฒ ์ค์นํ๊ธฐ ์ํ ์ฌ์ ์์
์ ํด๋ณด๋ ค๊ณ ํด์.
์ฐ๋ฆฌ๋ ์ปดํจํฐ์ OS๋ฅผ ์ค์นํ ๋, ISO File์ ๋ฐ์์ OS๋ฅผ ์ค์นํ๋๋ฐ, ์ด ISO File์ ๋ง๋ค์ด ์ฃผ๋ ์์
์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข ๋ ์ฌ์ธ ๊ฑฐ ๊ฐ์์.
์ต์ด EC2 ๋์๋ณด๋์์ ์ธ์คํด์ค(์คํ ์ค)์ ๋๋ฌ์ค๊ฒ์.
ํด๋น ์ธ์คํด์ค๋ฅผ ํด๋ฆญํ๊ณ , ์ธ์คํด์ค ์ค์ง๋ฅผ ๋๋ฌ System Off๋ฅผ ํด์ค๊ฒ์.
์ฐธ๊ณ ๋ก ์ธ์คํด์ค ์ข
๋ฃ ๋๋ฅด๋ฉด ์๋ฉ๋๋ค.
์ธ์คํด์ค๊ฐ ๊บผ์ง ๋ค '์์
' -> '์ด๋ฏธ์ง ๋ฐ ํ
ํ๋ฆฟ' -> '์ด๋ฏธ์ง ์์ฑ'์ ๋๋ฌ์ฃผ์ธ์.
์์ ๊ฐ์ด ์ด๋ฏธ์ง ์ด๋ฆ๋ง ์ ์ด์ฃผ๊ณ , ์ด๋ฏธ์ง ์์ฑ์ ๋๋ฌ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ์ค๊ฒ์.
Navigation Bar์์ AMI๋ฅผ ์ ํํด ์ค๊ฒ์.
Image ๋ง๋๋ ๋ฐ๋ ๊ฝค ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
ํด๋น Image์ ๋ํ ์ด๋ฆ์ ์ง์ด์ฃผ์์ด์.
๐ฆ Image๋ฅผ ์ด์ฉํ์ฌ ์ธ์คํด์ค ๋ง๋ค๊ธฐ
์ต์ด ์ค์ง ํ๋ ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํด ์ค๊ฒ์.
์ฒซ๋ฒ์งธ๋ก ๋ง๋ค์๋ ์ธ์คํด์ค ์ด๋ฆ์ ์์ ๊ฐ์ด ์ค์ ํด ์ฃผ์์ด์.
๋ค๋ฅธ ์ธ์คํด์ค์์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ํธ ์ ์์ ์ํด ๋ณด์ ๊ทธ๋ฃน์ Tag๋ฅผ ํ๋ ๋ง๋ค์ด ์ค๊ฒ์.
๋ณด์ ๊ทธ๋ฃน์ด๋ผ๊ณ ์จ์ ธ ์๋ ๊ณณ ๋ฐ์ sg-0ee...์ ํด๋ฆญํด ๋ณผ๊ฒ์.
'ํ๊ทธ' Tag์์ 'ํ๊ทธ ๊ด๋ฆฌ'๋ฅผ ๋๋ฌ์ค๊ฒ์.
'์๋ก์ด ํ๊ทธ ์ถ๊ฐ'๋ฅผ ๋๋ฌ์ฃผ์ธ์.
์ด๋ ๊ฒ Key - Value Type์ผ๋ก Tag๋ฅผ ๋ง๋ค๊ณ , '๋ณ๊ฒฝ ์ฌํญ ์ ์ฅ'์ ๋๋ฌ ๋น ์ ธ๋๊ฐ ์ค๊ฒ์.
์์ ๊ฐ์ด Tag๊ฐ ํ๋ ๋ง๋ค์ด์ง๊ฑธ ํ์ธํ ์ ์์ด์.
์ด Tag๋ฅผ ์ด์ฉํด์ ๊ฒ์ํ์ฌ ๋ณด์ ๊ทธ๋ฃน์ ์ ํํ ์ ์์ด์.
๋ค์ ์ธ์คํด์ค ์ฐฝ์ผ๋ก ๋์์์ '์ธ์คํด์ค ์์'์ ๋๋ฌ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ค๊ฒ์.
์์ ๊ฐ์ด ์ธ์คํด์ค ์ด๋ฆ์ ์ค์ ํ๊ณ ,
์ด๋ฒ์๋ Quick Start๊ฐ ์๋ '๋ด AMI'์์ '๋ด ์์ '์ Image๋ฅผ ์ ํํด์ ์์์ ๋ง๋ Image๋ฅผ ์ ํํด ์ค๊ฒ์.
Key Pair ๋ถ๋ถ์์ ์ด ์ ์ ๋ง๋ค์๋ Key Pair๋ฅผ ์ ํํด ์ฃผ์ธ์.
'๋คํธ์ํฌ ์ค์ '์์ ๋ณด์ ๊ทธ๋ฃน์ '๊ธฐ์กด ๋ณด์ ๊ทธ๋ฃน ์ ํ'์ ๋๋ฌ
์ด ์ ์ ๋ง๋ค์๋ ์ธ์คํด์ค๊ฐ ๋ค์ด ์๋ ๋ณด์ ๊ทธ๋ฃน๊ณผ ๋์ผํ ๋ณด์ ๊ทธ๋ฃน์ ์ ํํด ์ค๊ฒ์.
์ด๋ฒ์๋ 4๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด ์ค๊ฑฐ์์.
์ด๋ ๊ฒ ํ ๋ค '์ธ์คํด์ค ์์'์ ๋๋ฌ์ค๊ฑฐ์์.
์ด 5๊ฐ์ ์ธ์คํด์ค๊ฐ ์กด์ฌํ๊ณ , ๋ฐฉ๊ธ ๋ง๋ ์ธ์คํด์ค๊ฐ ์ค๋น๋๊ณ ์์ด์!
์๋กญ๊ฒ ๋ง๋ค์ด์ง ์ธ์คํด์ค์ ๊ฐ๊ฐ์ ์ด๋ฆ์ ๋ฌ๋ฆฌ ์ฃผ์์ด์.
์์ ๊ฐ์ด SSH Client์ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ค์ ๋ฑ๋กํด ์ฃผ์์ด์.
Key Pair๋ ๋์ผํ File์ ์ด์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ง์ง ํ์์์ด ์ด๋ฆ๊ณผ IP ์ฃผ์๋ง ๋ณ๊ฒฝํด์ ๊ฐ๊ฐ ๋ง๋ค์์ด์.
๋ชจ๋ ์ธ์คํด์ค์ ์ ์์ ์ผ๋ก ์ ์ ๋๋ ๊ฑธ ํ์ธํด ์ฃผ์์ด์.
Jenkins๋ก ์ฌ์ฉํ ์ธ์คํด์ค์์ Docker๋ก ์ฌ์ฉํ ์ธ์คํด์ค์ Ping Test๋ฅผ ํ๋๋ Ping์ด ๊ฐ์ง ์์์.
์ธ์คํด์ค ์๋ฌด๊ฑฐ๋ ์ ํํ๊ณ , '๋ณด์' Tab์์ ๋ณด์ ๊ทธ๋ฃน ๋ฐ์ sg-...์ ํด๋ฆญํด ์ค๊ฒ์.
'์ธ๋ฐ์ด๋ ๊ท์น' ์์ '์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง'์ ๋๋ฌ์ฃผ์ธ์.
๊ท์น ์ถ๊ฐ๋ฅผ ๋๋ฅธ ๋ค ์ ํ์ '๋ชจ๋ ICMP-IPv4'๋ฅผ ์ ํํด ์ฃผ์์ด์.
ICMP๋ Ping Testํ ๋, ์ฌ์ฉํ๋ Protocal ์ด๋ฆ์ด์์.
๊ทธ๋ฐ ๋ค ๋๋ณด๊ธฐ ๋ชจ์์ ๋๋ฅธ ๋ค ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ธ์คํด์ค๋ค์ด ๋ฌถ์ธ ๋ณด์ ๊ทธ๋ฃน์ ์ ํํด ์ฃผ๋ฉด ๋์.
๋๋๋ก 0.0.0.0์ ์ ํํ๋ฉด ์ข์ง ์์์.
์ด๋ ์ด๋์๋ ์ ๊ทผํ๊ฒ ๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ด์์.
์์ ๊ฐ์ด ์ค์ ํ๊ณ , '์ค์ ์ ์ฅ'์ ๋๋ฌ์ค๊ฒ์.
๋ฐ๋ก Ping์ด ๋ซ๋ฆฐ๊ฑธ ํ์ธํ ์ ์์ด์.
๐ฆ Jenkins Server ๊ตฌ์ถ
์ต์ด ์์ ๋ช
๋ น์ด๋ฅผ ํตํด AWS์์ ์ ๊ณตํ๋ ํ์ฅ Package๋ฅผ ์ค์นํ๋๋ก ํ ๊ฒ์.
์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ํ์ฌ ์ฌ์ฉํ๋ Linux์ ์ถ๊ฐ์ ์ธ Dependency Package๋ค์ ํ๋ฒ์ ์ค์นํ๊ธฐ ์ํจ์ด์์.
๐ก ์ฐธ๊ณ ์ฌํญ
epel์ด๋? Extra Package for Enterprise Linux์ ์ฝ์ด.
opt Directory์์ Maven ์ค์น ์์ถ File์ ๋ฐ์์ฃผ์์ด์.
์์ ๋ช
๋ น์ด๋ก ์์ถ์ ํด์ ํด ์ฃผ์์ด์.
๐ก ์ฐธ๊ณ ์ฌํญ
tar ๋ช ๋ น์ด Option
-x : File ์์ถ ํด์ .
-v : ์์ถ ๊ณผ์ ์ ๋ณด์ด๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ.
-z : gz ์์ถ File ์์ถ ํ๊ธฐ.
-f : File๋ช ์ง์ ์ ์ํด ์ฌ์ฉ.
์์ถ File์ ์ญ์ ํ๊ณ , File ๋ชฉ๋ก์ ํ์ธํด ๋ณด์์ด์.
maven Directory์ ๋ค์ด์์ด์.
ํ๊ฒฝ ๋ณ์ ์ค์ ์ ์ํด M2_HOME๊ณผ ๊ทธ ๋ฐ์ PATH ๋ด์ฉ์ ์ถ๊ฐํด ์ฃผ์์ด์.
์์ ์ค์ ๋ด์ฉ์ด ๋ฑ๋ก๋๊ฒ ํด ์ฃผ์์ด์.
Maven ์ค์ ์ด ์ ์์ ์ผ๋ก ์๋ฃ ๋์์ด์.
์ด๋ฒ์๋ Git์ ์ค์นํด ๋ณผ๊ฒ์.
Git๋ ์ ์ ์ค์น ์๋ฃ ํ์์ด์.
์ด๋ฒ์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก Jenkins๋ฅผ ์ค์นํด ๋ณผ๊ฒ์.
์์ ๋ช
๋ น์ด๋ Server ๋ด yum Repository์
Jenkins ๊ด๋ จ Package๊ฐ ํฌํจ๋์ด ์์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ yum Repository์ ๋ฑ๋ก ํ๋ ๊ฑฐ์์.
๊ทธ๋ฆฌ๊ณ , Key๋ฅผ ๋ฑ๋กํด ์ฃผ๋ ๊ฒ์ด์์.
yum ๋ช
๋ น์ด๋ฅผ ํตํด ์ค์น๋ฅผ ์งํ ํด ์ฃผ์์ด์.
Jenkins์์ ์์ JAVA Version์ผ๋ก ์ค์น๋ฅผ ์งํํ ๋, ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ์ฌ JAVA Version์ ๋ค๋ฅธ ๊ฑธ๋ก ์ค์นํด ์ค๊ฒ์.
์์ ๊ฐ์ด 2๊ฐ์ JDK๊ฐ ์ค์น ๋์ด ์๋๋ฐ, 2๋ฒ์ ์ ํํด ์ค ๊ฒ์ด์์.
Jenkins Deamon์ด ์ฃฝ์ด์์ด์.
์ด๋ ค์ค์ผ ๊ฒ ์ด์.
Jenkins๋ฅผ ์ด๋ ค์ฃผ์์ด์.
Jenkins๋ ๊ธฐ๋ณธ์ ์ผ๋ก 8080 Port๋ฅผ ํตํด ์น ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํ ์ ์์ด์.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ AWS ๋ณด์ ๊ทธ๋ฃน์์ ์ธ๋ฐ์ด๋ ๊ท์น์ 8080 Port๋ฅผ ์ด์ด์ฃผ์ด์ผ ํด์.
'์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง'์ ๋๋ฌ์ค๊ฒ์.
์ฃผ๋ํ๋์ ์ง์์๋ง ์ ์์ด ๊ฐ๋ฅํ๊ฒ ์์ค์์ '๋ด IP'๋ฅผ ์ ํํด ์ง์ ๊ณต์ธ IP๊ฐ ์ ํ๋๋๋ก ํ๊ณ ,
์์ ๊ฐ์ด 8080 Port๋ฅผ ์ด์ด์ฃผ์์ด์.
'๊ท์น ์ ์ฅ'์ ๋๋ฌ์ค๋๋ค.
Jenkins ์ด๊ธฐ ํ๋ฉด์ ์ ์ํ ๊ฑธ ํ์ธํ ์ ์์ด์.
Jenkins ์ด๊ธฐ ๋น๋ฐ๋ฒํธ๋ ์์ ๊ฐ์ด ํ์ธํ ์ ์์ด์.
๊ฐ์ ์
๋ ฅํ๊ณ , Continue๋ฅผ ๋๋ฌ์ค๊ฒ์.
์ด ํ์ ์ค์น ์์
์ ๋ํด์๋ ์ด ๊ณณ์ ์ ์ฑ์ค๋ฝ๊ฒ ์ค๋นํด ๋์์ด์.
๐ฆ Docker Host Server ๊ตฌ์ถ
์ต์ด AWS Linux ํ์ฅ Package๋ฅผ ์ค์นํด ์ค๊ฒ์.
๊ทธ๋ฐ ๋ค yum Repository ์ต์ ํ๋ฅผ ์งํํด ์ค๊ฒ์.
yum์ ์ด์ฉํด์ Docker๋ฅผ ์ค์นํด ์ค๊ฒ์.
Docker Deamon์ ๊ธฐ๋ ์์ผ ์ฃผ์์ด์.
Docker๊ฐ ์ ์ ์ค์น ๋์์ด์.
๋ง์ฝ sudo ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋๊ฒ ๊ท์ฐฎ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ฒ๋ฆฌํด ์ฃผ๋ฉด ๋์.
์ด๋ ๊ฒ docker Group์ ec2-user๋ฅผ ๋ฃ์ด์ฃผ๋ฉด docker ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ๋, sudo๋ฅผ ์ ๊ฑฐํ๊ณ ์ด์ฉํ ์ ์์ด์.
๋จ, ํด๋น shell์ ์ข
๋ฃํ๋ค๊ฐ ๋ค์ ์ฐ๊ฒฐํด์ค์ผํด์.
์ฆ, ๊ณ์ ์ Logout ํ๋ค๊ฐ ๋ค์ Loging ํด์ฃผ์ด์ผ ํฉ๋๋ค.
์์ ๊ฐ์ด sudo ๋ช
๋ น์ด ์์ด ์ด์ฉํ ์ ์์ด์.
์ ๋ช
๋ น์ด๋ฅผ ํตํด Docker๊ฐ ์ด์ฉ ๊ฐ๋ฅํ Network ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ด์.
์์ ๋ช
๋ น์ด๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ Docker Container๋ฅผ ์์๋ก ๊ธฐ๋ ์์ผ ๋ณผ ์ ์์ด์.
๐ฆ Tomcat Server ๊ตฌ์ถ
์ต์ด AWS Linux ํ์ฅ Package๋ฅผ ์ค์นํด ์ค๊ฒ์.
๊ทธ๋ฐ ๋ค yum Repository ์ต์ ํ๋ฅผ ์งํํด ์ค๊ฒ์.
opt Directory ๋ฐ์ Tomcat ์ค์น File์ ์์ถ File์ ๋ฐ์์ฃผ์์ด์.
์์ ๋ช
๋ น์ด๋ก ์์ถ์ ํด์ ํด ์ค๊ฒ์.
์์ถ File์ ์ญ์ ํด ์ฃผ์์ด์.
์์ ๋ช
๋ น์ด๋ก ๊ฐ๊ฐ์ Shell Script์ ์คํ ๊ถํ์ ์ถ๊ฐํด ์ฃผ์์ด์.
์์ ๊ฐ์ด Tomcat Service๋ฅผ ๊ธฐ๋ํด ์ฃผ์์ด์.
์์ ๊ฐ์ด ์ ์ ์ ์์ด ๋์์ด์!
๋ช ๊ฐ์ง ์ค์ ์์
์ ์ถ๊ฐ๋ก ํด ๋ณผ๊ฒ์.
์์ ๊ฐ์ด Value Tag๋ฅผ ์ฃผ์ ์ฒ๋ฆฌ ํ์ด์.
์์ ๋์ผํ ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌ ํด ์ฃผ์์ด์.
์ด๋ ๊ฒ ์ค์ ํด ์ฃผ๋ ์ด์ ๋
์ ๊ทธ๋ฆผ์์ 'Manager App' ๋ถ๋ถ์ ๋ชจ๋ IP๊ฐ ๋ค ์ ๊ทผํ ์ ์๋๋ก ์ด์ด์ค ๊ฒ์ด์์.
์ด๋ฒ์ Tomcat ๊ด๋ฆฌ์ ๊ณ์ ๋ค์ ์ถ๊ฐํด ๋ณผ๊ฒ์.
<role rolename="manager-gui" />
<role rolename="manager-script" />
<role rolename="manager-jmx" />
<role rolename="manager-status" />
<user username="admin" password="admin" roles="manager-gui, manager-script, manager-jmx, manager-status" />
<user username="deployer" password="deployer" roles="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui" />
์์ ๊ฐ์ด Script ๋งจ ๋ฐ์ ๋ถ๋ถ์ ์์ ํด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด Tomcat Service๋ฅผ ์ฌ ๊ธฐ๋ ํด ์ฃผ์์ด์.
Tomcat์ ์น ๋ธ๋ผ์ฐ์ ๋ก ๋ถ์ด์ 'Manager App'์ ๋ค์ด๊ฐ ์ค๊ฒ์.
Script์์ ๋ฑ๋กํ tomcat ๊ณ์ ์ ์
๋ ฅํด ์ค๋๋ค.
์ ์ ์ ์ ๋์์ด์!
๐ฆ Ansible Server ๊ตฌ์ถ
์ต์ด AWS Linux ํ์ฅ Package๋ฅผ ์ค์นํด ์ค๊ฒ์.
๊ทธ๋ฐ ๋ค yum Repository ์ต์ ํ๋ฅผ ์งํํด ์ค๊ฒ์.
yum์ ์ด์ฉํด์ ansible์ ์ค์นํด ์ค๊ฒ์.
Ansible์ ์ด ๊ณณ์ ์์นํ๊ณ ์์ด์.
์์ ๊ฐ์ด Host ์ ๋ณด๋ฅผ ์
๋ ฅํด ์ฃผ์์ด์.
์ฐธ๊ณ ๋ก Public IP๊ฐ ์๋ Private IP๋ก ๋ฑ๋ก์ ํด ์ค ๊ฒ์ด์์.
Ansible Server์์ Docker Host Server ๊ทธ๋ฆฌ๊ณ , Tomcat Server์ SSH ์ ์์ด ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด
Ansible Server์์ SSH Key๋ฅผ ์์ฑํด์ฃผ์๋๋ฐ, rsa ์ํธํ ๋ฐฉ์์ Key๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
์์ ๊ฐ์ด Key๊ฐ ์์ฑ์ด ๋์๋๋ฐ, ๊ณต๊ฐํค(.pub)๋ฅผ ๊ฐ๊ฐ์ Server์ ์ ๋ฌํด ์ค๊ฑฐ์์.
์์ ๊ณต๊ฐํค ๊ฐ์ ๋ณต์ฌํด ์ค๋๋ค.
๋จผ์ Docker Server์ ๋ฑ๋กํด ๋ณผ๊ฒ์.
์ด๋ฏธ ํ๋ Key๊ฐ ์๋ค์.
์ํ๋ฒณ o Key๋ฅผ ๋๋ฌ ๋งจ ๋ฐ์ผ๋ก ์ด๋ํ ๋ค ๋ณต์ฌํ Key ๊ฐ์ ๋ถํ๋ฃ์ด ์ฃผ์์ด์.
์ด๋ฌํ ์ค์ ์ Tomcat Server์๋ ๋์ผํ๊ฒ ์ ์ฉํ ๊ฒ์.
์์ ๊ฐ์ด Docker Server์ SSH๋ก ์ ์ํด๋ณด๋ ๊ณ์ ์ ๋ฌป์ง ์๊ณ , ๋ฐ๋ก ์ ์ํ๋ ๊ฑธ ๋ณผ ์ ์์ด์.
Tomcat Server๋ ์ ์ ์ ์ ๋์์ด์.
์ด๋ฒ์๋ Ansible Server์์ ๋ฑ๋ก๋ Server๋ค์๊ฒ Ping์ ๋ ๋ ค๋ณผ๊ฒ์.
์์ ๊ฐ์ด ์ ์์ ์ผ๋ก Ping์ด ๊ฐ์ด์.
Localhost ์ฆ, Ansible ์๊ธฐ ์์ ์ SSH์ ๋ํ ์ค์ ์ ํด ์ฃผ์ง ์์ ์์ ๊ฐ์ด Ping Test๊ฐ ๊ฐ์ง ์์์.
Tomcat, Docker Server์ ํด ์ฃผ์๋ฏ์ด SSH Key ๊ฐ์ ์ ๋ฌํด ์ค์ผํด์.
Ansible Server๋ SSH Key๋ฅผ ๋ฑ๋กํด ์ฃผ์์ด์.
์๊ธฐ ์์ ์๊ฒ ์ ๋๋ก Ping์ด ๋ ์๊ฐ๊ฑธ ํ์ธํ ์ ์์ด์.
๐ฆ SonarQube Server ๊ตฌ์ถ
AWS t2.micro ์ธ์คํด์ค๋ก SonarQube๋ฅผ ์ค์นํ๊ฒ ๋๋ฉด ์์ ๋ถ์กฑ์ผ๋ก ์ธํด ๊ธฐ๋์ด ๋์ง ์์ต๋๋ค.
๊ทธ๋์ ์ ๋ฃ๋ก ์ด์ฉํ ์ ์๋ ์ต์ ์ธ์คํด์ค t2.small ์ด์์ ์ด์ฉํด์ผ ํฉ๋๋ค.
์ฃผ๋ํ๋์ ๊ตณ์ด ์ ๋ฃ๋ก ์ด์ฉํด ๋ณด๊ณ ์ถ์ง๋ ์๊ณ , Synology NAS Docker์ SonarQube๊ฐ ์ฌ๋ผ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค์น ๋ฐฉ๋ฒ์ ๋ํด์๋ง ์ ๋ฆฌํ๊ณ , ๊ธฐ๋ํ์ง ์๊ฒ ์ต๋๋ค.
์ต์ด AWS Linux ํ์ฅ Package๋ฅผ ์ค์นํด ์ค๊ฒ์.
๊ทธ๋ฐ ๋ค yum Repository ์ต์ ํ๋ฅผ ์งํํด ์ค๊ฒ์.
์ต์ด opt Directory ๋ฐ์ sonarqube Directory๋ฅผ ๋ง๋ค์ด ์ฃผ์์ด์.
๊ทธ๋ฆฌ๊ณ sonarqube Directory๋ก ๋ค์ด๊ฐ ์ค๋๋ค.
Sonarqube 7.6 Version์ ๋ด๋ ค๋ฐ๊ธฐ ํ์์ด์.
zip์ผ๋ก ์์ถ๋ File์ unzip์ด๋ผ๋ ๋ช
๋ น์ด๋ฅผ ํตํด ์์ถ ํด์ ํ ์ ์์ด์.
์์ถ File์ ์ง์์คฌ์ด์.
์ด์ ๋ช๊ฐ์ง ๊ถํ์ ๋ฐ๊พธ๋ ์์
์ ํด ๋ณผ๊ฑฐ์์.
๊ทธ ์ด์ ๋ SonarQube๋ Elastic Search์ ๊ฐ์ Service์ ์ฐ๊ณ ๋์ด ์ฌ์ฉ๋๊ณ ์๋๋ฐ,
root ๊ถํ์ด ์๋ ๊ฒฝ์ฐ ํด๋น Service๋ฅผ ์ด์ฉํ ์ ์๋ค๊ณ Error๊ฐ ๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์ด์์.
SonarQube Directory ์์ ๊ถ์ ec2-user์๊ฒ ๋ชจ๋ ์ด์ ํ์์ด์.
์ด๋ฒ์๋ SonarQube ์ค์ ์ ํ์ธ ํด ๋ณผ๊ฒ์.
์ฐธ๊ณ ๋ก vi๋, vim Editor์์ Line Number๋ฅผ ์๊ธฐ ์ํด์ :์ ๋๋ฅด๊ณ , set nu๋ฅผ ์
๋ ฅํ๊ณ , Enter๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
113๋ฒ์งธ ์ค์ ๋ณด๋ฉด ํ์ฌ SonarQube์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ฉํด์ ๋ถ์ ์ ์๋ Port ๋ฒํธ๊ฐ ๋์ค๋๋ฐ,
์ด ๊ณณ์ ๋ณ๊ฒฝํ๋ฉด ํด๋น Port ๋ฒํธ๋ก ๋ถ์ ์ ์์ด์.
์์ ๋ช
๋ น์ด๋ก SonarQube๋ฅผ ๊ธฐ๋ ์์ผ ์ฃผ์์ด์.
AWS ์ธ๋ฐ์ด๋์์ 9000๋ฒ Port๋ ์ด์ด์ค์ผ ๊ฒ ์ด์.
์์ ๊ฐ์ด 9000 Port๋ Open ํด ์ฃผ์์ด์.
SonarQube์ ์ค์ ๋ฐฉ๋ฒ ๋ฑ์ ๋ํด์๋ ์ด ๊ณณ์ ์ ๋ฆฌ๋ฅผ ํด ๋์์ด์.
๐ฝ AWS EC2 ๋ฐฐํฌํ๊ธฐ
๐ฆ Tomcat Server
์ต์ด Jenkins์ Jenkins ๊ด๋ฆฌ์์ 'ํ๋ฌ๊ทธ์ธ ๊ด๋ฆฌ'๋ก ๋ค์ด๊ฐ๊ฒ์.
์ด๋ฒ์ Jenkins ๊ด๋ฆฌ์ 'Global Tool Configuration'์ผ๋ก ๋ค์ด๊ฐ๊ฒ์.
์ด ๊ณณ์์ Maven ์ค์ ์ ํด ์ค๊ฒ์.
์ต์ด Add Maven์ ๋๋ฌ์ฃผ์ธ์.
์ฃผ๋ํ๋์ Jenkins Server์ Maven์ ์ค์นํด ์ฃผ์๊ธฐ ๋๋ฌธ์
'Install automatically'๋ฅผ ํด์ ํด ์ค๊ฑฐ์์.
MAVEN_HOME์ Maven Directory๊ฐ ์๋ ๊ณณ์ ์ค์ ํด ์ฃผ๊ณ ,
์ด๋ฆ์ ์์ ๊ฐ์ด ์ค์ ํด ์ฃผ์์ด์.
์ ์ฅํ๊ณ , ํด๋น ์ฐฝ์ ๋์์ฃผ์์ด์.
์ด์ Item์ ํ๋ ๋ง๋ค์ด ๋ณผ๊ฒ์.
Item ์ด๋ฆ์ ์
๋ ฅํ๊ณ , 'Maven project'๋ฅผ ๋๋ฌ์ค ๋ค 'OK'๋ฅผ ๋๋ฌ์ค๋๋ค.
์ต์ด Git Repository๋ถํฐ ๋ฑ๋กํด ์ค๊ฒ์.
Credentials๋ ํ์ฌ Repository๊ฐ Pubilc์ด๋ผ ๋ฐ๋ก ์ค์ ํ์ง ์์ง๋ง,
Private์ด๋ผ๋ฉด Git Hub Token์ ๋ฑ๋กํด ์ฃผ์ด์ผ ํด์.
์ด ๋ด์ฉ์ ๋ํด์ ์ด ๊ณณ์ ์ ๋ฆฌํด ๋์์ด์.
๋ง์ฝ ๊ด๋ฆฌํ๋ Branch ์ด๋ฆ์ด master๊ฐ ์๋๋ผ๋ฉด ์์ ํด ์ฃผ์ด์ผ ํด์.
๊ทธ๋ฆฌ๊ณ , Build ๋ถ๋ถ์์ ์์ ๊ฐ์ด ์ค์ ํด ์ค๋๋ค.
๋น๋ ํ ์กฐ์น ๋ถ๋ถ์์ '๋น๋ ํ ์กฐ์น ์ถ๊ฐ'๋ฅผ ๋๋ฅธ ๋ค 'Deploy war/ear to...'์ ์ ํํด ์ฃผ์ธ์.
์์ ๊ฐ์ด WAR File ์ ๋ณด๋ฅผ ์
๋ ฅํด ์ฃผ๊ณ , Tomcat Version์ ์ ํํด ์ฃผ์ธ์.
Tomcat Server์ ์ฐ๋์ ์ํด Credentials๋ฅผ ๋ฑ๋กํด ์ค๊ฒ์.
'Add'๋ฅผ ๋๋ฌ์ฃผ์ธ์.
์์ ๊ฐ์ด Tomcat Script์์ ๋ง๋ deployer ๊ณ์ ์ ๋ฑ๋กํด ์ฃผ์์ด์.
๋๋จธ์ง๋ ์์ ๊ฐ์ด ๋ฑ๋กํด ์ฃผ์์ด์.
Tomcat URL์ Tomcat Server์ ๊ณต์ธ IP๋ฅผ ์
๋ ฅํด ์ฃผ์ด์ผ ํด์.
์ ์ฅ์ ํ๊ณ , Build๋ฅผ ์งํํด ๋ณผ๊ฒ์.
Build๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๊ฐ ๋๋ฉด ์์ ๊ฐ์ด workspace Directory์ Project Directory๊ฐ ๋ง๋ค์ด์ ธ์.
์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ด ๊ณณ์ ์ ๋ฆฌํด ๋์์ด์.
๐ฆ Docker Server
์ต์ด Jenkins ๊ด๋ฆฌ์์ 'ํ๋ฌ๊ทธ์ธ ๊ด๋ฆฌ'๋ก ๋ค์ด๊ฐ ์ค๊ฒ์.
์์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด ์ฃผ์ธ์.
์ด๋ฒ์ Jenkins ๊ด๋ฆฌ์ '์์คํ
์ค์ '์ ๋ค์ด๊ฐ ์ค๋๋ค.
๋งจ ๋ฐ์ SSH Server๋ฅผ ์ถ๊ฐํด ์ค๊ฒ์.
๋ฑ๋กํ๊ธฐ ์ ์ Jenkins์์ Docker Server๋ก ssh๋ฅผ ํตํด ์ ์ํ๋ ค ํ์ง๋ง, ๊ถํ์ด ์๋ค๊ณ ๋์ค๊ณ ์์ด์.
Ansible Server๋ฅผ ๋ง๋ค ๋, Docker์ Tomcat Server์ SSH Key ๊ฐ์ ์ ๋ฌํด ์ฃผ์๋๋ฐ, ๋์ผํ ์์
์ ํด์ค๊ฒ์.
Jenkins Server์์ SSH Key๋ฅผ ๋ง๋ค์์ด์.
์ ๊ณต๊ฐํค๋ฅผ Tomcat๊ณผ Docker์ ์ ๋ฌํด ์ค๊ฒ์.
Docker Server์ ์์ ๊ฐ์ด ๋ฑ๋กํด ์ฃผ์์ด์.
Docker Server์ SSH๋ก ์ธ์ฆ ์์ด ์ ์์ ์ผ๋ก ์ ์ํ์ด์.
Jenkins์์ SSH๋ก Docker์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ค์ ์ ์์ ๊ฐ์ด ํด์คฌ๋๋ฐ, ์ฐ๊ฒฐ์ด ๋์ง ์๊ณ ์์ด์.
์ด ๋ฌธ์ ์ ์ด์ ๋ ์ง์ ํ Key๋ฅผ ํตํด์ SSH ์ ์ ์๋๋ฅผ ํ์ง ์์์์์.
'๊ณ ๊ธ' Button์ ๋๋ฌ์ค๊ฒ์.
์์ ๊ฐ์ด 'Use Password authentication ..'์ ํ์ฑํ ํด์ค๊ฒ์.
๊ทธ๋ฐ ๋ค SSH Key ๊ฐ์ ๋ฑ๋กํด์ค์ผ ํด์.
์ ๋ช
๋ น์ด๋ฅผ ํตํด ๋์ค๋ ์ํธํ ๋ ๋ฌธ์์ด์ ๋ฑ๋กํด ์ค์ผ ํด์.
ํด๋น ๊ฐ์ Key ๋ถ๋ถ์ ๋ชจ๋ ๋ณต์ฌํด์ ๋ฑ๋กํด ์ค๋๋ค.
์ฐธ๊ณ ๋ก -----BEGIN RSA PRIVATE KEY----- ๋ถํฐ
-----END RSA PRIVATE KEY----- ๊น์ง์ ๋ชจ๋ ๋ฌธ์์ด์ ๋ค ๋ณต์ฌํด์ ๋ฃ์ด์ค์ผ ํด์.
๋ค์ Test๋ฅผ ์งํํ๋ ์ ์ ์ฐ๊ฒฐ ๋์์ด์.
์ ์ฅํ๊ณ , ํด๋น ์ฐฝ์ ๋๊ฐ์ค๊ฒ์.
์์ ๊ฐ์ด Item์ ๋ง๋๋๋ฐ, ์์์ ๋ง๋ค์๋ Item์ ๋ด์ฉ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ฌ๊ฒ์.
Build ํ ์กฐ์น์ Tomcat ์ค์ ๋ด์ฉ์ ์ง์์ค๊ฒ์.
๊ทธ๋ฐ ๋ค ๋ค์ '๋น๋ ํ ์กฐ์น ์ถ๊ฐ'๋ฅผ ๋๋ฌ์ค ๋ค 'Send build ...'๋ฅผ ๋๋ฌ์ค๊ฒ์.
์ ์ค์ ์์ ๋ฑ๋กํ๋ Docker Server ์ด๋ฆ์ ์ฐพ์ Name์ ์ ํํด ์ฃผ๊ณ , Build ๋์ File์ ์ ํํด ์ฃผ๋ฉด ๋์.
์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ด ๊ณณ์ ์ ๋ฆฌํด ๋์์ด์.
์์ ๊ฐ์ด Build๊ฐ ์ฑ๊ณตํ์ด์.
Docker Server์์ ec2-user์ Home Directory๋ฅผ ํ์ธํด ๋ณด๋ 'hello-world.war'๊ฐ ์ ์์ ์ผ๋ก ์ ๋ฌ ๋์์ด์.
์์ ๊ฐ์ด Dockerfile์ ๋ง๋ค์ด์ฃผ์ธ์.
docker build --tag={Docker Image Name(์์ ๊ธฐ์ฌ)} -f Dockerfile .;
docker run -d -p 8080:8080 --name {Docker Container Name(์์ ๊ธฐ์ฌ)} {Docker Image Name(์์ ๊ธฐ์ฌ)}:{Image Version ์ ๋ณด}
๋ค๋ฅธ ์ค์ ์ ๊ทธ๋๋ก ๋๊ณ , ํด๋น Dockerfile๋ก Image๋ฅผ ๋ง๋ค๊ณ , Container๋ฅผ ๋ง๋ค ์ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.
Build๊ฐ ์ฑ๊ณตํ์ด์.
Docker Image์ Container๊ฐ ์ ์์ ์ผ๋ก ๋ง๋ค์ด์ ธ ์์ด์.
Docker ๊ณต์ธ IP์ 8080 Port์ URI๋ฅผ ๋ฃ์ด์ฃผ๋ ์์ ๊ฐ์ด ์ ์ ์ ์ ๋์์ด์.
๐ฆ Ansible Server
์ต์ด Jenkins์ Ansible ๋ฑ๋ก์ ์ํด Jenkins ๊ด๋ฆฌ์์ '์์คํ
์ค์ '์ ๋ค์ด๊ฐ ์ค๊ฒ์.
SSH Server์ '์ถ๊ฐ'๋ฅผ ๋๋ฌ์ค๊ฒ์.
๊ทธ๋ฐ ๋ค ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ ์ํด ์ฃผ๊ณ , Hostname์๋ Ansible Server Private IP๋ฅผ ์ ์ด์ค๋๋ค.
'๊ณ ๊ธ'์ ๋๋ฌ์ค๊ฒ์.
Jenkins Server์์ ์ ๋ช
๋ น์ด๋ฅผ ํตํด ๋์ค๋ ์ํธํ ๋ ๋ฌธ์์ด์ ๋ฑ๋กํด ์ค์ผ ํด์.
ํด๋น ๊ฐ์ Key ๋ถ๋ถ์ ๋ชจ๋ ๋ณต์ฌํด์ ๋ฑ๋กํด ์ค๋๋ค.
์ฐธ๊ณ ๋ก -----BEGIN RSA PRIVATE KEY----- ๋ถํฐ
-----END RSA PRIVATE KEY----- ๊น์ง์ ๋ชจ๋ ๋ฌธ์์ด์ ๋ค ๋ณต์ฌํด์ ๋ฃ์ด์ค์ผ ํด์.
์์ ๊ฐ์ด Jenkins Server์ SSH Public Key์ ๋ณต์ฌํ์ฌ Ansible Server์ ๋ฃ์ด์ค๊ฒ์.
์์ ๊ฐ์ด Key ๊ฐ์ ๋ณต์ฌํด์ ์ ์ฅํด ์ฃผ์ธ์.
๊ทธ๋ฐ ๋ค Test๋ฅผ ๋๋ฌ์ค์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ์ธํด ์ฃผ์์ด์.
์์ ๊ฐ์ด Project๋ฅผ ๋ง๋ค์ด ์ค๊ฒ์.
๊ธฐ์กด์ Docker Project ๋ด์ฉ์์ ๋น๋ ํ ์กฐ์น์ Docker Container๋ฅผ ๋ง๋๋ ๋ช
๋ น์ด๋ง ์ง์์คฌ์ด์.
Image๋ Docker Server์์ ๋ง๋ค๊ณ , Docker Container๋ Ansible Server์์ ๋ง๋ค๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ด์์.
'Add Server'๋ฅผ ๋๋ฌ Ansible์ ๋ํ ์ค์ ์ ํด์ค๊ฒ์.
๋ค๋ฅธ ๊ณณ์ ๋ชจ๋ ๊ทธ๋๋ก ๋๊ณ , Exec command์ playbook์ ์ฌ์ฉํ๋ ๋ช
๋ น์ด๋ฅผ ๋ฃ์ด์ฃผ์์ด์.
- hosts: all
# become: true
tasks:
- name: stop current running container
command: docker stop junyharang-cicd-study-ansible
ignore_errors: yes
- name: remove stopped cotainer
command: docker rm junyharang-cicd-study-ansible
ignore_errors: yes
- name: create a container using cicd-project-ansible image
command: docker run -d --name junyharang_cicd_project -p 8080:8080 junyharang/junyharang-cicd-study-ansible
Docker Server์์ ๋ง๋ค์ด์ง Image๋ฅผ ์ฌ์ฉํด์ ์์
์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด Script ๋ฌธ์ ์์ฑํด ์ฃผ์์ด์.
์์๋ก ๋ง๋ hosts File์ Docker ์ ๋ณด๋ฅผ ์์ ๊ฐ์ด ๋ฃ์ด์ฃผ์์ด์.
Jenkins์ Project๋ฅผ ์ ์ฅํ๊ณ , Build๋ฅผ ํ๋ฉด ๋ฉ๋๋ค.
๐ง ์ฐธ๊ณ ์๋ฃ