Study/Java

[TIL] Github Actions

hong- 2022. 8. 8. 16:52

๐Ÿ‘๐Ÿป 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์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ธ์ฆ(๋กœ๊ทธ์ธ) ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋œ ๋Œ€์ƒ์„ ์ œ์–ดํ•จ