Github Actions์ด๋ Github๊ฐ ๊ณต์์ ์ผ๋ก ์ ๊ณตํ๋ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ์๋ํํ ์ ์๋ CI/CD ํ๋ซํผ์ด๋ค.
๋ ํฌ์งํ ๋ฆฌ์์ Pull Request ๋ push ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ๋ก GitHub ์์ ์ํฌํ๋ก์ฐ(Workflow)๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
์ํฌํ๋ก์ฐ๋ ํ๋ ์ด์์ ์์ ์ด ์คํ๋๋ ์๋ํ ํ๋ก์ธ์ค๋ก, ๊ฐ ์์ ์ ์์ฒด ๊ฐ์ ๋จธ์ ๋๋ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋๋ค.
์ํฌํ๋ก์ฐ๋ .yml
(ํน์ .yaml
) ํ์ผ(์ํ์ผ์ด๋ผ๊ณ ์ฝ๋๋ค)์ ์ํด ๊ตฌ์ฑ๋๋ฉฐ, ํ
์คํธ, ๋ฐฐํฌ ๋ฑ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ์ํฌํ๋ก์ฐ๋ก๋ ๋ง๋ค ์ ์๋ค. ์์ฑ๋ ์ํฌํ๋ก์ฐ๋ .github/workflows
๋๋ ํ ๋ฆฌ ์ดํ์ ์์นํ๋ค.
๋น๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ์ ๊ฒฝ์ฐ Github Actions๊ฐ ์๋ํ ๋์ ์ฉ๋๊ณผ ์๊ฐ์ด ์ ํ๋์ด ์์ผ๋ฉฐ ๊ณต๊ฐ ๋ ํฌ์งํ ๋ฆฌ๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Yet Another Markup Language์ ์ฝ์๋ก, ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ์ธ์ด๋ฅผ ์๋ฏธ
YAML์ ์ฌ๋์ด ์ฝ์ ์ ์๊ณ ์ดํดํ๊ธฐ ์ฌ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค์์๋ ์ธ๊ธฐ๊ฐ ๋๋ค. ๋ํ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ๊ป ์ฌ์ฉํ ์๋ ์๋ค.
YAML์ ๊ทธ ์ ์ฐ์ฑ๊ณผ ์ ๊ทผ์ฑ์ผ๋ก ์ธํด ์๋ํ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ฐ์๋ ์ฌ์ฉ๋๋ค.
name: Bare Minimum Requirements
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Bare Minimum Requirements
uses: actions/setup-node@v1
with:
node-version: '16'
- run: npm install
- run: npm test
YAML ํ์ผ์ ""
(ํฐ๋ฐ์ดํ, double quotation marks) ์์ด ๋ฌธ์์ด ์์ฑ์ด ๊ฐ๋ฅํด, ์ค์ ์ ์ํ ์คํ์ด๋ ํ๋กํผํฐ ๊ฐ ๋ฑ์ด JSON ํ์ผ์ ๋นํด ํ๋์ ๋ค์ด์จ๋ค
๋ํ JSON ํ์ผ์ฒ๋ผ {}
ํํ๋ก ๊ฐ์ธ์ค ํ์๋ ์๊ธฐ ๋๋ฌธ์ ์ค์ฝํ์ ์๋ฐ(์๋ชป ์ฐ๋ฉด ์ผ์ผ์ด ์ด๋๊ฐ ์ฒ์์ด๊ณ ๋์ธ์ง ์ฐพ์์ผ ํ๋ ๋ฑ)์์ ๋ฒ์ด๋ ์๋ ์๋ค.
YAML ํ์ผ์ JSON ํ์ผ๊ณผ ๋ค๋ฅด๊ฒ ์ฃผ์์ ์์ฑํ ์ ์๋ค๋ ์ ๋ ๊ต์ฅํ ์ด์ ์ผ๋ก ์์ฉํ๋ค. (์ปค๋ฎค๋์ผ์ด์ ํ๊ธฐ๊ฐ ํจ์ฌ ์์)
YAML์ JSON์ ์์ ํธํ ๊ฒฉ์ด๋ฏ๋ก, ๊ธฐ์กด json๋ฌธ์๋ฅผ ๊ทธ๋๋ก yamlํ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ์ํ๋ ๋ถ๋ถ๋ง ์๋ณผ ์ ์๋ค. ๋ฐ๋๋ก yaml์ json์ผ๋ก ๋ณํํด ์ฌ์ฉํ ์๋ ์๋ค๋ ์ ๋ ์ฅ์ ์ด๋ค.
# : ์ฃผ์
--- : ๋ฌธ์์ ์์ (์ ํ์ฌํญ)
... : ๋ฌธ์์ ๋ (์ ํ์ฌํญ)
๋ค์ฌ์ฐ๊ธฐ
: ๋ค์ฌ์ฐ๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 2์นธ ๋๋ 4์นธ์ ์ง์. ๋ณดํต 2์นธ์ฉ ๋ค์ฌ์ฐ๋ ๊ฒ์ ์ถ์ฒ. ํญ ํค๊ฐ ์๋ ์คํ์ด์ค ํค๋ก!
key: value
์ด๋ฉฐ, :
๋ค์์๋ ๋ฌด์กฐ๊ฑด ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ผ ํ๋ค.
int
, string
, boolean
, ๋ฆฌ์คํธ, ๋งคํ์ ์ง์ํ๋ค.
์ฌ๊ธฐ์ int
์ string
ํ์
์ ์ค์นผ๋ผ(Scalar)๋ผ ๋ถ๋ฅด๊ณ , ๋ฐฐ์ด ํน์ ๋ฆฌ์คํธ๋ ์ํ์ค(Sequence)๋ผ ๋ถ๋ฅธ๋ค.
๋งคํ์๋ ๊ธฐ๋ณธ ํํ์ธ key-value ์ ๋ฐ hash, dictionary๊ฐ ํฌํจ๋๋ค.
#int(์ซ์)
int_type: 1
#string(๋ฌธ์์ด)
string_type: "1"
#blooean(์ฐธ/๊ฑฐ์ง)
boolean_true_type: true
boolean_false_type: false
#์ด์ธ์ yes, no๋ก ์์ฑํ๊ธฐ๋ ํ๋ค.
yaml_easy: yes
yaml_difficult: no
#๋ฆฌ์คํธ(๋ฐฐ์ด ํํ)
person:
name: Chungsub Kim
job: Developer
skills:
- docker
- kubernetes
# JSON ํ์์ "skill" : [docker, kubernetes]์ ๊ฐ๋ค.
๊ฐ์ฒด ํํ์ key
์์ฑ ํ ๋ ์นธ์ ๋ค์ฌ์จ์ key-value
ํํ๋ก ์์ฑ์ ํด์ฃผ๊ฑฐ๋, key
๋ฅผ ์์ฑ ํ ์ค๊ดํธ({}
)๋ก ํ ๋ฒ ๋ฌถ๊ณ key-value
ํํ๋ก ์์ฑํ๋ค.
key:
key: value
key: value
#๋๋ ๊ฐ๋
์ฑ์ ์ํด ์ด๋ ๊ฒ ์์ฑํ๊ธฐ๋ ํ๋ค.
key: {
key: value,
key: value
}
์ค๋ฐ๊ฟ ํํ(|
)๊ณผ ์ค๋ฐ๊ฟ ๋ฌด์ ํํ(>
)์ด ์๋ค.
# |๋ ์ค๋ฐ๊ฟ ํํ.
# JSON์์๋ "comment_line_break": "Hello codestates.\nIm kimcoding.\n"
comment_line_break: |
Hello codestates.
Im kimcoding.
# >๋ ์ค๋ฐ๊ฟ ๋ฌด์ ํํ.
# JSON์์๋ "comment_single_line": "Hello world my first coding."
comment_single_line: >
Hello world
my first coding.
key-value ์์์ value
์ :
๊ฐ ๋ค์ด๊ฐ ๊ฒฝ์ฐ๋ ๋ฐ๋์ ๋ฐ์ดํ๊ฐ ํ์ํ๋ค.
# error
windows_drive: c:
# ์ด๋ ๊ฒ ์จ์ผ ํ๋ค.
windows_drive: "c:"
windows_drive: 'c:'