๐ง ๋ฌธ์ ์ํฉ
๋งค์ผ ์๋ฒฝ 5์๋ง๋ค ํ๋ฌํฐ ํ๋ก์ ํธ develop ๋ธ๋์น์์ ๋จ์ํ
์คํธ๋ฅผ ์คํ์ํค๊ณ ์ ํ๋ค.
1. ์ด๋ฅผ ์ํด EC2์ ๋์ปค๋ก ์ ํจ์ค๋ฅผ ๋ฐฐํฌํ๋ค.
2. Flutter ๋ Docker Hub ์ ๋ง๋
ํ ์ด๋ฏธ์ง๊ฐ ์์ด์ (๊ฐ์ธ์ด ์ฌ๋ ค๋์ ํ๋ฌํฐ ์ด๋ฏธ์ง๊ฐ ์๊ธดํ๋๋ฐ ์คํ์๊ฐ ์๋ ๋ฎ์ ์ ๋ขฐํ๊ธฐ ์ด๋ ค์ ๋ค.) EC2 ๋ก์ปฌ์ ์ง์ ์ค์นํ์ํ์๋ค.
์ด ์ํ์์ ํ์ดํ๋ผ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ build ๋ฅผ ํด๋ณด์๋๋ ์ ํจ์ค๊ฐ flutter ํ์ผ์ ์ฐพ์ง๋ชปํ๊ณ failureํด๋ฒ๋ฆฌ๋ ์ด์๊ฐ ๋ฐ์ํ๋ค.
โบ๏ธ ๋ฌธ์ ์์ธ ๋ถ์ ๋ฐ ํด๊ฒฐ
Jenkins๊ฐ Docker ์ปจํ
์ด๋๋ก ์คํ๋๋ฉด, ์ปจํ
์ด๋๋ ์์ฒด ๊ฒฉ๋ฆฌ๋ ํ์ผ ์์คํ
์ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์, EC2 ๋ก์ปฌ์ ์ค์น๋ Flutter์ Android SDK ๊ฒฝ๋ก๋ฅผ ์ธ์ํ์ง ๋ชปํ๊ณ , flutter ๋ช
๋ น์ ์คํํ ์ ์๋ ์ํฉ์ด ๋ฐ์ํ๋ค. ์ด๋ฅผ ์ ๋ฆฌํ๋ฉด
- Flutter ๋ฐ Android SDK ๊ฒฝ๋ก ๋ง์ดํธ ๋ฏธ์ค์
Docker ์ปจํ ์ด๋์์ EC2 ํธ์คํธ์ /home/ec2-user/flutter ๋ฐ /home/ec2-user/android-sdk ๊ฒฝ๋ก๋ฅผ ์ ๊ทผํ์ง ๋ชปํจ. - ํ๊ฒฝ ๋ณ์ ๋๋ฝ
Jenkins Pipeline์์ Flutter์ Android SDK ๊ฒฝ๋ก๋ฅผ PATH์ ํฌํจํ์ง ์์. - ๊ถํ ๋ฌธ์
EC2 ๋ก์ปฌ ๋๋ ํ ๋ฆฌ๋ฅผ Jenkins Docker ์ปจํ ์ด๋๊ฐ ์ฝ๊ณ ์ธ ์ ์๋๋ก ์ค์ ํ์ง ์์.
์ ๋ฌธ์ ํด๊ฒฐ์ ์ํด Docker๋ฅผ ํตํด ์คํ๋๋ Jenkins ์ปจํ ์ด๋์์ ํธ์คํธ์ Flutter ๋ฐ Android SDK๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ์ค์ ํ๋ค.
๋ณผ๋ฅจ์ด๋?
๋์ปค ์ปจํ ์ด๋๋ ๊ทธ ์์ฒด๋ก ๊ฒฉ๋ฆฌ๋ ์ ์ฅ ๊ณต๊ฐ ํ๊ฒฝ์ผ๋ก ํธ์คํธ ์์คํ ๊ณผ ๋ถ๋ฆฌ๋ ํ์ผ ์์คํ ์ ์ฌ์ฉํ๋ค.
๋์ปค๋ ์ด์์ฑ(portability)์ด ์๋ช ์ด๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๋ ์ด๋์๋ ๋์ผํ๊ฒ ์๋ํดํ๊ณ (์: ๋ก์ปฌ, ํด๋ผ์ฐ๋, ๋ค๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ) ๋ง์ฝ ์ปจํ ์ด๋๊ฐ ํน์ ํธ์คํธ์ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ์์กดํ๋ค๋ฉด, ๋ค๋ฅธ ์์คํ ์ผ๋ก ์ฎ๊ฒผ์ ๋ ๋์ผํ๊ฒ ์๋ํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์๊ฒจ๋ฒ๋ฆฐ๋ค.
๋ฐ๋ผ์ ๋์ปค ์ด๋ฏธ์ง์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋์ง ์๋๋์ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ด๋ฅผ ์ฐธ์กฐํด์ ์ฐ๊ฒ ๋๋๋ฐ ์ด๋ฌํ ๊ณต๊ฐ์ "๋์ปค๋ณผ๋ฅจ"์ด๋ผ๊ณ ํ๋ค. ์ฆ ๋์ปค ๋ณผ๋ฅจ์ ์ปจํ ์ด๋ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋์ปค์ ๋ด์ฅ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด๋ค. ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋๋ผ๋ ๋ณผ๋ฅจ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ ์ง๋๋ค. ์ฃผ์ ํน์ง์ ์๋์ ๊ฐ๋ค.
- ์ปจํ ์ด๋์ ์๋ช ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ค.
- ๋์ปค๊ฐ ๊ด๋ฆฌํ๋ ํน์ ์์น์ ์ ์ฅ๋๋ค (/var/lib/docker/volumes/).
- ์ปจํ ์ด๋ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ง์ดํธ๋?
๋ฆฌ๋ ์ค๋ ๋จ์ผ ๋ฃจํธ ํ์ผ ์์คํ (/)์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค๋ค. ์ธ๋ถ ์ฅ์น(๋์คํฌ, USB ๋ฑ)๋ ์ถ๊ฐ ๋์คํฌ ํํฐ์ ์ ์ฌ์ฉํ๋ ค๋ฉด, ์ด๋ฅผ ๋ฆฌ๋ ์ค์ ํ์ผ ์์คํ ํธ๋ฆฌ์ ์ฐ๊ฒฐํด์ผ ํ๋ค.์ด๋ ๋ง์ดํธ๋ ์ธ๋ถ ์ ์ฅ ์ฅ์น๋ ํ์ผ ์์คํ ์ ๋ฆฌ๋ ์ค์ ํน์ ๋๋ ํ ๋ฆฌ(๋ง์ดํธ ์ง์ , Mount Point)์ ์ฐ๊ฒฐํ๋ค. ๋ง์ดํธ๋ ์ฅ์น์ ๋ฐ์ดํฐ๋ ๋ง์ดํธ ์ง์ ๋๋ ํ ๋ฆฌ๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค.
๊ป๋ฐ๊ธฐ๋ผ ๋ณผ ์ ์๋ ๋์ปค์ด๋ฏธ์ง๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ์ธ๊ฐ์ง ๊ฒฝ๋ก์ด๋ค. BindMount ๋ฅผ ํตํด ํธ์คํธ ํ์ผ ์์คํ ๊ณผ ์ง์ ์ฐ๊ฒฐํ์ฌ ํธ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ, tmpfs mount๋ฅผ ํตํด ๋จ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๋์ปค ๋ณผ๋ฅจ ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ผ๋จ ํ๋ฌํฐ SDK๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ๋จ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ๊ฐ ์๋ ๋์ปค๋ณผ๋ฅจ or Bindmount ๋๊ฐ์ง ๋ฐฉ๋ฒ์ค ํ๋๋ฅผ ์ ํํด์ผํ๋ค. ์ด์ค ๋ด๊ฐ ์ ํํ ๋ฐฉ๋ฒ์ ๋์ปค ๋ณผ๋ฅจ ๋ง์ดํธ๋ฅผ ํตํ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด์๋ค.
๋์ปค ๋ณผ๋ฅจ๊ณผ BindMount ์ฐจ์ด
๋์ปค ๋ณผ๋ฅจ์ Docker๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ๋ค(var/lib/docker/volumes/). ๋ฐ๋ผ์, ๋ก์ปฌ ๊ฒฝ๋ก์ ์์กดํ์ง ์๊ณ , ์ปจํ ์ด๋๊ฐ ์คํ๋๋ ํ๊ฒฝ์ด ์ด๋๋ ๋์ผํ๊ฒ ์๋ํ๋ค. ๋ง์ฝ ๋ฐ์ธ๋ ๋ง์ดํธ๋ ํธ์คํธ์ ํน์ ๊ฒฝ๋ก๋ฅผ ์๊ตฌํ๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ ๊ฐ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฌผ๋ก ๋ฐ์ธ๋ ํธ์คํธ๋ก ํ๊ฒ ๋๋ฉด ๋ก์ปฌ ํ์ผ์ ์ค์๊ฐ์ผ๋ก ์ปจํ ์ด๋์์ ์ฐธ์กฐํ ์ ์์ผ๋ฏ๋ก SDK์ ๋ณํ๊ฐ ์๊ธด๋ค๊ฑฐ๋ ์ ๋ฐ์ดํธ๋๋ฉด ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํ์ง ์์๋ ๋ฐ๋ก ๋ฐ์๋๋ค๋ ๊ฒ๊ณผ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ ๋ณต์ฌ ๊ณผ์ ์ด ์๋ค๋๊ฒ ์ฅ์ ์ด๊ธฐ๋ ํ์ง๋ง ๋์ปค์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ธ ์ด์์ฑ์ด ํผ์๋์ด์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋์ปค ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋๊ฒ ๋ ๋์ ํ๋จ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ค์ ๋ฌธ์ ํด๊ฒฐํ ๊ณผ์ ์ ์๋์ ๊ฐ๋ค.
1. Docker ์ปจํ ์ด๋ ์คํ ์ ๋ณผ๋ฅจ ๋ง์ดํธ
Jenkins ์ปจํ ์ด๋ ์คํ ์ ์๋์ ๊ฐ์ด ํธ์คํธ์ Flutter ๋ฐ Android SDK ๊ฒฝ๋ก๋ฅผ ์ปจํ ์ด๋์ ๋ง์ดํธํ๋ค
sudo docker run \
-d \
-p 8080:8080 \
-v /var/jenkins_home:/var/jenkins_home \
-v /home/ec2-user/flutter:/home/ec2-user/flutter \
-v /home/ec2-user/android-sdk:/home/ec2-user/android-sdk \
jenkins/jenkins:lts
2. Jenkins Pipeline์์ ํ๊ฒฝ ๋ณ์ ์ค์
Jenkins Pipeline์์ Flutter์ Android SDK ๊ฒฝ๋ก๋ฅผ ์ธ์ํ ์ ์๋๋ก, ์๋์ ๊ฐ์ด environment ๋ธ๋ก์์ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ๋ค:
pipeline {
agent any
environment {
PATH = "/home/ec2-user/flutter/bin:/home/ec2-user/android-sdk/tools:/home/ec2-user/android-sdk/platform-tools:$PATH"
}
stages {
stage('Environment Check') {
steps {
sh 'flutter --version'
sh 'adb --version'
}
}
// ๊ธฐํ ์คํ
์ด์ง ์๋ต
}
}
3. Jenkins ์ปจํ ์ด๋์ ๊ถํ ๋ฌธ์ ํด๊ฒฐ
Flutter์ Android SDK๊ฐ Jenkins ์ปจํ ์ด๋ ๋ด์์ ์ ๋๋ก ์ฝํ๊ณ ์ฐ์ผ ์ ์๋๋ก ๋๋ ํ ๋ฆฌ ๊ถํ์ ์ค์ ํ๋ค.
sudo chown -R 1000:1000 /home/ec2-user/flutter
sudo chown -R 1000:1000 /home/ec2-user/android-sdk
์ฌ๊ธฐ์ 1000:1000์ Jenkins Docker ์ปจํ ์ด๋์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน ID์ด๋ค. ์ด๋ ์ปจํ ์ด๋ ๋ด์์ Jenkins๊ฐ ํ์ผ ์ ๊ทผ์ ๋ฌธ์ ๊ฐ ์๋๋ก ๋ณด์ฅํ๋ค.
์์๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก Jenkins Docker ์ปจํ ์ด๋๊ฐ EC2 ๋ก์ปฌ์ Flutter ๋ฐ Android SDK๋ฅผ ์ ๋๋ก ์ธ์ํ ์ ์๋๋ก ๋ณผ๋ฅจ ๋ง์ดํธ์ ํ๊ฒฝ ๋ณ์ ์ค์ ์ ์๋ฃํ ์ ์์๋ค :)