[TIL] Github Actions
๐๐ป Github Actions
- ๊นํ๋ธ๊ฐ ๊ณต์์ ์ผ๋ก ์ ๊ณตํ๋ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํ ํ ์ ์๋ CI / CD ํ๋ซํผ
- ๋ ํฌ์งํ ๋ฆฌ์์ Pull Request๋ Push ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ๋ก Github ์์ ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์
* Work Flow : ์ํฌํ๋ก์ฐ
- ํ๋ ์ด์์ ์์ ์ด ์คํ๋๋ ์๋ํ ํ๋ก์ธ์ค
- ๊ฐ ์์ ์ ์์ฒด ๊ฐ์ ๋จธ์ ๋๋ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋จ
- .yml / .yaml ํ์ผ์ ์ํด ๊ตฌ์ฑ๋จ
- ํ ์คํธ, ๋ฐฐํฌ ๋ฑ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ์ํฌํ๋ก์ฐ๋ฅผ ๋ง๋ค ์ ์์
- ์์ฑ๋ ์ํฌํ๋ก์ฐ๋ .github/workflows์ ์์นํจ
- ๋น๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ์ ๊ฒฝ์ฐ Github Actions๊ฐ ์๋ํ ๋์ ์ฉ๋๊ณผ ์๊ฐ์ด ์ ํ๋์ด ์์
- ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ์ ๊ฒฝ์ฐ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
๐ Github Actions๋ฅผ ํตํ ๋ฐฐํฌ Flow
โ Github Acitons
- ์ค์ ํ์ผ(.yml)์ ๋ฐ๋ผ Github Repository์ ํน์ ๋ณ๋์ฌํญ์ ํธ๋ฆฌ๊ฑฐ๋ก ์๋๋จ
โก S3
- Github Actions๋ฅผ ํตํ ๋ฐฐํฌ ์๋ํ ์ ์ฅ์๋ก์จ ์ฌ์ฉ๋จ
- Github Actions์์ ๋น๋ํ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ถ๋์ด S3์ผ๋ก ์ ์ก๋๊ณ ๋ฒํท์ ์ ์ฅ
โข Code Deploy
- Github Actions์์ ๋ฐฐํฌ ๋ช ๋ น์ ๋ฐ์ Code Deploy๋ S3์ ์ ์ฅ๋์ด์๋ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ EC2 ์ธ์คํด์ค๋ก ์ด๋ํจ
- ํ๋ก์ ํธ ์ต์๋จ์ ์์นํ appepec.yml ํ์ผ์ ์ํด ์ ์คํฌ๋ฆฝํธ ๋ฑ ๋จ๊ณ์ ๋ฐ๋ผ ํน์ ๋์
โฃ EC2
- Code Deploy์ ์ํด ๋น๋ ๊ณผ์ ์ ๊ฑฐ์น ํ๋ก์ ํธ๊ฐ EC2 ์ธ์คํด์ค๋ก ์ ๋ฌ๋๊ณ .yml(์ค์ ํ์ผ)๊ณผ .sh(์ ์คํฌ๋ฆฝํธ)์ ์ํด
๊ฐ ๋ฐฐํฌ ๊ฒฐ๊ณผ๋ฅผ ๋ก๊ทธ์ ์ ์ฅํ๋ฉฐ ๋น๋ํ์ผ(.jar)์ ์์ฑ
๐ ๋ฆฌ์์ค ์ค์ ํ๊ธฐ
โ S3 ์์ฑ
- ๋น๋์ ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ฅํ S3 ๋ฒํท ์์ฑ
S3 ๋ฉ์ธ ํ๋ฉด - [๋ฒํท ๋ง๋ค๊ธฐ] - ๋ฒํท ์ด๋ฆ ๋ฐ ๋ฆฌ์ ์ ํ
โก Github Actions ์์ฑ
- ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋น๊ณต๊ฐ์ธ ๊ฒฝ์ฐ Github Actions ์ฌ์ฉ์ ์ ํ์ด ์์ ์ ์์ → ๊ณต๊ฐ ์ถ์ฒ
- ์์ฑํ ๋ ํฌ์งํ ๋ฆฌ์ Owner๋ ๊ฐ์ธ ๊ณ์ ์ด์ฌ์ผ ํจ
- ๋ธ๋ผ์ฐ์ ์์ ์์ ์ฌํญ์ Commit ํ๋ฉด Push ๊น์ง ์งํ๋์ด Github Actions๊ฐ ๋ฐ๋ก ์คํ๋จ
* public Repository ์์ฑ
[Github] - [Repository]ํญ - [New] - ๋ ํฌ์งํ ๋ฆฌ์ Owner ์ค์ - Public ์ค์
[Actions]ํญ - Gradle ๋น๋๊ฐ ๊ธฐ๋ณธ์ธ [Java with Gradle]์ Configure ์ ํ
- [Start Commit] - [Commit new file]
- gradle.yml ํ์ผ์ด ์์ฑ๋จ๊ณผ ๋์์ ์ํฌํ๋ก์ฐ์ ์์ฑ๋์ด์๋ํธ๋ฆฌ๊ฑฐ๋ก ์ธํด Github Actions๊ฐ ์คํ๋จ
โข Github Action ์์ - Github Secret ๋ฑ๋กํ๊ธฐ
- Github Actions์์ ์ํฌํ๋ก์ฐ๋ฅผ ์คํํ๋ ๊ณผ์ ์์ ์ก์ธ์ค ํค๊ฐ ํ์ํ์ง๋ง ๊ณต๊ฐ๋๋ฉด ๋ณด์ ์ด์ ๋ฐ์ ๊ฐ๋ฅ
→ ๋๋ฌธ์ Github Secret์ ์ด์ฉํด ์ก์ธ์ค ํค ๊ฐ์ ์ ์ฅํ ํ ์ฌ์ฉ
[Setting]ํญ - [Secrets] - [Actions] - [New Repository secret]
๐ ๋น๋ ํ์ผ ๋ฐฐํฌ ๋ฐ ์คํ
โ CodeDeploy ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ
- S3์ ์ ์ฅ๋ ๋น๋ ํ์ผ์ EC2 ์ธ์คํด์ค๋ก ์ ๋ฌํ๊ธฐ ์ํด CodeDeploy ์ค์ ์งํ
* AWS CodeDeploy
[๊ฐ๋ฐ์๋๊ตฌ] - [์ ํ๋ฆฌ์ผ์ด์
] - [์ ํ๋ฆฌ์ผ์ด์
์์ฑ]
- ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ ์์ฑ ๋ฐ ์ปดํจํ
ํ๋ซํผ : EC2/์จํ๋ ๋ฏธ์ค ์ ํ
โก ๋ฐฐํฌ ๊ทธ๋ฃน ์์ฑ
* AWS CodeDeploy
[๊ฐ๋ฐ์๋๊ตฌ] - [์ ํ๋ฆฌ์ผ์ด์
] - [๋ฐฐํฌ ๊ทธ๋ฃน ์์ฑ]
- ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณด ํ์ธ - ๋ฐฐํฌ ๊ทธ๋ฃน ์ด๋ฆ ์
๋ ฅ - ์๋น์ค ์ญํ (IAM role) ์ ํ
- Amazon EC2 ์ธ์คํด์ค ์ ํ - ํ๊ทธ์ ํค ๊ฐ ์ ํ - [๋ก๋ ๋ฐธ๋ฐ์ฑ ํ์ฑํ] ์ฒดํฌํด์ - [๋ฐฐํฌ ๊ทธ๋ฃน ์์ฑ]
โข .yml ํ์ผ ์ค์
- ์ต์์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ appspec.yml ํ์ผ ์์ฑ
- scripts ํด๋ ์์ฑํ ํ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ deploy.sh ํ์ผ ์์ฑ
๐ ๋ฐฐํฌ ๊ฒฐ๊ณผ ๋ฐ ๋ก๊ทธ ํ์ธ
โ ๋ฐฐํฌ ๊ฒฐ๊ณผ ํ์ธ
* AWS ์ธ์คํด์ค
์ธ์คํด์ค ๋ง๋ ๊ฑฐ ์ฐพ๊ณ ํผ๋ธ๋ฆญ IPv4 DNS ์ฃผ์ ์ฐพ๊ธฐ
โก ๋ฐฐํฌ ๋ก๊ทธ ํ์ธ
๐ AWS IAM Service
- AWS ๋ด์์ ์๊ฒฉ์ฆ๋ช ์ ๋ํด ์ง์ํ๊ณ ์ ์ดํจ
- User์ User Group ์ค์ ์ ํตํด AWS ๊ณ์ ์ ๋ํ ๋ฆฌ์์ค ์ ๊ทผ๊ณผ ๊ด๋ฆฌ ๊ถํ์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋ถ์ฌ
+ Role ์ค์ ์ ํตํด AWS ์๋น์ค ๊ฐ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์์
๐ก IAM : AWS Identity and Access Management
- AWS ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์์ ํ๊ฒ ์ ์ดํ ์ ์๋ ์น ์๋น์ค
- IAM์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ธ์ฆ(๋ก๊ทธ์ธ) ๋ฐ ๊ถํ ๋ถ์ฌ๋ ๋์์ ์ ์ดํจ