GitHub Action

github action์ด ๋ญ๋ƒ...์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹/ํ‘ธ์‹œ ํ•˜๋ฉด ๊ทธ ํ›„์— ๋ญ”๊ฐ€๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค. ci/cd ๋“ฑ๋“ฑ ๊ผญ ci/cd๊ฐ€ ์•„๋‹ˆ๋”๋ผ๊ณ  ์ปดํŒŒ์ผํ›„ ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ์„ ๋ฐ›์•„๋ณด๊ณ  ์‹ถ๊ฑฐ๋‚˜ s3์— ์˜ฌ๋ฆฌ๊ณ  ์‹ถ๋‹ค ๋“ฑ์˜ ๋ฌด์Šจ์ผ์ด๋“  ํ•˜๊ณ  ์‹ถ์€ ๊ฑธ ์ž๋™ํ™” ํ•ด์ฃผ๋Š” ํˆด์ด๋‹ค.

gitlab ci/cd๋„ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. ์ €๋Š” gitlab ci/cd๊ฐ€ ๋„ˆ๋ฌด ์ข‹์•„์„œ ๊ทธ๊ฒƒ๋งŒ ์ผ๋Š”๋ฐ ์ด๋ฒˆ์— github๋ฅผ ์จ์•ผํ• ์ผ์ด ์ƒ๊ฒจ์„œ ํ™•์ธํ•ด๋ดค๋”๋‹ˆ gitlab์˜ ๊ธฐ๋Šฅ์„ ๋Œ€๋ถ€๋ถ„ ๊ฐ€์ ธ์„œ ๊ตฌํ˜„ํ•ด ๋‘ฟ๋‹ค.

์—ญ์‹œ ์ด๋ฐ”๋‹ฅ์€ ์ข‹์€๊ธฐ๋Šฅ์€ ๋‹ค ๋ฒ ๋ผ๋Š”..^^ ์ฐธ๊ณ ๋กœ gitlab ci/cd๊ฐ€ ๋จผ์ € ๋‚˜์™”๋‹ค.

ํ•ด๋ณด์ž.

workflows

ํ”„๋กœ์ ํŠธ์— .github/workflows ๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์— build.yml์„ ๋งŒ๋“ค์–ด ๋ณด์ž.

cd ~/Desktop/demo-angular
mkdir -p .github/workflows
touch .github/workflows/build.yml
.github/workflows/build.yml
name: CI

on:
  push:
    branches: [main, dev]
  pull_request:
    branches: [main, dev]

  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: ls -alF
        run: |
          ls -alF
          pwd

์ด์ œ ์ปค๋ฐ‹ ํ‘ธ์‹œํ•ด๋ณด์ž.

github์›น์‚ฌ์ดํŠธ์— actionํŽ˜์ด์ง€์— ๊ฐ€๋ณด์ž.

์•ˆ๋ณด์ด๋˜๊ฒŒ ์ƒ๊ธฐ๊ณ  ์„ฑ๊ณตํ–‡๋‹ค๊ณ  ๋ณด์—ฌ์ค€๋‹ค.

ํ™•์ธํ•ด๋ณด์ž. create build.yml์„ ํด๋ฆญ

ํ™”๋ฉด์„ ๋ณด๋ฉด ls -alF๋ฅผ ํ–ˆ๊ณ  pwd๋ฅผ ํ•ด์„œ ํ˜„์žฌ ํด๋”๋ฅผ ํ”„๋ฆฐํŠธ ํ–‡๋‹ค.

์ปค๋ฐ‹์‹œ ๋ญ”๊ฐ€๋ฅผ ํ•ด๋ณด๋Š”๊ฑฐ๊นŒ์ง€๋Š” ์„ฑ๊ณต

yml์„ ์„ค๋ช…์„ ์ข€ ํ•ด๋ณด๋ฉด

push๋‚˜ Pull_request์— main ๋ธŒ๋žœ์น˜๋‚˜ dev๋ธŒ๋žœ์น˜์—๋งŒ ์ด workflow๊ฐ€ ๋™์ž‘ํ•œ๋‹ค.

์ด๋ฏธ์ง€๋Š” ubuntu-latest ๋ฅผ ๊ฐ€์ง€๊ณ  ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

name์€ ์‚ฌ๋žŒ๋“ค์ด ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ์จ์ฃผ๋ฉด ๋ ๊ฑฐ๊ฐ™๊ณ  run์œผ๋กœ ์‹ค์ œ ์ปค๋งจ๋“ค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

๋Œ€์ถฉ ์ดํ•ดํ–‡์œผ๋‹ˆ ๋‹ค์Œ๋‹จ๊ณ„๋กœ ๊ฐ€๋ณด์ž.

sample project ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ์— angular ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด๋ณด์ž.

์ปค๋ฐ‹/push

์†Œ์Šค์ฝ”๋“œ๋ฅผ checkout

์ถ”๊ฐ€ํ•˜๊ณ  ์ปค๋ฐ‹/ํ‘ธ์‹œ ํ•ด๋ณด์ž.

runner๊ฐ€ git checkout ์„ ํ•˜๊ณ  ls -alF๋ฅผ ํ•ด์„œ ๋‚ด์šฉ์ด ํ™•์ธ๋œ๋‹ค.

build

  1. nodejs 12 ๋ฒ„์ „์„ ์ด์šฉ

  2. @angular/cli ๊ฐ€ ๊ธ€๋กœ๋ฒŒ๋กœ ์„ค์น˜

  3. npm package install

  4. project build

์ปค๋ฐ‹/ํ‘ธ์‹œ ํ•˜๊ณ  ์•ก์…˜์„ ์ฒดํฌํ•ด๋ณด์ž.

์„ค๋ช…์„ ํ•˜๋ฉด actions/setup-node@v2.1.5 ์ด๊ฒƒ๋งŒ ์„ค๋ช…ํ•˜๋ฉด๋ ๋“ฏ ์‹ถ๋‹ค.

github action์€ ๋งˆ์ผ“ ํ”Œ๋ ˆ์ด์Šค์— ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“ค์–ด์„œ ํŠน์ • ์•ก์…˜์„ ๊ณต์œ ํ•ด๋‘”๊ณณ์ด ์žˆ๋‹ค. ์•„์ฃผ ๋งŽ์€ ๋ถ€๋ถ„๋“ค์ด ๋ฒŒ์จ ๋งŒ๋“ค์–ด์ ธ ์žˆ์–ด์„œ ๊ทธ๊ฑธ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์–ด์„œ ์•„์ฃผ ํŽธํ•˜๋‹ค. ๊ฐœ์ธ๋“ค์ด ๋งŒ๋“ ๊ฒƒ๋„ ์žˆ๊ณ  ํŠน๋ณ„ํ•œ๊ฒƒ๋“ค์€ ๊นƒํ—ˆ๋ธŒ์—์„œ ์ง์ ‘ ๋งŒ๋“ค์–ด๋‘”๊ฒŒ ์žˆ๋‹ค.

https://github.com/marketplace?type=actions

์œ„ ์ปค๋งจ๋“œ๋Š” nodejsํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด์ฃผ๋Š” ์•ก์…˜์ธ๋ฐ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋œ๋‹ค.

๋งˆ์ง€๋ง‰ @ ๋‹ค์Œ์—๋Š” ๋ฒ„์ „์„ ์“ฐ๋ฉด๋˜๋Š”๋ฐ ์ตœ์‹  ๋‚ด์šฉ์„ ๋ณด๊ณ ์‹ถ์œผ๋ฉด ๊นƒํ—™ ํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค.

๋ฒ„์ „์„ ๊ณจ๋ผ์„œ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.

๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋ฌ์œผ๋‹ˆ ํ™•์ธํ•ด๋ณด์ž.

node 12.x๊ฐ€ ์ž˜ ์„ค์น˜๊ฐ€ ๋˜์—ˆ์œผ๋ฉฐ ์ปค๋งจ๋“œ๋“ค๋„ ์ž˜ ์‹คํ–‰์ด ๋œ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค.

artifact (๊ฒฐ๊ณผ๋ฌผ)์„ ๋ฐ›์•„๋ณด์ž

๋นŒ๋“œํ•˜๊ณ ๋‚˜๋ฉด distํด๋”์— ๊ฒฐ๊ณผ๋ฌผ์ด ์ƒ๊ธด๋‹ค ์ด๊ฑธ ์•ก์…˜ ํŽ˜์ด์ง€์—์„œ ๋‹ค์šด๋ฐ›์„์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์ž.

ํ˜„์žฌ ์œ„์น˜๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด pwd ์™€ ls๋ฅผ ์‹คํ–‰ํ•ด๋ดค๋‹ค.

ํ•ด๋ณด์ž.

ํ˜„์žฌ ํด๋”๋ฅผ /home/runner/work/github-action/github-action ์ด๊ณ  dist๊ฐ€ ๋นŒ๋“œ๋˜์„œ ์ƒ์„ฑ๋œ๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜ ์žˆ๋‹ค.

Artifact๊ฐ€ ์—…๋กœ๋“œ ๋œ๊ฒƒ์„ ์•Œ์ˆ˜ ์žˆ๋‹ค.

ํด๋ฆญํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ๋‚ด์šฉ์„ ํ™•์ธํ•ด๋ณด์ž.

์ •ํ™•ํžˆ ๋นŒ๋“œ๋œ๊ฒƒ์„ ์•Œ์ˆ˜ ์žˆ๋‹ค.

๋Œ€์ถฉ ์ด์ •๋„๋กœ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ๋ญ๋ฅผ ํ•ด๋ณผ๊ฐ€?

๋นŒ๋“œํ›„ s3์— ์—…๋กœ๋“œ๋ฅผ ํ•ด๋ณผ๊ฐ€์š”?

main๋ธŒ๋žœ์น˜ ๋ง๊ณ  dev๋ธŒ๋žœ์น˜

์ผ๋‹จ ํ”„๋กœ์ ํŠธ์— dev ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค.

dev์‹œ์— ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ ์ˆ˜์žˆ๊ฒŒ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์ฐธ๊ณ ๋กœ ํŠน์ • ์•ก์…˜์ด ํŠน์ • ๋ธŒ๋žœ์น˜์—๋งŒ ์‹คํ–‰์ด ๋˜์•ผํ•˜๋ฉด if๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค. if: github.ref == 'refs/heads/dev'

[ci skip]

commit ์— [ci skip]์„ ๋ณด๋‚ด๋ฉด ci๋ฅผ ์Šคํ‚ตํ• ์ˆ˜ ์žˆ๋‹ค.

s3 ์—…๋กœ๋“œ

์ผ๋‹จ ๋งˆ์ผ“ ํ”Œ๋ ˆ์ด์Šค์—์„œ s3๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐพ๋Š”๋‹ค.

https://github.com/marketplace/actions/s3-sync

์ด๊ฒŒ ์ข‹์„๊ฑฐ๊ฐ™๋‹ค.

ํ•ด๋ณด์ž.

s3์— ๋ฒ„ํ‚ท์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋‘๊ณ  ์œ ์ €๋ฅผ ์ƒ์„ฑํ•ด์„œ s3 full๊ถŒํ•œ์„ ์ค€๋‹ค.

์ด์ •๋„ ํ•˜๋ฉด s3๋กœ ์—…๋กœ๋“œ๊ฐ€ ๋œ๋‹ค.

argocd์ฒ˜๋Ÿผ ๋‹ค๋ฅธ github ํ”„๋กœ์ ํŠธ์— ์ปค๋ฐ‹ํ•˜๊ธฐ

๋นŒ๋“œํ•˜๊ณ  artifact๋ฅผ ์—…๋กœ๋“œ ํ•˜๊ณ  argocd์— ํ”„๋กœ์ ํŠธ์— ์ปค๋ฐ‹์„ ํ•ด์•ผํ•˜๋Š”๊ฒฝ์šฐ ์ƒˆํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์ฒดํฌ์•„์›ƒ ๋ฐ›๊ณ  ํ•„์š”ํ•œ ์ž‘์—…์„ ํ•˜๊ณ  ๋‚œํ›„ ๋‹ค์‹œ ์ปค๋ฐ‹ํ•˜๋ฉด๋œ๋‹ค.

์—ฌ๊ธฐ์—์„œ PAT๋ผ๋Š”๊ฒŒ ์ž‡๋Š”๋ฐ ์ด๊ฑด github person access token์ด๋ผ๋Š”๊ฒƒ์ด๋‹ค. user >> setting์— ๊ฐ€๋ฉด

developer setting์ด ์ž‡๋Š”๋ฐ ๊ทธ๊ฑธ ๋ˆ„๋ฅด๋ฉด access token์„ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค. ๋งŒ๋“ค๋•Œ ๊ถŒํ•œ์„ ์ค˜์•ผํ•˜๋Š”๋ฐ repo์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ด๋ณด์ธ๋‹ค. ์ƒ์„ฑํ›„ $ ๋„ค ๋„ฃ์–ด์ฃผ๊ฑฐ๋‚˜ setting์— ๋„ฃ์–ด์ค˜๋„ ๋œ๋‹ค.

์ „์ฒด ์•ต๊ทค๋Ÿฌ ๋นŒ๋“œ ํŒŒ์ผ

Last updated

Was this helpful?