[CI/CD] YAML 문법

hzn·2022년 12월 8일
0

Deploy

목록 보기
4/10
post-thumbnail

YAML

  • Yet Another Markup Language
  • 사람이 읽을 수 있는 데이터 직렬화 언어를 의미
  • 또는 YAML ain’t markup language(재귀 약어)
    (YAML이 문서가 아닌 데이터용임을 강조하는 말)
  • 파일로 작성시 확장자는 .yaml 혹은 .yml 확장자를 가진다.

JSON vs YAML

YAML 파일 예시

  • Github actions 설정을 위해 작성된 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

JSON 파일 예시

{
 "squadName": "Super hero squad",
 "homeTown": "Metro City",
 "formed": 2016,
 "secretBase": "Super tower",
 "active": true,
 "members": [
   {
     "name": "Molecule Man",
     "age": 29,
     "secretIdentity": "Dan Jukes",
     "powers": [
       "Radiation resistance",
       "Turning tiny",
       "Radiation blast"
     ]
   }
 ]
}

JSON 과의 공통점

  • key - value 형태로 작성
  • 계층 구조를 가짐

JSON 과의 차이점

  • ""(큰 따옴표) 없이 문자열 작성이 가능
    👉🏽 설정 위한 스펙이나 프로퍼티 값 등이 JSON 파일에 비해 한 눈에 들어온다
  • { } 형태로 감싸줄 필요 없음
    👉🏽 스코프의 압박(잘못 쓰면 일일이 어디가 처음이고 끝인지 찾아야 하는 등)이 없다
  • 주석 작성 가능 (JSON은 주석 작성 불가)
    👉🏽 파일 하나로 커뮤니케이션 하기가 수월
  • YAML은 JSON의 상위 호환 격이므로, 기존 JSON 문서를 그대로 YAML 파일로 사용하거나 원하는 부분만 손볼 수 있다. 반대로 YAML을 JSON으로 변환해 사용할 수도 있다.

YAML 문법

주석 / 문서의 시작과 끝 / 들여쓰기

  • # : 주석
  • --- : 문서의 시작 (선택 사항)
  • ... : 문서의 끝 (선택 사항)
  • 들여쓰기 : 기본적으로 2칸(추천) 또는 4칸. 탭 키가 아닌 스페이스 키로 들여써야 한다.
#이런 식으로 주석을 작성할 수 있습니다.

--- #문서 시작

#이 사이에 내용이 들어갑니다.

... #문서 끝

기본 표현

  • key: value 형식으로.
  • : 다음에는 무조건 공백 문자가 와야한다.
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]와 같다.

객체

  1. key 작성 후 두 칸을 들여써서 key: value 형태로 작성을 해주거나
  2. key를 작성 후 중괄호({ })로 한 번 묶고 key: value 형태로 작성 (가독성을 위해)
# 1.
key: 
  key: value
  key: value

# 2. 
key: {
  key: value,
  key: value
}

Text

  • | : 줄바꿈 표현
  • > : 줄바꿈 무시 표현
# | (줄바꿈 표현)
comment_line_break: |
  Hello codestates.
  Im kimcoding.

# > (줄바꿈 무시 표현)
comment_single_line: >
  Hello world
  my first coding.

cf) JSON 형식과 비교 (위 코드를 JSON으로 바꾼 것)

// | (줄바꿈 표현)
"comment_line_break": "Hello codestates.\nIm kimcoding.\n"

// > (줄바꿈 무시 표현)
"comment_single_line": "Hello world my first coding."

문자열 따옴표

  • key-value 쌍에서 value에 :가 들어간 경우는 반드시 따옴표가 필요
# error가 난다.
windows_drive: c:# 이렇게 써야 한다.
windows_drive: "c:"
windows_drive: 'c:'

YAML 사용법 및 실제 사용 사례

  • YAML은 일반적으로 설정 파일(configure file 등)에 사용하기에 좋다.
  • 따라서 spring boot, github action 등 다양한 CI/CD 툴이나 프레임워크에서 사용되고 있다.

쿠버네티스

  • YAML을 사용하는 대표적 프레임워크 중 하나.
  • 기본적인 팟, 레플리카, 디플로이먼트 등 모든 내부 오브젝트가 yml 문서로 작성.
  • yaml 고유 기능 중 하나인 문서 스트림을 사용해 클러스터 전체의 설정을 파일 하나로 관리하기도 한다.

0개의 댓글