Github Actions๋Š” ์ข‹๋‹ค.

6110 ๋‹จ์–ด SSHGitHubActionsGitHub
์™œ ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.



์ง€๊ธˆ๊นŒ์ง€ CodeCommit์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค๋งŒ, ๋ฉค๋ฒ„๋กœ๋ถ€ํ„ฐ ํ’€๋ฆญ ๋ณด๊ธฐ ์–ด๋ ต๋‹ค๊ณ  ๋ถˆํ‰์ด ์žˆ์—ˆ์œผ๋ฏ€๋กœ, CodeCommit์—์„œ GitHub๋กœ ํ™˜์Šนํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ๊ณผ์ •์—์„œ ์†Œ์†Œํ•˜๊ฒŒ ํ•˜๊ณ  ์žˆ๋˜ ๊ฐœ๋ฐœ ๊ธฐ๋ฐ˜์ด๋‚˜ ๋ฆด๋ฆฌ์Šค ๊ธฐ๋ฐ˜์˜ ์ •๋น„๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ, ๊ทธ ์ค‘์—์„œ ์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ๊ท€์ฐฎ๋„ค์š”, ๋ผ๊ณ  ํ•˜๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ๋˜์–ด, ๋ชจ์ฒ˜๋Ÿผ์ด๋ฏ€๋กœ ์ž๋™ ๋ฐฐํฌ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์–ด, ๊ทธ ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ›„๋ณด์— ์˜ค๋ฅธ ๊ฒƒ์ด GitHub Actions์ž…๋‹ˆ๋‹ค.

GitHub Actions์˜ ์ง€๊ฒฌ์€ ๊ฑฐ์˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค๋งŒ, ์ฐฉ์ˆ˜ํ•˜๊ณ  ๋‚˜์„œ 1~2์‹œ๊ฐ„ ์ •๋„๋กœ ์ž๋™ ๋ฐฐํฌ์˜ Action์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฏ€๋กœ, ์—ฌ๊ธฐ์—์„œ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๊ทธ ์žฅ์ ์„ ์†Œ๊ฐœํ•˜๋ ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

GitHub Actions์˜ ํŽธ๋ฆฌํ•จ



์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ํŠนํžˆ ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ ํŠน์ง•์ด ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • job์ด YAML๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ๊ธฐ๋ณธ์ ์œผ๋กœ GitHub์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ƒ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰
  • secrets๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • job์ด yaml๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



    YAML LOVE์˜ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๊ธฐ์˜๋‹ค.
    GitHub Actions์˜ ์„ค์ •์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ดํ•˜, .github/workflows ๋””๋ ‰ํ† ๋ฆฌ์— YAML ํŒŒ์ผ์„ ๋‘๊ณ , GitHub์ƒ์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— push ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์™„๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

    ์ดํ•˜, ํ• ๋กœ์™€

    github/workflows/sample.yml
    # This is a basic workflow to help you get started with Actions
    
    name: Deploy
    
    # Controls when the action will run. Triggers the workflow on push or pull request 
    # events but only for the master branch
    on:
      push:
        branches: [ develop ]
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      # This workflow contains a single job called "build"
      sample-deploy:
        # The type of runner that the job will run on
        runs-on: ubuntu-latest
    
        # Steps represent a sequence of tasks that will be executed as part of the job
        steps:
        # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
        - uses: actions/checkout@v2
    
        # task
        - name: echo
          run: echo "Hello World"
    

    YAML์„ ์–ด๋Š ์ •๋„ ๋“ค๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์ง๊ด€์ ์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ ์ƒ๊ฐํ•˜๊ณ , ๊ตฌ๋ฌธ๋„ ๋งค์šฐ ์•Œ๊ธฐ ์‰ฝ๊ณ  ์ข‹๋‹ค. ์ข‹์€.

    ์‰ฝ๊ฒŒ GitHub์™€ ์—ฐ๋™ ๊ฐ€๋Šฅ



    GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์ƒ, ๋ธŒ๋žœ์น˜์˜ merge๋‚˜ push๋ฅผ ๊ณ„๊ธฐ๋กœ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค๋งŒ, ๊ทธ ์ ์„ GitHub Actions์˜ ๊ธฐ์ˆ ์€ ๊ฝค ๊ฐ„์ดํ™”๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    github/workflows/sample.yml
    # developใธใฎpushใ‚’ๅฅ‘ๆฉŸใซๅฎŸ่กŒ
    on:
      push:
        branches: [ develop ]
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      # This workflow contains a single job called "build"
      sample-deploy:
        # The type of runner that the job will run on
        runs-on: ubuntu-latest
    
        # developใƒ–ใƒฉใƒณใƒใ‚’$GITHUB_WORKSPACEใซcheckout
        - uses: actions/checkout@v2
    

    git ๋ช…๋ น์ด๋‚˜ GitHub API๋ฅผ ์จ๋„ ์ข‹์ง€๋งŒ, ์˜ค๋ž˜ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ์•Œ๊ธฐ ์‰ฝ๊ณ  ๋˜‘๋˜‘ํ•˜๋„ค์š”.

    GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰



    GitHub Actions๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๊ฐ€์ƒ ๋จธ์‹ ์ด ํ•˜๋‚˜ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ์œ„์— Actions๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    runs-on: ubuntu-latest ์—์„œ Ubuntu ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋”ฐ๋ผ์„œ Ubuntu์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์ค€๋น„ ์ž‘์—…/๋ฐฐํฌ ์ž‘์—…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. tar๋„ scp๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋ช…๋ น์ด ์›€์ง์ž…๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์ค€๋น„๋Š” ํ•„์š” ์—†์Œ.
        # Archive
        - name: archive package
          run: tar zcvf sample.tgz sample/*
    

    ํ˜„์žฌ Windows/Ubuntu/MacOS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ์–‘. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ URL์˜ runs-on ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
    htps : // ์— lp. ๊ธฐ์ฃผ b. ์ฝ” m / ์ž / ์•„ c ์น˜์˜จ s / ๋ ˆํ›„ ๋ Œ์„ธ /

    Secrets๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



    AWS ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๊ณ  ์‹ถ์€ SCP ๋˜๋Š” SSH ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋„ ์žˆ์„๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
    ํ•˜์ง€๋งŒ, ๋น„๋ฐ€ํ‚ค๋‚˜ DB์˜ ์ ‘์† ์ •๋ณด๋“ฑ์„ ํฌ์ง€ํ† ๋ฆฌ์— ๋„ฃ๋Š” ๊ฒƒ์€ ๊ทนํ˜•์— ๊ฐ€์น˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๊ทธ ๋•Œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋กœ ์„ค์ •ํ•˜๋Š” Secrets์ž…๋‹ˆ๋‹ค.
    ๋งํ•˜์ž๋ฉด, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ, ํ•œ ๋ฒˆ ์„ค์ •ํ•˜๋ฉด ๊ฐ’์€ ๋ˆ„๊ตฌ๋กœ๋ถ€ํ„ฐ๋„ ๋“ค์—ฌ๋‹ค ๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฏ€๋กœ ๋งค์šฐ ํŽธ๋ฆฌ. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์„ค์ •์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



    ๊ทธ๋ž˜์„œ GitHub Actions๋Š” ๊ทธ Secrets๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    ${{ secrets.(HOST_PASSWORD)}}
    

    SSH์˜ ๋น„๋ฐ€ ํ‚ค๋„ Secrets์— ์จ ๋‘๊ณ , Actions ์‹คํ–‰์‹œ์— id_rsa ํŒŒ์ผ์— ์ถœ๋ ฅํ•ด ์‚ฌ์šฉํ•˜๋Š”, ์–ด๋–ค ์ผ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    โ€ป ์ฐธ๊ณ  : GitHub์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ "GitHub Actions"์—์„œ ์‹œํ—˜ CI / CD
    run: echo "${{ secrets.SECRET_KEY }}" > id_rsa && chmod 600 id_rsa
    

    ์š”์•ฝ



    ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ GitHub์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค, ๋ฐฐํฌ ์ž‘์—… ๊ด€๋ฆฌ ๋ฐ ์‹คํ–‰ ๊ด€๋ฆฌ๊ฐ€ ๋ชจ๋‘ GitHub์—์„œ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. CI/CD ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ์ง€๋งŒ, Jenkins์™€ ๊นŒ๋‹ค๋กœ์šด, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ ๋ˆ์ด ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ถ„์—๊ฒŒ๋Š” ์ถ”์ฒœ์ž…๋‹ˆ๋‹ค.

    ์ผ๋‹จ, ํ”„๋ฆฌ ํ”Œ๋žœ์€ ์‹คํ–‰ ์‹œ๊ฐ„ 2000๋ถ„/์›”๊นŒ์ง€ ๋ฌด๋ฃŒ์ธ ๊ฒƒ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ๋ฌด๊ฑฐ์šด ์ฒ˜๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์„๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ผญ ์‹œ๋„ํ•ด๋ณด์‹ญ์‹œ์˜ค.

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ