AWS์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ EC2์ Jenkins ์๋ฒ๋ฅผ ๊ตฌ์ถํ ํ GitLab Webhook๊น์ง ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด์ ๋๊ณ ๋๊ณ ์ฐธ๊ณ ํ๋ ค๊ณ ์์ฑํ๋ ๊ธ ๐
์ ํํ๋ AMI์ ๋ฐ๋ผ ์ EC2 ์ธ์คํด์ค์ ์ค์น๋๋ ๊ธฐ๋ณธ ์ํํธ์จ์ด๊ฐ ๊ฒฐ์ ๋๋ค.
Amazon Linux ๋ฐฐํฌํ์ ์ ํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฏ๋ก Amazon Linux 2 AMI(HVM)๋ฅผ ์ ํ
์ธ์คํด์ค ์ ํ์ CPU, ๋ฉ๋ชจ๋ฆฌ(RAM), ์คํ ๋ฆฌ์ง ๋ฐ ๋คํธ์ํฌ ์ฉ๋์ด ํฌํจ๋ ํน์ ํ ๊ตฌ์ฑ์ ๋งํ๋ค.
๋ด๊ฐ ์ ํํ t2.micro ์ธ์คํด์ค๋ ํ๋ฆฌํฐ์ด๋ก ๋งค์ 750์๊ฐ์ฉ ์คํ ๊ฐ๋ฅํ๋ค. ๐
์ถ๊ฐ ์ค์ ์์ด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ๋ค์
์ธ์คํด์ค์ ์คํ ๋ฆฌ์ง๋ฅผ ์ค์ ํ๋๊ฑด๋ฐ Root ์ฅ์น๋ ํ์์ธ๋ฐ ๋ณผ๋ฅจ ์ ํ์ ๋ฐ๋ผ ๊ธ์ก์ด ๋ค๋ฅด๋ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ ํ!
์ถ๊ฐ ์ค์ ์์ด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ๋ค์
๋ณด์ ๊ทธ๋ฃน์ EC2 ์ธ์คํด์ค์ ํ์ฉ๋๋ ๋คํธ์ํฌ ํธ๋ํฝ ์ข
๋ฅ๋ฅผ ์ค๋ช
ํ๋ ๋คํฌ์ํน ๊ท์น์ด๋ค.
๋ด๊ฐ ์ถ๊ฐํ ํธ๋ํฝ ์ข
๋ฅ๋ SSH, HTTP, HTTPS, ์ฌ์ฉ์ ์ง์ , MYSQL/Aurora์ด๋ค.
์์ ์์ฑํ ๋ด์ฉ์ ๊ฒํ ํ๋ ๋ถ๋ถ์ผ๋ก ํ์ธ ํ ์ด์ ์์ผ๋ฉด ์์ํ๊ธฐ ํด๋ฆญ
ํค ํ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ SSH๋ฅผ ํตํด ์ก์ธ์คํด์ ์๋ฒ์์ ๋ช
๋ น์ ํ ์ ์๊ฒ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ํ์ํ๋ค.
๊ธฐ์กด์ ์์ฑ๋์ด์๋ ํคํ์ด๊ฐ ์๋ค๋ฉด ๊ธฐ์กด ํคํ์ด๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ๊ฒ ์๋๋ผ๋ฉด ์ ํค ํ์ด ์์ฑ!
์๋ก์ด ํค ํ์ด๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ํ๋ฉด์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ํค ํ์ด ์ด๋ฆ ์ค์ ํ ํค ํ์ด ๋ค์ด๋ก๋
โ
ํค ํ์ด๋ ์ธ๋ถ์ ๋
ธ์ถ๋๋ฉด ์๋๊ณ ์์ด๋ฒ๋ ค๋ ์๋๋ ์ ๊ฒฝ์จ์ ๋ณด๊ด ํ์โ๏ธ
ํค ํ์ด ์ค์ ํ ์ธ์คํด์ค ์์!
์ด๊ธฐ ์์ฑ ์์ ์ธ์คํด์ค ์ํ๊ฐ running ์ํ์ธ๋ฐ ๋ฌธ์ ์๋ค๋ฉด ์ ์ ํ ์คํ ์ค ์ํ๋ก ๋ณํจ!
$ ssh -i "your-pem-file.pem" ec2-user@your-ec2-dns-์ฃผ์
โ๏ธ ๋ง์ฝ ์ฌ๊ธฐ์ Permission Denied ์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด your-pem-file.pem ์ด ํค๊ฐ ์์นํ ๊ณณ์์ ec2์ ์์ ํ๊ฑด์ง ํ์ธํด๋ด์ผ ํ๋ค. ํด๋น ํค๊ฐ ์์นํ ๊ณณ์์ ์ ์ํ๊ฑฐ๋, ํด๋น ํค ๊ฒฝ๋ก๊น์ง ์ ๋ ฅํด์ ์ ์ํ๋ฉด ๋๋ค.
๐ฅฒ ๊ทธ๋๋ ์๋๋ค๋ฉด? ๊ถํ์ ์ค๋ค
$ chmod 600 your-pem-file.pem
$ sudo yum -y update
AWS Linux์ ๊ธฐ๋ณธ์ผ๋ก ์ค์น๋ ์๋ฐ ๋ฒ์ ์ 7์ด๋ฏ๋ก ํด๋น ์๋ฐ ๋ฒ์ ์ ์ง์ฐ๊ณ ํ์ํ ์๋ฐ ๋ฒ์ ์ผ๋ก ์ฌ์ค์น
(์์๋ JAVA 8 ์ค์น)
//JAVA 7 ์ญ์
$ sudo yum remove java-1.7.0-openjdk
โ๏ธ ย ๋ง์ฝ JAVA 7 ๋ฒ์ ์ ์ญ์ ํ๋ ค๊ณ ํ ๋ ์ด๋ฐ ์๋ฌ๊ฐ ๋ํ๋๋ค๋ฉด ํด๋น ์๋ฐ๊ฐ ์ค์น๋์ด ์์ง ์๋ค๋ ๋ป์ด๋ ๊ทธ๋ฅ ๋ฌด์ํ๊ณ ์ํ๋ ์๋ฐ ๋ฒ์ ์ผ๋ก ์ฌ์ค์น ํ๋ฉด ๋๋ค.
//JAVA 8 ์ค์น (์ฌ์ฉ ๊ถ์ฅ โญ๏ธ )
$ sudo yum install java-1.8.0-openjdk-devel.x86_64 -y
//JAVA 8 ์ค์น (javac๊ฐ ํจ๊ป ์ค์น๋์ง ์์ผ๋ ์ฌ์ฉ ๊ถ์ฅ โ ์ด์ ๋ ์๋์ ์ค๋ช
)
//$ sudo yum install java-1.8.0
๐ JAVA8 ์ค์น ์ ๋ช ๋ น์ด ์์ ๐
๊ธฐ์กด์ฒ๋ผ java-1.8.0์ผ๋ก ์ค์นํ๊ฒ ๋๋ฉด javac๊ฐ ์ค์น๋์ง ์๋๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ๋ค.
๋ฐ๋ผ์ ์๋ ๊ธฐ์ฌํ javac๊ฐ ํจ๊ป ์ค์น๋๋ ๋ช ๋ น์ด๋ก ์ค์นํด์ฃผ๊ธฐ ๋ฐ๋๋ค.
(์ด๋ฏธ ์ค์น๋ java๊ฐ ์์ด๋ ์๋ ๋ช ๋ น์ด๋ฅผ ๋ค์ ์ ๋ ฅํ๋ฉด ์์์ ๋ค์ ์ค์น๋๋ค.๐)
$ sudo yum install java-1.8.0-openjdk-devel.x86_64 -y
$ java -version
โ๏ธ ย ๋ง์ฝ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด Java๊ฐ ์ ๋๋ก ์ค์น๋์ด ์์ง ์์๋ค๋ ๋ป์ด๋ ์ฌ์ค์น ํด๋ณด๋ฉด ๋๋ค.
yum์ด jenkins๋ฅผ ์ค์นํด์ผ ํ๋ ๊ณณ์ ์๋ ค์ฃผ๊ธฐ ์ํด ์ถ๊ฐํด์ค์ผ ํ๋ค.
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
Jenkins๋ฅผ ์ค์นํ ๋ ์ ๋ขฐํ ์ ์๋ ์์ค๋ก๋ถํฐ ์ ๊ณต๋๋ ํ์ผ์ด๋ผ๋ ๊ฒ์ ์ฆ๋ช ํ๊ธฐ ์ํด ๋ก์ปฌ GPG ํค๋ง์ Jenkins GPG Key๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋ค.
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install jenkins
โ๏ธ ย ๋๋ ์ค์นํ๋ ๊ณผ์ ์์ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
โ ย ํด๊ฒฐ์ ์ํด EPEL์ ์ค์นํด๋ณด๋ ค๊ณ ํ์ง๋ง ์คํจ โ
โญ๏ธ ย ์์ ์๋ฌ๋ ๋ถ๋ถ์์ ๊ฐ์ด๋ ๋ช ๋ น์ด๋ฅผ ์ค์ ๊ทธ๊ฑธ๋ก ํด๊ฒฐ โ๏ธ
$ sudo amazon-linux-extras install epel
epel ์ค์น ์ค๊ฐ์ ์๋์ ๊ฐ์ด ๋ฌผ์ด๋ณด๋ฉด y๋ผ๊ณ ์
๋ ฅ ํ ์ํฐ ๋๋ฅด๋ฉด ๋๋ค.
โ ย ์ฌ๊ธฐ๊น์ง ํ ํ ๋ค์ Jenkins๋ฅผ ์ค์นํ๋ ค๊ณ ํ์ผ๋ ์คํจโ๏ธโ๏ธ
โญ๏ธ ย NOKEY๋ผ๊ณ ๋์ด์๋๊ฑธ ๋ณด๊ณ Jenkins GPG Key๋ฅผ ๋ค์ ์ค์นํด์ผ ํ๋ ๊ฒ ๊ฐ์์ GPG Key ์ฌ์ค์น ํ Jenkins๋ฅผ ์ค์นํ๋๋ ํด๊ฒฐ๋์๋ค.
// Jenkins GPG Key ์ค์น
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
// Jenkins ์ค์น
$ sudo yum install jenkins
$ sudo service jenkins start
// ๋ช
๋ น์ด ์คํ ์ ์ด๋ ๊ฒ ๋์ค๋ฉด ์ ์
Starting jenkins (via systemctl): [ OK ]
$ netstat -na | grep 8080
// ๋ช
๋ น์ด ์คํ ์ ์ด๋ ๊ฒ ๋์ค๋ฉด ์ ์(EC2 ์ธ์คํด์ค ์์ฑ ์ ์ธ๋ฐ์ด๋ ๊ท์น์ ์ถ๊ฐํ ํฌํธ ๋ฒํธ)
tcp6 0 0 :::8080 :::* LISTEN
ํ๋ฆฌํฐ์ด EC2๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ๋ฉ์ถ ์ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ง์ ์ค์ ํํฐ์
์ ์์ฑํด์ค์ ์ฌ์ฉํ๋ ๋ฐ ์ง์ฅ์ด ์๋๋ก ํด์ค๋ค.
(ํ๋ฆฌํฐ์ด๊ฐ ์๋ ์์ EC2 ์ฌ์ฉํ๋ค๋ฉด ํจ์คํด๋ ๋๋ ๋ถ๋ถ ๐)
// ๋ฉ๋ชจ๋ฆฌ ์ํ ํ์ธ
$free -h
์๋ ์ด๋ฏธ์ง์ฒ๋ผ swap ํ์ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ 0์ธ ๊ฒ์ ํ์ธํด๋ณผ ์ ์๋ค.
// swap ํ์ผ์ ์์ฑํด์ค๋ค. (๋ฉ๋ชจ๋ฆฌ ์ํ ํ์ธ ์ swap์ด ์์์ง๋ง ๋๋ ํ ๋ฆฌ ํ์ผ์ ๋ง๋ค์ด์ค์ผํ๋ค.)
$ sudo mkdir /var/spool/swap
$ sudo touch /var/spool/swap/swapfile
$ sudo dd if=/dev/zero of=/var/spool/swap/swapfile count=2048000 bs=1024
// swap ํ์ผ์ ์ค์ ํ๋ค.
$ sudo chmod 600 /var/spool/swap/swapfile
$ sudo mkswap /var/spool/swap/swapfile
$ sudo swapon /var/spool/swap/swapfile
// swap ํ์ผ์ ๋ฑ๋กํ๋ค.
$ sudo vim /etc/fstab
ํ์ผ์ด ์ด๋ฆฌ๋ฉด ํด๋น ํ์ผ ์๋์ชฝ์ ํ๋จ ๋ด์ฉ ์
๋ ฅ ํ ์ ์ฅ
- ์
๋ ฅ ํ ์ ์๋๋ก ํ๋ ๋ช
๋ น์ด -> i
- ํ์ผ ์์ ํ ์ ์ฅํ๋ ๋ช
๋ น์ด-> escํค ๋๋ฅธ ํ :wq ์
๋ ฅ ํ ์ํฐ
/var/spool/swap/swapfile none swap defaults 0 0
// ๋ฉ๋ชจ๋ฆฌ ์ํ ํ์ธ
$free -h
์ ์ค์ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.๐
http://your-ec2-dns-์ฃผ์:8080 ์ผ๋ก ์ ์ํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋ฌ๋ค.
์๋ ๋ช ๋ น์ด ์คํ ํ ๋์จ ๋ฌธ์์ด์ ๋ณต์ฌํด์ ๋น ์นธ์ ์ ๋ ฅ
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
์ฌ๊ธฐ๊น์ง Jenkins๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ฉด ์ค์ ๊น์ง ์๋ฃํด๋ดค๋ค.
๋๋ ์ฌ๊ธฐ์ Jenkins๊ฐ ์ค์ค๋ก ๋์ปค ์ปจํ
์ด๋๋ฅผ ์ด์ฉํด ๋น๋์ ํ
์คํธ๋ฅผ ํ ์ ์๋๋ก ํ๋ ค๊ณ ํ๋ค.
์ถ๊ฐ๋ก GitLab Webhook์ ์ด์ฉํด์ ์๋ ๋น๋๊น์ง!๐
โโ) ๐ ๋๋ ์ ํจ์ค์ AWS Route53์ ํตํด ๋๋ฉ์ธ์ ์ฐ๊ฒฐํด์ ์ ์ํ๊ธฐ ํธํ๊ฒ ์ค์ ํด๋๋๋ฐ, ๋์ค์ ์ ํํ ๊ธฐ์ตํ๊ธฐ ์ํด ์ถ๊ฐ๋ก ์์ฑํด๋ณธ๋ค.๐
์๋จ ๋ถ๋ถ์ route53์ ๊ฒ์ํด์ ๋์ค๋ ์๋น์ค๋ฅผ ์ ํํ๋ค.
๋๋ฉ์ธ > ๋ฑ๋ก๋ ๋๋ฉ์ธ > ๋๋ฉ์ธ ๋ฑ๋ก ํด๋ฆญ๐ฑ
์ค์ ํ๊ณ ์ถ์ ์ํ๋ ๋๋ฉ์ธ๋ช
์ ์
๋ ฅํ๊ณ , ์ฐ์ธก์ ๋ณด์ด๋ ํ์ฅ์ ์ค ์ํ๋ ๊ฑธ ์ ํํ๋ฉด ๋๋ค.
๋๋ฉ์ธ์ 1๋
๋จ์๋ก ๋ฑ๋ก๋๋ค!
ํ์ฅ์ ์ ํ ์ ๋ณด์ด๋ ๊ธ์ก์ 1๋
์น ์ฌ์ฉ ๊ธ์ก์ผ๋ก ์ข
๋ฅ์ ๋ฐ๋ผ ๊ธ์ก์ด ๋ค๋ฅด๋ค! ์๋ง ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒ ๋น์ธ๊ฒ ์ง๐ฉ
์ํ๋ ๋๋ฉ์ธ๋ช
๊ณผ ํ์ฅ์๋ฅผ ์ ํํ๋ฉด ํด๋น ๋๋ฉ์ธ์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค.
์์ ์ด๋ฏธ์ง๋ ๋ด๊ฐ ์ํ๋ ๋๋ฉ์ธ์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋น์ทํ ๋๋ฉ์ธ์ ์ถ์ฒํด์ฃผ๋ ์ค!
์ด๋ ๊ฒ ์ํ๋ ๋๋ฉ์ธ์ ์ฌ์ฉํ ์ ์๋ค๋ฉด ๋๋ฉ์ธ๋ช
์ ๋ค์ ๋ณ๊ฒฝํ๊ฑฐ๋, ๊ด๋ จ ๋๋ฉ์ธ์์ ๋ง์์ ๋๋ ๋๋ฉ์ธ์ ์ ํํ์ฌ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ๋ค. (์ฐธ๊ณ ๋ก ๋ฑ๋กํ๊ณ ์ ํ๋ ๋๋ฉ์ธ์ ์์ ์ด๋ฏธ์ง์ฒ๋ผ ์ค๋ณต ์ ํ์ด ๊ฐ๋ฅํ๋ค! ๐)
๋ง์ฝ ์ํ๋ ๋๋ฉ์ธ๋ช
์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ฉด ๊ทธ๋๋ก ์ฌ์ฉ ๐ค
์์์ ์
๋ ฅํ ๋๋ฉ์ธ์ ๋ํ ์ฐ๋ฝ์ฒ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์
๋ ฅํ ์ฐ๋ฝ์ฒ ์ค ๋ฉ์ผ ์ฃผ์๋ฅผ ์ธ์ฆํ๋ ๋ถ๋ถ์ ํ์ธํด๋ณผ ์ ์๋ค.
ํด๋น ๋ฉ์ผ๋ก ๋ฐ์ก๋ ๋งํฌ๋ฅผ ์ ํํ์ฌ ์ธ์ฆํ๊ฒ๋๋ฉด ์ฐ์ธก ํ๋จ '์ฃผ๋ฌธ ์๋ฃ' ๋ฒํผ์ด ํ์ฑํ ๋ ๊ฒ์ด๋ค.
ํ์ฑํ ๋๋ฉด ์ ํ!๐ฑ
ํธ์คํ
์์ญ > ํธ์คํ
์์ญ ์์ฑ ํด๋ฆญ๐ฑ
๋ฑ๋กํ ๋๋ฉ์ธ๋ช
์
๋ ฅ ํ ๋๋จธ์ง ์ค์ ์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ํธ์คํ
์์ญ ์์ฑ ํด๋ฆญ๐ฑ
์์ฑ๋ ํธ์คํ
์์ญ์ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์๋ค.
ํด๋น ํธ์คํ
์ ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋๋ฉ์ธ ์ฐ๊ฒฐ์ด ํ์ํ๋ ๋๋ฉ์ธ๋ช
ํด๋ฆญ๐ฑ
AWS EC2 ํผ๋ธ๋ฆญ ์ฃผ์ ๋์ ํธํ๊ฒ ์ฌ์ฉํ๊ณ ์ถ์ ์ฃผ์๋ฅผ ๋ ์ฝ๋ ์ด๋ฆ์ ์
๋ ฅํ๋ค.
๊ฐ ๋ถ๋ถ์๋ AWS EC2 ํผ๋ธ๋ฆญ ์ฃผ์๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค! ํด๋น ์ฃผ์๋ EC2 ์ธ์คํด์ค์์ ํ์ธํ ์ ์๋ค.
๋ ์ฝ๋ ์ด๋ฆ์ผ๋ก ๋ง๋ ์ฃผ์๋ก ์ ์์ด ๋๋ ๊ฒ์ ํ์ธํด๋ณผ ์ ์๋ค!
์ฌ๊ธฐ์์ ๋ค์ 8080 ํฌํธ๊ฐ ๋ถ์ ์ด์ ๋ ํด๋น EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ์ ๋ 8080 ํฌํธ๋ฅผ ์ง์ ํด์ฃผ์๊ธฐ ๋๋ฌธ์ ์ ์ด์ IP์ฃผ์๋ก ์ ์ํ์ ๋์๋ 8080 ํฌํธ๋ฅผ ๋์ผํ๊ฒ ์ฌ์ฉํ ๊ฒ์ด๋ค!
์ฑ๊ณต ๐ค
์ ์ฉํ ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค!! ๋์์ด ๋ง์ด ๋์์ด์! :)