Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ด๊ฒƒ์€ ๋Œ€๋ณธ์ž…๋‹ˆ๋‹ค ๊ณต์—ฐ ์— DevOps-40 2020-03-18:

๋‘ ๋ฒˆ์งธ ์ปค๋ฐ‹๋ถ€ํ„ฐ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ๋ ˆ๊ฑฐ์‹œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์•„์ด๋””์–ด๋Š” ๊ฐ€ํ˜นํ•œ ํ˜„์‹ค๊ณผ ๋‹ฌ๋ผ์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ข‹์€ ๊ฒƒ๋„ ๋‚˜์œ ๊ฒƒ๋„ ์•„๋‹ˆ๋ฉฐ, ๋…ผ์Ÿํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋ฐ›์•„๋“ค์—ฌ์•ผ ํ•˜๋Š” ๋‹น์—ฐํ•œ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋Š” ๋ฆฌํŒฉํ† ๋ง์ž…๋‹ˆ๋‹ค. ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ„ฐ๋ง. XNUMX๋…„ ์•ˆ์— Ansible์„ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.

์œ ์‚ฐ์˜ ํƒ„์ƒ

1์ผ ์ฐจ: ์ตœ์ดˆ์˜ ํ™˜์ž

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์˜›๋‚  ์˜›์ ์— ์กฐ๊ฑด๋ถ€ ํ”„๋กœ์ ํŠธ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Dev ๊ฐœ๋ฐœํŒ€๊ณผ Ops ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋™์ผํ•œ ๋ฌธ์ œ, ์ฆ‰ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ฐ ํŒ€์ด ๊ฐ์ž์˜ ๋ฐฉ์‹์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Ansible์„ ์‚ฌ์šฉํ•˜์—ฌ Dev ํŒ€๊ณผ Ops ํŒ€ ๊ฐ„์˜ ์ง€์‹์„ ๋™๊ธฐํ™”ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

Day #89: ์œ ์‚ฐ์˜ ํƒ„์ƒ

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์Šค์Šค๋กœ๋„ ๋ˆˆ์น˜ ์ฑ„์ง€ ๋ชปํ•œ ์ฑ„ ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์œ ์‚ฐ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋‚˜์š”?

  • ์—ฌ๊ธฐ์„œ ๊ธด๊ธ‰ํ•œ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ €๋ถ„ํ•œ ํ•ดํ‚น์„ ํ•œ ๋‹ค์Œ ๊ณ ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  • ์ €๋Š” Ansible/Python/Bash/Terraform์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์„ธ์š”!
  • ์ €๋Š” ํ’€ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ๊ฐœ๋ฐœ์ž์ด๊ณ  ์ด๊ฒƒ์„ stackoverflow์—์„œ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ฉ‹์ ธ ๋ณด์ด๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฌธ์„œ๊ฐ€ ์—†๊ณ  ๊ธฐ๋Šฅ์ด ๋ฌด์—‡์ธ์ง€, ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ์œ ํ˜•์˜ ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ๋ชฉ๋ฐœ๊ณผ ์ง€์ง€๋Œ€๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. , ์ƒํ™ฉ์„ ๋”์šฑ ์•…ํ™”์‹œํ‚ต๋‹ˆ๋‹ค.

- hosts: localhost
  tasks:
    - shell: echo -n Z >> a.txt && cat a.txt
      register: output
      delay: 1
      retries: 5
      until: not output.stdout.find("ZZZ")

Day #109: ๋ฌธ์ œ ์ธ์‹

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ฒ˜์Œ์— ๊ตฌ์ƒํ•˜๊ณ  ๊ตฌํ˜„ํ•œ IaC ๋ชจ๋ธ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ์ž/๋น„์ฆˆ๋‹ˆ์Šค/๋‹ค๋ฅธ ํŒ€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ธํ”„๋ผ ๋ณ€๊ฒฝ ์‹œ๊ฐ„์ด ๋” ์ด์ƒ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ˆœ๊ฐ„, ์กฐ์น˜๋ฅผ ์ทจํ•ด์•ผ ํ•  ๋•Œ๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

IaC ๋ฆฌํŒฉํ† ๋ง

Day #139: ๋ฆฌํŒฉํ† ๋ง์ด ์ •๋ง ํ•„์š”ํ•œ๊ฐ€์š”?

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์„œ๋‘˜๋Ÿฌ ๋ฆฌํŒฉํ† ๋ง์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์งˆ๋ฌธ์— ๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์™œ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
  2. ์‹œ๊ฐ„ ์žˆ์–ด์š”?
  3. ์ง€์‹์€ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ?

์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅธ๋‹ค๋ฉด ๋ฆฌํŒฉํ† ๋ง์ด ์‹œ์ž‘๋˜๊ธฐ๋„ ์ „์— ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ƒํ™ฉ์ด ๋” ์•…ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฒฝํ—˜์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค( 200์ค„์˜ ์ธํ”„๋ผ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๋ฐฐ์šด ๊ฒƒ) ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ๋Š” ์—ญํ• ์„ ์ˆ˜์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋„์›€ ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

Day #149: ๋ฆฌํŒฉํ† ๋ง ์ค€๋น„

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

๊ฐ€์žฅ ๋จผ์ € ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜์‹ญ์‹œ์˜ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์†Œํ†ตํ•˜๊ณ  ๋ฌธ์ œ ์˜์—ญ์„ ์ฐพ์•„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฒฐ๊ณผ ๊ฐœ๋…์„ ์–ด๋–ป๊ฒŒ๋“  ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ํ•ฉ๋ฅ˜ ๊ธฐ์‚ฌ). ๊ทธ๋ž˜์„œ ์งˆ๋ฌธ์ด ๋ฐœ์ƒํ•  ๋•Œ "๋ฌด์—‡์ด ๊ฐ€์žฅ ์ข‹์€๊ฐ€?" ๋˜๋Š” "์–ด๋Š ๊ฒƒ์ด ๋งž๋‚˜์š”?" ์šฐ๋ฆฌ๋Š” ๊ธธ์„ ์žƒ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์ด ์•„์ด๋””์–ด๋ฅผ ๊ณ ์ˆ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋ˆ„๊ณ  ์ง€๋ฐฐํ•˜๋‹ค: ์ธํ”„๋ผ๋ฅผ ์ž‘์€ ์กฐ๊ฐ/๋ฒฝ๋Œ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ”„๋ผ์˜ ๊ฒฉ๋ฆฌ๋œ ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์™€์„œ ๊ทธ๊ฒƒ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ์ดํ•ดํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฃจ๋ฉฐ ์†์ƒ๋  ์—ผ๋ ค ์—†์ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ธํ”„๋ผ ํ…Œ์ŠคํŠธ๊ฐ€ ์ดˆ์„์ด ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์œผ๋ฉฐ ์—ฌ๊ธฐ์„œ๋Š” ์ธํ”„๋ผ ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ๋ฅผ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์ธ ์•„์ด๋””์–ด์™€ ์ •ํ™•ํžˆ ๋™์ผํ•˜์ง€๋งŒ ์ธํ”„๋ผ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๋Š” ๊ฐ’์‹ธ๊ณ  ๋น ๋ฅธ ํ…Œ์ŠคํŠธ์—์„œ ์ „์ฒด ์ธํ”„๋ผ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฐ’๋น„์‹ผ ๋ณธ๊ฒฉ์ ์ธ ํ…Œ์ŠคํŠธ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Ansible ํ…Œ์ŠคํŠธ ์‹œ๋„

ํ”„๋กœ์ ํŠธ์—์„œ Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ์—ˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ธฐ ์ „์—, ๋‚ด๋ฆฐ ๊ฒฐ์ •์˜ ๋งฅ๋ฝ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „์— ์‚ฌ์šฉํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ๋˜ ์‹œ๋„์™€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

-997์ผ์ฐจ: SDS ์ œ๊ณต

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ฒ˜์Œ Ansible์„ ํ…Œ์ŠคํŠธํ•œ ๊ฒƒ์€ SDS(Software Defined Storage)๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ์˜€์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐฐํฌํŒ์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋ชฉ๋ฐœ ์œ„์— ์ž์ „๊ฑฐ๋ฅผ ๋ถ€์ˆ˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์šฐ๋ฆฌ๋Š” ์—ญ์ „๋œ ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ๋กœ ๋๋‚˜๊ณ  ํ…Œ์ŠคํŠธ๋Š” ํ•œ ์—ญํ• ์— 60~90๋ถ„์„ ์†Œ๋น„ํ–ˆ๋Š”๋ฐ ์ด๋Š” ์˜ค๋žœ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ธฐ์ดˆ๋Š” e2e ํ…Œ์ŠคํŠธ์˜€์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์™„์ „ํ•œ ์„ค์น˜๋ฅผ ๋ฐฐํฌํ•œ ๋‹ค์Œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”์šฑ ๋” ๊ดด๋กœ์šด ๊ฒƒ์€ ์ž์‹ ์ด ๋งŒ๋“  ์ž์ „๊ฑฐ์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด ์†”๋ฃจ์…˜์ด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๊ณ  ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ฐ€๋Šฅํ–ˆ๋‹ค๋Š” ์ ์€ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Day # -701: Ansible ๋ฐ ํ…Œ์ŠคํŠธ ์ฃผ๋ฐฉ

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

Ansible ํ…Œ์ŠคํŠธ ์•„์ด๋””์–ด์˜ ๊ฐœ๋ฐœ์€ ๋ฐ”๋กœ test kitchen/kitchen-ci ๋ฐ inspec๊ณผ ๊ฐ™์€ ๊ธฐ์„ฑ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ์€ Ruby์— ๋Œ€ํ•œ ์ง€์‹์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Habrรฉ์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”: YML ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” Ansible ํ…Œ์ŠคํŠธ๋ฅผ ๊ฟˆ๊พธ๋‚˜์š”?) 40๊ฐœ ์—ญํ• ์— ๋Œ€ํ•ด ์•ฝ 10๋ถ„ ์ •๋„ ๋” ๋น ๋ฅด๊ฒŒ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ€์ƒ ๋จธ์‹  ํŒฉ์„ ๋งŒ๋“ค๊ณ  ๋‚ด๋ถ€์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ผ๋ฐ˜์ ์œผ๋กœ ์†”๋ฃจ์…˜์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ด์งˆ์„ฑ์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ์นจ์ „๋ฌผ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ž๊ฐ€ ๊ธฐ๋ณธ ์—ญํ•  13๊ฐœ์™€ ์ž‘์€ ์—ญํ• ์„ ๊ฒฐํ•ฉํ•œ ๋ฉ”ํƒ€ ์—ญํ•  2๊ฐœ๋กœ ๋Š˜์–ด๋‚˜์ž ๊ฐ‘์ž๊ธฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฑฐ์˜ 70๋ฐฐ ๋” ๊ธธ์–ด์ง„ 2๋ถ„ ๋™์•ˆ ์‹คํ–‰๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. XP(์ต์ŠคํŠธ๋ฆผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... ์•„๋ฌด๋„ 70๋ถ„์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•œ ์ด์œ ์˜€์Šต๋‹ˆ๋‹ค.

Day # -601: Ansible ๋ฐ ๋ถ„์ž

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

๊ฐœ๋…์ ์œผ๋กœ ์ด๋Š” testkitchen๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์—ญํ•  ํ…Œ์ŠคํŠธ๋ฅผ docker๋กœ ์ด๋™ํ•˜๊ณ  ์Šคํƒ์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ 20๊ฐœ ์—ญํ• ์— ๋Œ€ํ•œ ์‹œ๊ฐ„์ด 25~7๋ถ„ ์ •๋„๋กœ ์•ˆ์ •์ ์œผ๋กœ ๋‹จ์ถ•๋๋‹ค.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

ํ…Œ์ŠคํŠธ๋œ ์—ญํ•  ์ˆ˜๋ฅผ 17๊ฐœ๋กœ ๋Š˜๋ฆฌ๊ณ  45๊ฐœ ์—ญํ• ์„ ๋ฆฐํŒ…ํ•จ์œผ๋กœ์จ 28๊ฐœ์˜ ์  ํ‚จ์Šค ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ 2๋ถ„ ๋งŒ์— ์ด๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

Day #167: ํ”„๋กœ์ ํŠธ์— Ansible ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

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

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ผ๋ฐ˜์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ•˜๋“  ์ƒ๊ด€์—†์ด ์ข…์ด์— ๊ธ€์„ ์จ๋„ ๋˜๊ณ , ์˜ท์žฅ์— ์Šคํ‹ฐ์ปค๋ฅผ ๋ถ™์—ฌ๋„ ๋˜๊ณ , Jira์—์„œ ์ž‘์—…์„ ์ƒ์„ฑํ•ด๋„ ๋˜๊ณ , Google Docs๋ฅผ ์—ด์–ด์„œ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ. ๊ทธ ๊ณผ์ •์ด ์ฆ‰๊ฐ์ ์ด์ง€ ์•Š๊ณ  ๊ธธ๊ณ  ์ง€๋ฃจํ•  ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ๋‹ค๋ฆฌ๊ฐ€ ์ž๋ž๋‹ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง ์ค‘์— ์•„์ด๋””์–ด๊ฐ€ ๊ณ ๊ฐˆ๋˜๊ณ , ํ”ผ๊ณคํ•ด์ง€๊ณ , ์••๋„๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ˆ„๊ตฌ๋„ ์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฆฌํŒฉํ† ๋ง์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ๋จน๋‹ค.
  • ์ž.
  • ์ฝ”๋“œ
  • IaC ํ…Œ์ŠคํŠธ.
  • ๋ฐ˜๋ณต

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์˜๋„ํ•œ ๋ชฉํ‘œ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์ด๊ฒƒ์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

๋ชจ๋“  ๊ฒƒ์„ ์ฆ‰์‹œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ Linting๊ณผ ๊ตฌ๋ฌธ ํ™•์ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

181์ผ์ฐจ: ๊ทธ๋ฆฐ ๋นŒ๋“œ ๋งˆ์Šคํ„ฐ

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

Linting์€ Green Build Master๋ฅผ ํ–ฅํ•œ ์ž‘์€ ์ฒซ๊ฑธ์Œ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์ด ์ค‘๋‹จ๋˜์ง€๋Š” ์•Š์ง€๋งŒ Jenkins์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์นœํ™˜๊ฒฝ ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” ํŒ€ ๊ฐ„์˜ ์Šต๊ด€์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋นจ๊ฐ„์ƒ‰ ํ…Œ์ŠคํŠธ๋Š” ๋‚˜์˜๋‹ค.
  • ๋‚˜๋Š” ๋ญ”๊ฐ€๋ฅผ ๊ณ ์น˜๋Š” ๋™์‹œ์— ์ฝ”๋“œ๋ฅผ ์ด์ „๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์ข‹๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์™”์Šต๋‹ˆ๋‹ค.

Day #193: Linting๋ถ€ํ„ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊นŒ์ง€

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ฝ”๋“œ๋ฅผ ๋งˆ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉด ๋‹จ๊ณ„๋ณ„ ๊ฐœ์„  ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Linting์„ ์‹œ์ž‘ ์—ญํ• ๋กœ ๋Œ€์ฒดํ•˜๋ฉด ๋ฉฑ๋“ฑ์„ฑ ์—†์ด๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญํ• ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Day #211: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊นŒ์ง€

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

๋Œ€๋ถ€๋ถ„์˜ ์—ญํ• ์ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ๋ฆฐํŠธ๋˜๋ฉด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ์ธํ”„๋ผ์˜ ๋‹จ์ผ ๋ธŒ๋ฆญ์ด ์•„๋‹ˆ๋ผ ์ „์ฒด ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ๊ณผ ๊ฐ™์€ ๋ธŒ๋ฆญ์˜ ์กฐํ•ฉ์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

jenkins๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ญํ• /ํ”Œ๋ ˆ์ด๋ถ์„ ๋ณ‘๋ ฌ๋กœ ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ๋งˆ์ง€๋ง‰์œผ๋กœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Jenkins + Docker + Ansible = ํ…Œ์ŠคํŠธ

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

  1. ์ €์žฅ์†Œ๋ฅผ ์ฒดํฌ์•„์›ƒํ•˜๊ณ  ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.
  2. Lint ํ”Œ๋ ˆ์ด๋ถ ๋‹จ๊ณ„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฆฐํŠธ ์—ญํ•  ๋‹จ๊ณ„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ ์—ญํ•  ๋‹จ๊ณ„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ํ…Œ์ŠคํŠธ ์—ญํ•  ๋‹จ๊ณ„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    1. ๋ฆฐํŠธ ์—ญํ• .
    2. ๋‹ค๋ฅธ ์—ญํ• ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ํ™•์ธํ•˜์„ธ์š”.
    3. ๊ตฌ๋ฌธ์„ ํ™•์ธํ•˜์„ธ์š”.
    4. ๋„์ปค ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    5. ๋ถ„์ž/๊ธฐ๋ณธ/playbook.yml์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    6. ๋ฉฑ๋“ฑ์„ฑ์„ ํ™•์ธํ•˜์„ธ์š”.
  6. ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์‹คํ–‰
  7. ๋งˆ๊ฐ์žฌ

Day #271: ๋ฒ„์Šค ํŒฉํ„ฐ

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์ฒ˜์Œ์—๋Š” ๋ฆฌํŒฉํ† ๋ง์„ XNUMX~XNUMX๋ช…์˜ ์†Œ๊ทœ๋ชจ ๊ทธ๋ฃน์œผ๋กœ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋งˆ์Šคํ„ฐ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํŒ€์€ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์‹์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์ฝ”๋“œ ๊ฒ€ํ† ๋ฅผ ํ†ตํ•ด ์ธํ”„๋ผ์™€ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ง€์‹์„ ์ „ํŒŒํ•˜๋Š” ๋ฐ ๊ธฐ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•˜์ด๋ผ์ดํŠธ๋Š” ์ผ์ •์— ๋”ฐ๋ผ ๋ฆฌ๋ทฐ์–ด๋ฅผ ํ•œ ๋ช…์”ฉ ์„ ์ •ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋Š ์ •๋„ ํ™•๋ฅ ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋ฐ˜ ์‹œ์„ค๋กœ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ๋Š” ํŽธ์•ˆํ•ด์•ผ ํ•ด์š”. ๊ฒ€ํ† ํ•˜๊ณ , ์–ด๋–ค ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€, ํ† ๋ก  ๋‚ด์—ญ์„ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” jenkins + bitbucket + jira๋ฅผ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ๋ทฐ๋Š” ๋งŒ๋ณ‘ํ†ต์น˜์•ฝ์ด ์•„๋‹ˆ๋ฉฐ, ์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ ์šฐ๋ฆฌ๋Š” ๋งˆ์Šคํ„ฐ ์ฝ”๋“œ์— ๋“ค์–ด๊ฐ€ ์‹คํŒจ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

- get_url:
    url: "{{ actk_certs }}/{{ item.1 }}"
    dest: "{{ actk_src_tmp }}/"
    username: "{{ actk_mvn_user }}"
    password: "{{ actk_mvn_pass }}"
  with_subelements:
    - "{{ actk_cert_list }}"
    - "{{ actk_certs }}"
  delegate_to: localhost

- copy:
    src: "{{ actk_src_tmp }}/{{ item.1 }}"
    dest: "{{ actk_dst_tmp }}"
  with_subelements:
    - "{{ actk_cert_list }}"
    - "{{ actk_certs }}"

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ๊ณ ์ณค์ง€๋งŒ ์ž”์—ฌ๋ฌผ์€ ๋‚จ์•„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

get_url:
    url: "{{ actk_certs }}/{{ actk_item }}"
    dest: "{{ actk_src_tmp }}/{{ actk_item }}"
    username: "{{ actk_mvn_user }}"
    password: "{{ actk_mvn_pass }}"
  loop_control:
    loop_var: actk_item
  with_items: "{{ actk_cert_list }}"
  delegate_to: localhost

- copy:
    src: "{{ actk_src_tmp }}/{{ actk_item }}"
    dest: "{{ actk_dst_tmp }}"
  loop_control:
    loop_var: actk_item
  with_items: "{{ actk_cert_list }}"

Day #311: ํ…Œ์ŠคํŠธ ์†๋„ ํ–ฅ์ƒ

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋” ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋นŒ๋“œ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ตœ๋Œ€ XNUMX์‹œ๊ฐ„๊นŒ์ง€ ๋Š๋ฆฌ๊ฒŒ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆํŠธ๋กœ ์ค‘ ํ•˜๋‚˜์—๋Š” "ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์ง€๋งŒ ๋Š๋ฆฌ๋‹ค"๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์— ๋Œ€ํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํฌ๊ธฐํ•˜๊ณ  Docker์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜์—ฌ ๋” ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด testinfra๋ฅผ ansible ๊ฒ€์ฆ์ž๋กœ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์ผ๋ จ์˜ ์กฐ์น˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋„์ปค๋กœ ์ „ํ™˜ํ•˜์„ธ์š”.
  2. ์ข…์†์„ฑ์œผ๋กœ ์ธํ•ด ์ค‘๋ณต๋˜๋Š” ์—ญํ•  ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  3. ๋…ธ์˜ˆ์˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ์‹ญ์‹œ์˜ค.
  4. ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ˆœ์„œ.
  5. ๋ฆฐํŠธ ๋Šฅ๋ ฅ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ๋กœ์ปฌ๋กœ.

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

๊ทธ ๊ฒฐ๊ณผ ์  ํ‚จ์Šค์˜ ํŒŒ์ดํ”„๋ผ์ธ๋„ ํ†ตํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ชจ๋‘ ๋ณ‘๋ ฌ๋กœ ๋ฆฐํŠธํ•ฉ๋‹ˆ๋‹ค.
  3. ํ…Œ์ŠคํŠธ ์—ญํ•  ๋‹จ๊ณ„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋งˆ์นจ.

๊ตํ›ˆ

์ „์—ญ ๋ณ€์ˆ˜ ํ”ผํ•˜๊ธฐ

Ansible์€ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํ˜•์‹์˜ ๋ถ€๋ถ„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. private_role_vars, ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋งŒ๋ณ‘ ํ†ต์น˜์•ฝ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€์ž role_a ะธ role_b

# cat role_a/defaults/main.yml
---
msg: a

# cat role_a/tasks/main.yml
---
- debug:
    msg: role_a={{ msg }}

# cat role_b/defaults/main.yml
---
msg: b

# cat role_b/tasks/main.yml
---
- set_fact:
    msg: b
- debug:
    msg: role_b={{ msg }}

- hosts: localhost
  vars:
    msg: hello
  roles:
    - role: role_a
    - role: role_b
  tasks:
    - debug:
        msg: play={{msg}}

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

์žฌ๋ฏธ์žˆ๋Š” ์ ์€ ์—ญํ• ์ด ๋‚˜์—ด๋œ ์ˆœ์„œ์™€ ๊ฐ™์ด ํ•ญ์ƒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ํ”Œ๋ ˆ์ด๋ถ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์ด Ansible์˜ ํŠน์„ฑ์ด๋ฉฐ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ผ์ข…์˜ ํ•ฉ์˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ญํ•  ๋‚ด์—์„œ๋Š” ์ด ์—ญํ• ์— ์„ค๋ช…๋œ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

BAD: ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# cat roles/some_role/tasks/main.yml
---
debug:
  var: java_home

์ข‹์€: V defaults ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‚˜์ค‘์— ํ•ด๋‹น ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

# cat roles/some_role/defaults/main.yml
---
r__java_home:
 "{{ java_home | default('/path') }}"

# cat roles/some_role/tasks/main.yml
---
debug:
  var: r__java_home

์ ‘๋‘์‚ฌ ์—ญํ•  ๋ณ€์ˆ˜

BAD: ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# cat roles/some_role/defaults/main.yml
---
db_port: 5432

์ข‹์€: ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์—ญํ• ์—์„œ๋Š” ์—ญํ•  ์ด๋ฆ„ ์•ž์— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ๋ณด๋ฉด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# cat roles/some_role/defaults/main.yml
---
some_role__db_port: 5432

๋ฃจํ”„ ์ œ์–ด ๋ณ€์ˆ˜ ์‚ฌ์šฉ

BAD: ๋ฃจํ”„์—์„œ ํ‘œ์ค€ ๋ณ€์ˆ˜ ์‚ฌ์šฉ item, ์ด ์ž‘์—…/ํ”Œ๋ ˆ์ด๋ถ์ด ์–ด๋”˜๊ฐ€์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

---
- hosts: localhost
  tasks:
    - debug:
        msg: "{{ item }}"
      loop:
        - item1
        - item2

์ข‹์€: ๋‹ค์Œ์„ ํ†ตํ•ด ๋ฃจํ”„์˜ ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. loop_var.

---
- hosts: localhost
  tasks:
    - debug:
        msg: "{{ item_name }}"
      loop:
        - item1
        - item2
      loop_control:
        loop_var: item_name

์ž…๋ ฅ๋ณ€์ˆ˜ ํ™•์ธ

์šฐ๋ฆฌ๋Š” ๋ณ€์ˆ˜ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ๋Œ€๋กœ ์ •์˜๋˜์—ˆ๋Š”์ง€, ์˜ˆ๋ฅผ ๋“ค์–ด ๋นˆ ๊ฐ’์œผ๋กœ ์žฌ์ •์˜๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•œ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ข‹์€: ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

- name: "Verify that required string variables are defined"
  assert:
    that: ahs_var is defined and ahs_var | length > 0 and ahs_var != None
    fail_msg: "{{ ahs_var }} needs to be set for the role to work "
    success_msg: "Required variables {{ ahs_var }} is defined"
  loop_control:
    loop_var: ahs_var
  with_items:
    - ahs_item1
    - ahs_item2
    - ahs_item3

ํ•ด์‹œ ์‚ฌ์ „์„ ํ”ผํ•˜๊ณ  ํ‰๋ฉด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

์—ญํ• ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜์— ํ•ด์‹œ/์‚ฌ์ „์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•˜์œ„ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์ „์ฒด ํ•ด์‹œ/์‚ฌ์ „์„ ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ตฌ์„ฑ์ด ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

BAD: ํ•ด์‹œ/์‚ฌ์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

---
user:
  name: admin
  group: admin

์ข‹์€: ํ”Œ๋žซ ๋ณ€์ˆ˜ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

---
user_name: admin
user_group: "{{ user_name }}"

๋ฉฑ๋“ฑ์„ฑ ํ”Œ๋ ˆ์ด๋ถ ๋ฐ ์—ญํ•  ๋งŒ๋“ค๊ธฐ

์—ญํ• ๊ณผ ํ”Œ๋ ˆ์ด๋ถ์€ ๋ฉฑ๋“ฑ์›์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๋“œ๋ฆฌํ”„ํŠธ์™€ ๋ฌด์–ธ๊ฐ€ ์†์ƒ์— ๋Œ€ํ•œ ๋‘๋ ค์›€์„ ์ค„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ถ„์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฒƒ์ด ๊ธฐ๋ณธ ๋™์ž‘์ž…๋‹ˆ๋‹ค.

๋ช…๋ น ์…ธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

์‰˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด Ansible์˜ ํ•ต์‹ฌ์ธ ์„ ์–ธ์  ํŒจ๋Ÿฌ๋‹ค์ž„ ๋Œ€์‹  ๋ช…๋ นํ˜• ์„ค๋ช… ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ถ„์ž๋ฅผ ํ†ตํ•ด ์—ญํ•  ํ…Œ์ŠคํŠธ

๋ถ„์ž๋Š” ๋งค์šฐ ์œ ์—ฐํ•œ ์กด์žฌ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ถ„์ž ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค

ะ’ molecule.yml ์„น์…˜์—์„œ platforms ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ํ˜ธ์ŠคํŠธ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

---
    driver:
      name: docker
    platforms:
      - name: postgresql-instance
        hostname: postgresql-instance
        image: registry.example.com/postgres10:latest
        pre_build_image: true
        override_command: false
        network_mode: host
      - name: app-instance
        hostname: app-instance
        pre_build_image: true
        image: registry.example.com/docker_centos_ansible_tests
        network_mode: host

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ํ˜ธ์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. converge.yml ์‚ฌ์šฉ:

---
- name: Converge all
  hosts: all
  vars:
    ansible_user: root
  roles:
    - role: some_role

- name: Converge db
  hosts: db-instance
  roles:
    - role: some_db_role

- name: Converge app
  hosts: app-instance
  roles:
    - role: some_app_role

Ansible ๊ฒ€์ฆ์ž

๋ถ„์ž์—์„œ๋Š” ansible์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋ฆด๋ฆฌ์Šค 3๋ถ€ํ„ฐ ๊ธฐ๋ณธ๊ฐ’์ด์—ˆ์Šต๋‹ˆ๋‹ค. testinfra/inspec๋งŒํผ ์œ ์—ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํŒŒ์ผ ๋‚ด์šฉ์ด ์˜ˆ์ƒ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

---
- name: Verify
  hosts: all
  tasks:
    - name: copy config
      copy:
        src: expected_standalone.conf
        dest: /root/wildfly/bin/standalone.conf
        mode: "0644"
        owner: root
        group: root
      register: config_copy_result

    - name: Certify that standalone.conf changed
      assert:
        that: not config_copy_result.changed

๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์—ฐ๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

---
  - name: Verify
    hosts: solr
    tasks:
      - command: /blah/solr/bin/solr start -s /solr_home -p 8983 -force
      - uri:
          url: http://127.0.0.1:8983/solr
          method: GET
          status_code: 200
        register: uri_result
        until: uri_result is not failed
        retries: 12
        delay: 10
      - name: Post documents to solr
        command: /blah/solr/bin/post -c master /exampledocs/books.csv

๋ชจ๋“ˆ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋ณต์žกํ•œ ๋กœ์ง์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.

Ansible์€ ์„ ์–ธ์  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์˜นํ˜ธํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ๋ถ„๊ธฐ, ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜, ์…ธ ๋ชจ๋“ˆ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ž์‹ ๋งŒ์˜ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํŒ๊ณผ ์š”๋ น ์š”์•ฝ

  1. ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ํ”ผํ•˜์„ธ์š”.
  2. ์ ‘๋‘์‚ฌ ์—ญํ•  ๋ณ€์ˆ˜.
  3. ๋ฃจํ”„ ์ œ์–ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  4. ์ž…๋ ฅ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  5. ํ•ด์‹œ ์‚ฌ์ „์„ ํ”ผํ•˜๊ณ  ํ‰๋ฉด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  6. ๋ฉฑ๋“ฑ์„ฑ ํ”Œ๋ ˆ์ด๋ถ ๋ฐ ์—ญํ• ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  7. ๋ช…๋ น ์…ธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.
  8. ๋ถ„์ž๋ฅผ ํ†ตํ•ด ์—ญํ• ์„ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”.
  9. ๋ชจ๋“ˆ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋ณต์žกํ•œ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

๊ฒฐ๋ก 

Ansible ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  XNUMX๋…„ ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ ๋‹นํ™ฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•

IaC๊ฐ€ ์žˆ๋”๋ผ๋„ ํ”„๋กœ์ ํŠธ์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋ƒฅ ๋ฆฌํŒฉํ„ฐ๋งํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ธ๋‚ด์™€ ์‹œ๊ฐ„, ์ง€์‹์ด ํ•„์š”ํ•œ ๊ธด ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

UPD1 2020.05.01 20:30 โ€” ํ”Œ๋ ˆ์ด๋ถ์˜ ๊ธฐ๋ณธ ํ”„๋กœํŒŒ์ผ๋ง์„ ์œ„ํ•ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. callback_whitelist = profile_tasks ์˜ค๋žซ๋™์•ˆ ์ •ํ™•ํžˆ ๋ฌด์—‡์ด ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์šฐ๋ฆฌ๋Š” Ansible ๊ฐ€์† ํด๋ž˜์‹. ๋‹น์‹ ์€ ๋˜ํ•œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋ฏธํ† ๊ฒ
UPD2 2020.05.03 16:34 - Angielski ๋ฒ„์ „

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€