๐ฌ Github Action์ ๋ง์ผ์ ๋ฑ๋กํด๋ณด์
์ง๋ ๊ธ์์๋ github actions๋ฅผ ์ด์ฉํด workflow๋ฅผ ๋ง๋๋ ๋ฒ์ ์๊ฐํ๋ค. ์ด๋ฒ ์๊ฐ์ Github Market place์ ๋ฑ๋ก๋์ด์๋ ์ก์ ๋ค์ฒ๋ผ ์ฝ๊ฒ ๊ฐ์ ธ๋ค๊ฐ ์ธ ์ ์๋ ์ก์ ์ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ค.
๋ง์ผ์ ๋ฑ๋กํ๋ ์ก์ ์ ๋ง๋๋ ๊ฒ์ ๊ธฐ์กด workflow๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค. ํ๋์ ๋ฒ์ฉ์ ์ธ step์ด๋ job์ ๋ง๋ ๋ค๊ณ ์๊ฐํ ์ ์๋ค. ์ฝ๋์ ๋ํ ์ค๋ช ๋ณด๋ค๋ ์ด๋ค ๊ฒ๋ค์ ์ฌ์ฉํ ์ ์๋์ง ์์ฃผ๋ก ์๊ฐํ๊ฒ ๋ค.
๊ตณ์ด Action์ ๋ง๋ค์ด์ผ ํ๋?
๋ง์ฝ ํ๋ก์ ํธ๊ฐ ํ๋๋ผ๋ฉด ์ง์ workflow์ ํฌํจํ๋ ๊ฒ์ด ํจ~์ฌ ๊ฐ๋จํ๊ธด ํ๋ค. ํ์ง๋ง ๊ด๋ฆฌํด์ผ ํ๋ ์ ์ฅ์๊ฐ 50๊ฐ 100๊ฐ๋ผ๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค. TOAST UI์์ ํ์ธ์ด ํ์ํ ์ํ๋ค์ ๋ธ๋ผ์ฐ์ ์ง์ ๋ฒ์๋ ๋ชจ๋ ๋ค๋ฅด๊ณ ์ฝ๋์ ์์ ์ด ํ์ํ๋ค๊ณ ํ๋ฉด ๋์ฐํ ์ผ์ด ๋ฒ์ด์ง ์ ์๋ค. ์ต๋ํ APP์์๋ง ์ํํ ์ ์๋ ์ผ์ ์ ์ธํ๊ณ ์ก์ ํ๋ฅผ ์ํจ๋ค๋ฉด ํ ์ ์ฅ์์์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๊ณ ์ฌ์ฉ์ด ํจ์ฌ ํธ๋ฆฌํด์ง๋ฆฌ๋ผ ์๊ฐํด ์ก์ ์ ๋ง๋ค์๋ค.
์์ํ๊ธฐ ์ ์, workflow + ํ๊ฒฝ ์ดํด๋ณด๊ธฐ
์์ํ๊ธฐ ์ ์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ workflow๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ด๋ณด๊ฒ ๋ค.
โ๏ธ Node.js
๋ฅผ ํ์ฉํ ๊ฒ์ด๋ค. ๋์ปค
๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ ๋ํ ์กด์ฌํ๋ ๊ฒ ๊ฐ์ผ๋ ํธํ ๊ฒ์ ์ฐ์.
โ๏ธ TOAST UI doc์ผ๋ก ์์ฑ๋ API ํ์ด์ง๋ค์ด ์๋ฌ์์ด ๋
ธ์ถ๋๊ณ ์๋์ง๋ฅผ ํ์ธํ ๊ฒ์ด๋ค.
โ๏ธ ํ๋ฃจ์ ํ ๋ฒ ์ ๋ Action์ ํ์ฑํํ ๊ฒ์ด๋ค.
โ๏ธ tuidoc.config.js
๋ผ๋ TOAST UI Doc config ํ์ผ์ ๋ณด๊ณ url์ ์์ฑํด์ผ ํ๋ค.
์ ํ๊ฒฝ์ ๊ณ ๋ คํด์ workflow๋ฅผ ์ ์ด๋ณด๋ฉด
1๏ธโฃ tuidoc.config.js
๋ฅผ ์ฐธ๊ณ ํด url์ ์์ฑํด์ค๋ค.
2๏ธโฃ url์ ๊ธฐ์ค์ผ๋ก ์
๋ ๋์ฐ๊ณผ browserstack์ ์ด์ฉํด ๋ฐฉ๋ฌธํ๋ค.
3๏ธโฃ ๊ฐ page๋ฅผ ๋ฐฉ๋ฌธํด ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๋ค.
4๏ธโฃ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ณ ๋ฉ์ผ๋ก ๋ฆฌํฌํ
ํ๋ค.
์ฌ๊ธฐ์ 2, 3๋ฒ์งธ ์คํ ์ ๊ณตํต ์ก์ ํ ํ ๊ฒ์ด๋ค.
์ก์ ๋ง๋ค๊ธฐ
์ฒ์ ์ก์ ์ ๋ง๋ค์ด๋ณธ๋ค๋ฉด ์ด ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ ํด๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค. ์ด ํํ ๋ฆฌ์ผ ์์๋๋ก ์์ฑํด๋ณด๊ฒ ๋ค.
์ ์ฅ์ ํ๊ฒฝ ๋ง๋ค๊ธฐ
- ํํ ๋ฆฌ์ผ์ ๋์จ ๊ฒ์ฒ๋ผ
node12
๋ฒ์ ์ ์ด์ฉํดnpm init -y
๋ก ์ด๊ธฐํํ๋ค. - ๋ฃจํธ ๊ฒฝ๋ก์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ช
์ํ๋ ํ์ผ์ธ
action.yml
์ ๋ง๋ ๋ค. ์ด ๋งํฌ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ด๋ค ๊ฒ๋ค์ด ๋ฉํ๋ฐ์ดํฐ๋ก ๋ค์ด๊ฐ๋์ง ์ ์ ์๋ค.
name
: ์ก์ ์ด๋ฆdescription
: ์ก์ ์ค๋ชinputs
: ์ก์ ์์ ์ฌ์ฉ๋ ๋ณ์ ๊ฐ
โ๏ธ default ๊ฐ๊ณผ ๋ฐ๋์ ์์ด์ผ ํ๋ ๊ฐ์ธ์ง, ์ค๋ช ์ ์์ฑํ ์ ์๋ค.
โ๏ธinputs
์ ๋ฐ๋์๋ฌธ์์ด
์ด์ฌ์ผ ํ๋ค. ๋ง์ฝ ๋ฐฐ์ด๋ก ๋๊ธฐ๊ณ ์ถ์ ๊ฐ์ด ์๋ค๋ฉด ๋ฌธ์์ด๋ก ์์ฑํ ๋ค ์ฌ์ฉํ๋ ๊ณณ์์ ๋ถ๋ฆฌํด ์ฌ์ฉํด์ผ ํ๋ค.
โ๏ธ๋งํฌ: https://help.github.com/en/actions/building-actions/metadata-syntax-for-github-actions#inputsinput_idoutputs
: ์ถ๋ ฅ๊ฐ์ ๋ํ๋ธ๋ค.runs
: ์ํ๋๋ ํ๊ฒฝ์ ๋ช ์ํ๋ค.branding
: ์ดํ์ ๋ง์ผ์ ๋ฑ๋กํ ๋ ๋ก๊ณ ๋, ์๊น์ ์ง์ ํ ์ ์๋ค.
โ๏ธ์์ white, yellow, blue, green, orange, red, purple, gray-dark ๋ง ๊ฐ๋ฅํ๋ค.
โ๏ธ๋ก๊ณ ๋ https://feathericons.com/์ ๋ฑ๋ก๋ ์์ด์ฝ๋ง ๊ฐ๋ฅํ๋ค.
์ ๋ ฅ, ์ถ๋ ฅ, ์คํจ
์ ๊น ์ด ์ก์ ์ ์ฌ์ฉํ๋ ๊ณณ์ workflow๋ฅผ ์์ํด๋ณด์. ์ฐ๋ฆฌ๋ ์ด workflow๋ฅผ ์คํํ ์ก์ ์ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ๋ค.
uses
๋ก ์ก์
์ ๋ช
์ํ๊ณ with
๋ก ์ก์
์์ ์ฌ์ฉํ ๊ฐ์ ๋๊ฒจ์ค ๊ฒ์ด๋ค. browserstack์์ ์ฌ์ฉํ USERNAME
๊ณผ ACCESS_KEY
๋ ์ ์ฅ์์์ ๋๊ฒจ์ค ๊ฒ์ด๋ค. ์ด์ ์ด๋ ๊ฒ ๋๊ฒจ์ค ๊ฐ๋ค์ ์ด๋ป๊ฒ ๋ฐ์์ ์ฌ์ฉํ๋์ง ์ดํด๋ณด์.
main์ ์์ฑํ index.js
์ ์ก์
์์ ์ํํ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ์ก์
์ ์์ฑํ๊ธฐ ์ํด ๊นํ์์๋ ์ฌ๋ฌ ๊ฐ์ง toolkit์ ์ ๊ณตํ๋ค. input, output, logging ๋ฑ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํ @action/core
๋ cli๋ก ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ @actions/exec
, ํ์ฌ ์ํ ์ค์ธ ๊นํ์ ์ปจํ
์คํธ์ ์ ๊ทผํ๋ @actions/github
๋ฑ์ ์ ๊ณตํ๋ค. ์ฐ๋ฆฌ๋ ๋จ์ํ๊ฒ input
๊ณผ ๋ก๊น
์ด ํ์ํ๊ธฐ ๋๋ฌธ์ @actions/core
๋ง ์ฌ์ฉํ๋ค.
$ npm i @actions/core
๊ทธ๋ผ workflow์์ with
๋ฅผ ํตํด ๋๊ฒจ์ค ์
๋ ฅ๊ฐ์ ๋ฐ์ ์ฝ๋์์ ์ฌ์ฉํด๋ณด์. core์ getInput
์ ํตํด ์
๋ ฅ๊ฐ์ ๋ฐ์ ์ ์๋ค. ์ด๋ฆ์ ์ action.yml
์์ ์์ฑํ ์ด๋ฆ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค. ์ถ๋ ฅ๊ฐ์ setOutput
์ ํตํด ์ ํ ์ ์๋ค.
env
๋ก ๋๊ฒจ์ค ๊ฐ๋ค์ process.env
๋ก ์ ๊ทผํ ์ ์๋ค.
์ ์ผ ์ค์ํ ๊ฒ์ setFailed
๋ค. setFailed
๋ ํด๋น ์ก์
์ด ์คํจํ๋ค๋ ๊ฒ์ ์๋ ค์ค๋ค. ๋ง์ฝ setFailed๋ฅผ ์์ฑํ์ง ์๋๋ค๋ฉด ํด๋น ์คํ
์ ์คํจํ๋๋ผ๋ ํต๊ณผํ ๊ฒ์ผ๋ก ๋
ธ์ถ์ด ๋๋ ๋ฐ๋์ ์์ฑํด์ค์ผ ํ๋ค.
์ด๊ฒ ์ ๋ถ๋ค! ๊ฐ๋ค์ ๋ฐ์ ์์ ์ ์ํํ๊ณ ์คํจ ์กฐ๊ฑด์ ๋ช ์ํด์คฌ๋ค. ๊ทธ๋ผ, ์ด ์ก์ ์ ๋ฐฐํฌํด๋ณด์.
zeit/ncc
๋ก ๋ฒ๋ค๋ง ํด์ ๋ฐฐํฌํ๊ธฐ
ncc
๋ ๋
ธ๋๋ก ์์ฑ๋ ํ์ผ์ ์์กด๊น์ง ํจ๊ป ํ๋์ ํ์ผ๋ก ์ปดํ์ผ ํด์ฃผ๋ CLI๋ค. ๋
ธ๋ ๋ชจ๋ํ์ผ์ ์ ๋ถ ์ฌ๋ฆฌ๋๊ฑด ๋นํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ํ๋์ ํ์ผ๋ก ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค.
$ npm i -g @zeit/ncc
$ ncc build index.js
ncc๋ฅผ ์ด์ฉํ์ฌ ์ปดํ์ผ์ ํ๋ฉด ํ๋์ index.js ํ์ผ์ด dist
๊ฒฝ๋ก์ ์๊ฒผ๋ค. ๊ธฐ์กด์ action.yml
์ ์์ฑํ๋ env.main
๋ฅผ index.js
๋์ dist/index.js
๋ก ๋ฐ๊ฟ์ค๋ค.
# config
runs:
using: 'node12'
main: 'dist/index.js'
๊ทธ๋ผ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ์ ์ฅ์์ ํธ์ํ์. ์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ์ฅ์์์ ํด๋น ์ก์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ๋ํ, git์ ํ๊ทธ๋ก ๋ฒ์ ์ ๋ช ์ํด์ค๋ค๋ฉด workflow์์ ์ก์ ์ ์ฌ์ฉํ ๋ ๋ฒ์ ๋ณ๋ก ์ ํํด ์ฌ์ฉํ ์ ์๋ค.
$ git tag v1.0.0
$ git push origin v1.0.0
์ฌ์ฉํ๊ธฐ
workflow์์ ์์ฑํ ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํค๋ฉด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋ง์ฝ jung-han
๊ณ์ ์ browserstack-actions
๋ผ๋ ์ ์ฅ์๋ผ๋ฉด ์๋์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. @
๋ค์ ๋ฒ์ ์ ๋ช
์ํด ๋ฒ์ ๋ณ๋ก ์ ํํด ์ฌ์ฉํ ์ ์๋ค.
marketplace์ ๋ฑ๋กํ๊ธฐ
์์ ์ด ๋๋ฌ๋ค๋ฉด ์ ์ด๋ฏธ์ง๊ฐ ์ ์ฅ์์์ ๋ณด์ผ ๊ฒ์ด๋ค.๋ง์ผ์ ๋ฑ๋กํ ๋ ํ์ํ ์์ ์ด ์๋ค. ๋งํฌ์ ๋ค์ด๊ฐ ํ์ธํด๋ ์ข๋ค.
- ๊ณ์ ์ two-factor authentification ๋ฑ๋กํด์ผ ํ๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ ๋ฑ๋กํ์
- ๋ฉํ ์ ๋ณด์ ํ์ํ ๊ฐ๋ค์ ์ ๋ถ ๋ฑ๋กํด์ผ ํ๋ค.
name
,description
,icon
,color
๊ฐ ํ์ํ๋ค. - README.md ๋ํ ์์ฑํด์ผ ํ๋ค.
4. ์นดํ ๊ณ ๋ฆฌ์ ํ๊ทธ๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋์ด๋ค.
5. ์๋ฃ๊ฐ ๋๋ฉด release์์ marketplace
๋ฑ์ง๊ฐ ์๊ธด๊ฒ์ ๋ณผ ์ ์๋ค.
6. ๋ง์ผ์ ๋ค์ด๊ฐ๋ณด๋ฉด ์ฑ๊ณต์ ์ผ๋ก ๋ฑ๋ก๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋
์ก์ ์ ๋ง๋ค์ด์ IE8 ๋ถํฐ edge, safari ๋ฑ๋ฑ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ์๋ฌ ์ฒดํน์ ์๋ํํ๋ค. ์ฝ์ด๋ณด๋ฉด ์๊ฒ ์ง๋ง ์ฌ์ค ์ก์ ์ ๋ง๋ค๊ณ ๋ฐฐํฌํ๋ ๊ฒ์ ์ด๋ ต์ง ์๋ค. (๋ ํจ์จ์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์์ ์ ์์ ๊ฒ์ด๋ค) ๊ธ์์ ์๋ชป๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ๋๊ธ ๋ฐ๋๋ค!๐โโ๏ธ
์ถ๊ฐ๋ก ์๋ฉด ์ข์ ๊ฒ๋ค
needs, if
workflow์์ ํด๋น job
์ด ์คํ์ด ๋์ด์ผ ํ ์ง ๋ง์ง ๋ถ๊ธฐ๋ฌธ์ผ๋ก ๊ฒฐ์ ํ ์ ์๋ค. ๋ํ ์ด์ ์์
์ด ๋ฐ๋์ ์ฑ๊ณต์ ์ผ๋ก ๋๋์ผ๋ง ์งํ์ด ๋์ด์ผ ํ๋ job ๋ค๋ ์๋ค.
๊ทธ๋ด๋ if
๋ needs
๋ฅผ ํ์ฉํ๋ฉด ๋๋ค.
jobs.<job_id>.if
: https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idifjobs.<job_id>.needs
: https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds
artifact
artifact๋ ์ํฌ ํ๋ก์ฐ ์คํ ์ค์ ์์ฑ๋ ํ์ผ์ ์๋ฏธํ๋ค. artifact๋ฅผ ์ด์ฉํ๋ฉด ์์
์ด ๋๋ ๋ค์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ง ํ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด workflow๋์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค. actions/upload-artifact
์ก์
์ ํตํด artifact๋ฅผ ์
๋ก๋ ํ ์ ์๊ณ actions/download-artifact
๋ก ๋ค์ด๋ฐ์ ์ฌ์ฉํ ์ ์๋ค. ๋ํ ํ
์คํธ ๊ฒฐ๊ณผ report๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์
๋ก๋ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
env์ ๊ฐ ์ธํ ํ๊ธฐ
url
์ ๋ง๋๋ ํจ์๋ฅผ ์ํํ ๋ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ workflow์ ์ฌ์ฉํ์ด์ผ ํ๋ค. ์ด ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค์ง๋ง ์ฐพ์ง ๋ชปํ๋ค. ๊ทธ๋์ ๊ฒฐ๊ณผ๋ก ๋ง๋ url.txt
๋ฅผ ์๋ก ์ฝ์ ๋ค env
์ ํ ๋นํ ๋ค ๊บผ๋ด ์ผ๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํ๋ค๋ฉด ๋งํฌ๋ฅผ ๋ค์ด๊ฐ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ์ด์ ๊ดํ ์ด์ผ๊ธฐ๊ฐ ์๋ค.