์ฐ๋ฆฌ๋ ์ด๋ฏธ GitOps ๋๊ตฌ์ ๋ํด ๋ ๋ฒ ์ด์ ์ด์ผ๊ธฐํ์ต๋๋ค.
์ฌ์ดํธ ๊ตฌ์กฐ์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํด๋ณด์ธ์. ๋ชจ๋ ๋ฒ์ ์ ๋ํ ๊ณตํต ๋ฉ๋ด, ๋ฆด๋ฆฌ์ค ์ ๋ณด๊ฐ ํฌํจ๋ ํ์ด์ง ๋ฑ์ ์์ฑํฉ๋๋ค. - ์ฐ๋ฆฌ๋ํ์ง ์์ต๋๋ค. ๋์ ๋์ ์ด์
๋ธ๋ฆฌ์ ๋ฌธ์ ์ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถ๊ณ ๊ทธ์ ์๋ฐ๋๋ CI/CD ํ๋ก์ธ์ค์ ๋ํด ์กฐ๊ธ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๊ฐ: ์ฌ์ดํธ ์๋ ๋ฐฉ์
์ฐ์ werf ๋ฌธ์๋ ํด๋น ์ฝ๋์ ํจ๊ป ์ ์ฅ๋ฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ด ๊ธฐ์ฌ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ํน์ ๊ฐ๋ฐ ์๊ตฌ ์ฌํญ์ ๋ถ๊ณผํ์ง๋ง ์ต์ํ ๋ค์๊ณผ ๊ฐ์ด ๋งํ ์ ์์ต๋๋ค.
- ์๋ก์ด werf ๊ธฐ๋ฅ์ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ์ง ์๊ณ ์ถ์ํด์๋ ์ ๋๋ฉฐ, ๋ฐ๋๋ก ๋ฌธ์์ ๋ณ๊ฒฝ ์ฌํญ์ werf์ ์ ๋ฒ์ ์ถ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ด ํ๋ก์ ํธ๋ ์๋นํ ์ง์ค์ ์ผ๋ก ๊ฐ๋ฐ๋์์ต๋๋ค. ์ ๋ฒ์ ์ ํ๋ฃจ์ ์ฌ๋ฌ ๋ฒ ์ถ์๋ ์ ์์ต๋๋ค.
- ์๋ก์ด ๋ฒ์ ์ ๋ฌธ์๊ฐ ํฌํจ๋ ์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ๋ ์๋ ์์ ์ ์ ์ด๋ ์ง๋ฃจํฉ๋๋ค.
- ์ด ํ๋ก์ ํธ๋ ์๋ฏธ๋ก ์ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํฉ๋๋ค.
๋ฒ์ ๊ด๋ฆฌ , 5๊ฐ์ ์์ ์ฑ ์ฑ๋์ด ์์ต๋๋ค. ๋ฆด๋ฆฌ์ค ํ๋ก์ธ์ค์๋ ์์ ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฑ๋์ ํตํด ๋ฒ์ ์ ์์ฐจ์ ์ผ๋ก ์ ๋ฌํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ํ์์ ๊ฒฌ๊ณ ํ ๋ฒ์ ์ผ๋ก; - ์ด ์ฌ์ดํธ์๋ ๊ธฐ๋ณธ(์ฆ, ์์ด) ๋ฒ์ ๊ณผ ๋ณํํ์ฌ "์ด์ ์๊ณ ๋ฐ์ ํ๋"(์ฆ, ๋ด์ฉ์ด ์ ๋ฐ์ดํธ๋๋) ๋ฌ์์์ด ๋ฒ์ ์ด ์์ต๋๋ค.
์ด ๋ชจ๋ "๋ด๋ถ ์ฃผ๋ฐฉ"์ ์ฌ์ฉ์์๊ฒ ์จ๊ธฐ๊ณ ์ฌ์ฉ์์๊ฒ "์๋ํ๋" ๊ฒ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒ ํ์ต๋๋ค. ๋ณ๋์ werf ์ค์น ๋ฐ ์
๋ฐ์ดํธ ๋๊ตฌ -๊ฐ์
ํํ์ด์ง ๋ฒ์ ์ ํ ๋ฉ๋ด์์๋ ๊ฐ ์ฑ๋๋ณ ์ต์ ๋ฒ์ ์ werf๋ฅผ ๋ณด์ค ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฃผ์๋ก
์ ์ฒด์ ์ผ๋ก ์ฌ์ดํธ์๋ ๋ค์ ๋ฒ์ ์ด ์ ๊ณต๋ฉ๋๋ค.
- ๋ฃจํธ(๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฆผ),
- ๊ฐ ๋ฆด๋ฆฌ์ค์ ๊ฐ ํ์ฑ ์
๋ฐ์ดํธ ์ฑ๋์ ๋ํด(์:
werf.io/v1.0-beta ).
ํน์ ๋ฒ์ ์ ์ฌ์ดํธ๋ฅผ ์์ฑํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ๋ฉด ์ถฉ๋ถํฉ๋๋ค. /docs
werf ์ ์ฅ์ ํด๋น ๋ช
๋ น(jekyll build
), ํ์ํ ๋ฒ์ ์ Git ํ๊ทธ๋ก ์ ํํ ํ.
๋ค์์ ์ถ๊ฐํ๋ ์ผ๋ง ๋จ์์ต๋๋ค.
- ์ ํธ๋ฆฌํฐ ์์ฒด(werf)๊ฐ ์กฐ๋ฆฝ์ ์ฌ์ฉ๋ฉ๋๋ค.
- CI/CD ํ๋ก์ธ์ค๋ GitLab CI๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค.
- ๋ฌผ๋ก ์ด ๋ชจ๋ ๊ฒ์ Kubernetes์์ ์คํ๋ฉ๋๋ค.
์์
์ด์ ์ค๋ช ๋ ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ๊ณ ๋ คํ๋ ์์ ์ ๊ณต์ํํด ๋ณด๊ฒ ์ต๋๋ค.
- ์ ๋ฐ์ดํธ ์ฑ๋์์ werf ๋ฒ์ ์ ๋ณ๊ฒฝํ ํ ์ฌ์ดํธ์ ๋ฌธ์๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค..
- ๊ฐ๋ฐ์ ์ํด์๋ ๋๋๋ก ๋ค์์ ์ํํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฌ์ดํธ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฒ์ ๋ณด๊ธฐ.
ํด๋น Git ํ๊ทธ์์ ์ฑ๋์ ๋ฒ์ ์ ๋ณ๊ฒฝํ ํ ์ฌ์ดํธ๋ฅผ ๋ค์ ์ปดํ์ผํด์ผ ํ์ง๋ง ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ณผ์ ์์ ๋ค์ ๊ธฐ๋ฅ์ ์ป๊ฒ ๋ฉ๋๋ค.
- ์ฑ๋์ ๋ฒ์ ๋ชฉ๋ก์ด ๋ณ๊ฒฝ๋๋ฏ๋ก ๋ฒ์ ์ด ๋ณ๊ฒฝ๋ ์ฑ๋์ ๋ํ ๋ฌธ์๋ฅผ ๋ค์ ์์ฑํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ฒฐ๊ตญ, ๋ชจ๋ ๊ฒ์ ๋ค์ ์ฌ๊ฑดํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ข์ ์ผ์ด ์๋๋๋ค.
- ๋ฆด๋ฆฌ์ค ์ฑ๋ ์ธํธ๋ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ ์์ ์์๋ ์ด๊ธฐ ์ก์ธ์ค 1.1 ๋ฆด๋ฆฌ์ค๋ณด๋ค ๋ ์์ ์ ์ธ ๋ฒ์ ์ด ์ฑ๋์ ์์ ์ ์์ง๋ง ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ์ง ์์ต๋๊น?
๊ทธ๊ฒ์ ๋ฐํ ๊ทธ ์ด์ ๋ธ๋ฆฌ๋ ์ธ๋ถ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค..
ะ ะตะฐะปะธะทะฐัะธั
์ ๊ทผ๋ฒ ์ ํ
๋๋ ํ์ํ ๊ฐ ๋ฒ์ ์ Kubernetes์์ ๋ณ๋์ Pod๋ก ์คํํ ์ ์์ต๋๋ค. ์ด ์ต์ ์ ์์ ์ ์ธ Werf ๋ฆด๋ฆฌ์ค ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ํด๋ฌ์คํฐ์ ๊ฐ์ฒด ์๊ฐ ๋ ๋ง์์ง๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๊ฒฐ๊ตญ ๋ ๋ณต์กํ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ ๋ฒ์ ์๋ ์์ฒด HTTP ์๋ฒ๊ฐ ์๊ณ ๋ก๋๊ฐ ์ ์ต๋๋ค. ๋ฌผ๋ก ์ด๋ ๋ ๋ง์ ์์ ๋น์ฉ์ ์๋ฐํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๊ฐ์ ๊ธธ์ ํํ์ด์ ํ์ํ ๋ชจ๋ ๋ฒ์ ์ ํ๋์ ์ด๋ฏธ์ง๋ก ๋ชจ์ผ๊ธฐ. ์ฌ์ดํธ์ ๋ชจ๋ ๋ฒ์ ์ ๋ํด ์ปดํ์ผ๋ ํต๊ณ๋ NGINX๊ฐ ์๋ ์ปจํ ์ด๋์ ์์ผ๋ฉฐ ํด๋น ๋ฐฐํฌ์ ๋ํ ํธ๋ํฝ์ NGINX Ingress๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค. ์ํ ๋น์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ธ ๊ฐ๋จํ ๊ตฌ์กฐ๋ฅผ ํตํด Kubernetes ์์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ(๋ก๋์ ๋ฐ๋ผ)๋ฅผ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
๋ ์ ํํ๊ฒ ๋งํ๋ฉด ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์์งํ๊ณ ์์ต๋๋ค. ํ๋๋ ์์ฐ ํ๋ก์ฉ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ๊ฐ๋ฐ ํ๋ก์ฉ ์ถ๊ฐ ์ด๋ฏธ์ง์ ๋๋ค. ์ถ๊ฐ ์ด๋ฏธ์ง๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ํจ๊ป ๊ฐ๋ฐ ํ๋ก์์๋ง ์ฌ์ฉ(์คํ)๋๊ณ ๊ฒํ ์ปค๋ฐ์ ์ฌ์ดํธ ๋ฒ์ ์ ํฌํจํ๋ฉฐ ์ด๋ค ์ฌ์ด์ ๋ผ์ฐํ ์ Ingress ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
werf ๋ git ํด๋ก ๋ฐ ์ํฐํฉํธ
์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด ํน์ ๋ฒ์ ์ ๋ฌธ์์ ๋ํ ์ฌ์ดํธ ์ ์ ์ ์์ฑํ๋ ค๋ฉด ์ ์ ํ ์ ์ฅ์ ํ๊ทธ๋ก ์ ํํ์ฌ ๋น๋ํด์ผ ํฉ๋๋ค. ๋ํ ๋น๋ํ ๋๋ง๋ค ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ณ ๋ชฉ๋ก์์ ์ ์ ํ ํ๊ทธ๋ฅผ ์ ํํ์ฌ ์ด ์์ ์ ์ํํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์์ ์ด๋ฉฐ ๋์ฑ์ด ์ฌ์ํ ์ง์นจ์ ์์ฑํด์ผ ํฉ๋๋ค. ๋ ๋ค๋ฅธ ์ฌ๊ฐํ ๋จ์ ์ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์กฐ๋ฆฝ ์ค์ ํญ๋ชฉ์ ์บ์ํ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์๋ werf ์ ํธ๋ฆฌํฐ ์์ฒด๊ฐ ์ฐ๋ฆฌ๋ฅผ ๋์์ ๊ตฌํํฉ๋๋ค. ์ค๋งํธ ์บ์ฑ ๊ทธ๋ฆฌ๊ณ ๋น์ ์ด ์ฌ์ฉํ ์ ์๋๋ก fetch
ํ์ํ๋ค๋ฉด. ๋ํ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋ ํ์ํ ๋๋ ํฐ๋ฆฌ๋ง ์ ํํ ์ ์์ต๋๋ค. docs
), ์ถ๊ฐ๋๋ ๋ฐ์ดํฐ์ ์์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
Jekyll์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ปดํ์ผํ๊ธฐ ์ํด ์ค๊ณ๋ ๋๊ตฌ์ด๊ณ ์ต์ข
์ด๋ฏธ์ง์๋ ํ์ํ์ง ์์ผ๋ฏ๋ก Jekyll์์ ์ปดํ์ผํ๋ ๊ฒ์ด ๋
ผ๋ฆฌ์ ์
๋๋ค.
์ฐ๋ฆฌ๋ werf.yaml์ ์์ฑํฉ๋๋ค
๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ฐ ๋ฒ์ ์ ๋ณ๋์ Werf ์ํฐํฉํธ๋ก ์ปดํ์ผํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๋ ์กฐ๋ฆฝํ๋ ๋์ ์ผ๋ง๋ ๋ง์ ์ ๋ฌผ์ด ์์์ง ๋ชจ๋ฆ ๋๋ค, ๋ฐ๋ผ์ ๊ณ ์ ๋ ๋น๋ ๊ตฌ์ฑ์ ์์ฑํ ์ ์์ต๋๋ค(์๊ฒฉํ ๋งํ๋ฉด ์ฌ์ ํ ๊ฐ๋ฅํ์ง๋ง ์์ ํ ํจ๊ณผ์ ์ด์ง๋ ์์ต๋๋ค).
werf๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. werf.yaml
) ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํตํด ๊ฐ๋ฅํด์ง๋ค. ์ฆ์ ๊ตฌ์ฑ ์์ฑ ์ธ๋ถ ๋ฐ์ดํฐ์ ๋ฐ๋ผ(ํ์ํ ๊ฒ!) ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ธ๋ถ ๋ฐ์ดํฐ๋ ๋ฒ์ ๋ฐ ๋ฆด๋ฆฌ์ค์ ๋ํ ์ ๋ณด์ด๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ ์์ ์ํฐํฉํธ๋ฅผ ์์งํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ป์ต๋๋ค. werf-doc
ะธ werf-dev
๋ค๋ฅธ ํ๋ก์์ ์คํ๋ฉ๋๋ค.
์ธ๋ถ ๋ฐ์ดํฐ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค. ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
RELEASES
โ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๊ฐ ๋ชฉ๋ก ํ์์ ๋ฆด๋ฆฌ์ค ๋ชฉ๋ก๊ณผ ํด๋น ํ์ฌ Werf ๋ฒ์ ์ด ํฌํจ๋ ์ค<ะะะะะ _ะ ะะะะะ>%<ะะะะะ _ะะะ ะกะะ>
. ์:1.0%v1.0.4-beta.20
-
CHANNELS
โ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ํ์์ ๊ฐ ๋ชฉ๋ก ํ์์ผ๋ก ์ฑ๋ ๋ชฉ๋ก๊ณผ ํด๋น ํ์ฌ ๋ฒ์ ์ werf๊ฐ ํฌํจ๋ ์ค<ะะะะะ>%<ะะะะะ _ะะะ ะกะะ>
. ์:1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
-
ROOT_VERSION
โ ์ฌ์ดํธ์ ๊ธฐ๋ณธ์ ์ผ๋ก werf ๋ฆด๋ฆฌ์ค ๋ฒ์ ์ด ํ์๋ฉ๋๋ค(ํญ์ ๊ฐ์ฅ ๋์ ๋ฆด๋ฆฌ์ค ๋ฒํธ๋ก ๋ฌธ์๋ฅผ ํ์ํ ํ์๋ ์์ต๋๋ค). ์:v1.0.4-beta.20
-
REVIEW_SHA
โ ํ ์คํธ ๋ฃจํ์ฉ ๋ฒ์ ์ ๋น๋ํ๋ ๋ฐ ํ์ํ ๊ฒํ ์ปค๋ฐ์ ํด์์ ๋๋ค.
์ด๋ฌํ ๋ณ์๋ GitLab CI ํ์ดํ๋ผ์ธ์ ์ฑ์์ง๋ฉฐ, ์๋์๋ ์ ํํ ์ด๋ป๊ฒ ์์ฑ๋์ด ์๋์ง ์ค๋ช ๋์ด ์์ต๋๋ค.
์ฐ์ ํธ์์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค. werf.yaml
ํ
ํ๋ฆฟ ๋ณ์๋ก ์ด๋ํ์ฌ ํ๊ฒฝ ๋ณ์์ ๊ฐ์ ํ ๋นํฉ๋๋ค.
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }}
์ฌ์ดํธ์ ์ ์ ๋ฒ์ ์ ์ปดํ์ผํ๊ธฐ ์ํ ์ํฐํฉํธ์ ๋ํ ์ค๋ช
์ ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ๋ชจ๋ ๊ฒฝ์ฐ(๋ฃจํธ ๋ฒ์ ์์ฑ ๋ฐ ๊ฐ๋ฐ ํ๋ก์ฉ ๋ฒ์ ํฌํจ)์ ๋ํด ๋์ผํฉ๋๋ค. ๋ฐ๋ผ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋์ ๋ธ๋ก์ผ๋ก ์ด๋ํ๊ฒ ์ต๋๋ค. define
- ํ์ ์ฌ์ฌ์ฉ์ ์ํด include
. ํ
ํ๋ฆฟ์ ๋ค์ ์ธ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
-
Version
โ ์์ฑ๋ ๋ฒ์ (ํ๊ทธ ์ด๋ฆ) -
Channel
โ ์ํฐํฉํธ๊ฐ ์์ฑ๋๋ ์ ๋ฐ์ดํธ ์ฑ๋์ ์ด๋ฆ -
Commit
โ ๊ฒํ ์ปค๋ฐ์ ์ํด ์ํฐํฉํธ๊ฐ ์์ฑ๋ ๊ฒฝ์ฐ ์ปค๋ฐ ํด์์ ๋๋ค. - ๋ฌธ๋งฅ.
์ํฐํฉํธ ํ ํ๋ฆฟ ์ค๋ช
{{- define "doc_artifact" -}}
{{- $Root := index . "Root" -}}
artifact: doc-{{ .Channel }}
from: jekyll/builder:3
mount:
- from: build_dir
to: /usr/local/bundle
ansible:
install:
- shell: |
export PATH=/usr/jekyll/bin/:$PATH
- name: "Install Dependencies"
shell: bundle install
args:
executable: /bin/bash
chdir: /app/docs
beforeSetup:
{{- if .Commit }}
- shell: echo "Review SHA - {{ .Commit }}."
{{- end }}
{{- if eq .Channel "root" }}
- name: "releases.yml HASH: {{ $Root.Files.Get "releases.yml" | sha256sum }}"
copy:
content: |
{{ $Root.Files.Get "releases.yml" | indent 8 }}
dest: /app/docs/_data/releases.yml
{{- else }}
- file:
path: /app/docs/_data/releases.yml
state: touch
{{- end }}
- file:
path: "{{`{{ item }}`}}"
state: directory
mode: 0777
with_items:
- /app/main_site/
- /app/ru_site/
- file:
dest: /app/docs/pages_ru/cli
state: link
src: /app/docs/pages/cli
- shell: |
echo -e "werfVersion: {{ .Version }}nwerfChannel: {{ .Channel }}" > /tmp/_config_additional.yml
export PATH=/usr/jekyll/bin/:$PATH
{{- if and (ne .Version "review") (ne .Channel "root") }}
{{- $_ := set . "BaseURL" ( printf "v%s" .Channel ) }}
{{- else if ne .Channel "root" }}
{{- $_ := set . "BaseURL" .Channel }}
{{- end }}
jekyll build -s /app/docs -d /app/_main_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/tmp/_config_additional.yml
jekyll build -s /app/docs -d /app/_ru_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/app/docs/_config_ru.yml,/tmp/_config_additional.yml
args:
executable: /bin/bash
chdir: /app/docs
git:
- url: https://github.com/flant/werf.git
to: /app/
owner: jekyll
group: jekyll
{{- if .Commit }}
commit: {{ .Commit }}
{{- else }}
tag: {{ .Version }}
{{- end }}
stageDependencies:
install: ['docs/Gemfile','docs/Gemfile.lock']
beforeSetup: '**/*'
includePaths: 'docs'
excludePaths: '**/*.sh'
{{- end }}
์ํฐํฉํธ ์ด๋ฆ์ ๊ณ ์ ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฑ๋ ์ด๋ฆ(๋ณ์ ๊ฐ)์ ์ถ๊ฐํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค. .Channel
)๋ฅผ ์ํฐํฉํธ ์ด๋ฆ์ ์ ๋ฏธ์ฌ๋ก ์ฌ์ฉํฉ๋๋ค. artifact: doc-{{ .Channel }}
. ํ์ง๋ง ์ํฐํฉํธ์์ ๊ฐ์ ธ์ฌ ๋๋ ๋์ผํ ์ด๋ฆ์ ์ฐธ์กฐํด์ผ ํ๋ค๋ ์ ์ ์ดํดํด์ผ ํฉ๋๋ค.
์ํฐํฉํธ๋ฅผ ์ค๋ช
ํ ๋ ๋ค์ werf ๊ธฐ๋ฅ์ด ์ฌ์ฉ๋ฉ๋๋ค. build_dir
ํ์ดํ๋ผ์ธ ์คํ ์ฌ์ด์ Jekyll ์บ์๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ์ฌ์กฐ๋ฆฝ ์๋๊ฐ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค..
ํ์ผ์ ์ฌ์ฉ์ ์์์ฐจ๋ ธ์ ์๋ ์์ต๋๋ค. releases.yml
๋ค์์์ ์์ฒญํ ๋ฆด๋ฆฌ์ค ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ YAML ํ์ผ์
๋๋ค.
์ด๋ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. if
ํ
ํ๋ฆฟ ๋ฐ ๋์์ธ ์ด๋ {{ $Root.Files.Get "releases.yml" | sha256sum }}
๋ฌด๋์์ .Channel
๊ฐ๋ค root
) ํ์ผ ํด์ releases.yml
Ansible ์์
์ด๋ฆ์ ์ผ๋ถ์ด๋ฏ๋ก ์ ์ฒด ๋จ๊ณ์ ์๋ช
์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค(๋งค๊ฐ๋ณ์ name
). ๋ฐ๋ผ์ ๋ณ๊ฒฝํ ๋ ์ฝํ
์ธ ํ์ผ releases.yml
ํด๋น ์ํฐํฉํธ๊ฐ ์ฌ์กฐ๋ฆฝ๋ฉ๋๋ค.
์ธ๋ถ ์ ์ฅ์ ์์
์๋ ์ฃผ์ํ์๊ธฐ ๋ฐ๋๋๋ค. ์ ๋ฌผ์ ์ด๋ฏธ์ง์์ /docs
, ์ ๋ฌ๋ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ํ์ ํ๊ทธ ๋๋ ๋ฆฌ๋ทฐ ์ปค๋ฐ์ ๋ฐ์ดํฐ๊ฐ ์ฆ์ ์ถ๊ฐ๋ฉ๋๋ค.
์ด์ ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์ ์ก๋ ์ฑ๋ ๋ฐ ๋ฆด๋ฆฌ์ค ๋ฒ์ ์ ์ด์์ ๋ํ ์ค๋ช
์ ์์ฑํ๊ธฐ ์ํด ๋ณ์์ ๋ํ ๋ฃจํ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. .WerfVersions
ะฒ werf.yaml
:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}
์๋ํ๋ฉด ๋ฃจํ๋ ์ฌ๋ฌ ์ํฐํฉํธ๋ฅผ ์์ฑํ ๊ฒ์
๋๋ค(๊ทธ๋ ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค). ์ด๋ค ์ฌ์ด์ ๊ตฌ๋ถ ๊ธฐํธ(์ํ์ค)๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ---
(๊ตฌ์ฑ ํ์ผ ๊ตฌ๋ฌธ์ ๋ํ ์์ธํ ๋ด์ฉ์
์ ์ฌํ์ง๋ง ๋ฃจํ ์์ด "ํน์ ์ฌ๋ก"(๋ฃจํธ ๋ฒ์ ๋ฐ ๊ฒํ ์ปค๋ฐ์ ๋ฒ์ )์ ๋ํ ์ํฐํฉํธ ํ ํ๋ฆฟ์ ํธ์ถํฉ๋๋ค.
{{ dict "Version" .WerfRootVersion "Channel" "root" "Root" $Root | include "doc_artifact" }}
---
{{- if .WerfReviewCommit }}
{{ dict "Version" "review" "Channel" "review" "Commit" .WerfReviewCommit "Root" $Root | include "doc_artifact" }}
{{- end }}
๋ฆฌ๋ทฐ ์ปค๋ฐ์ ์ํ ์ํฐํฉํธ๋ ๋ณ์๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ์๋ง ๋น๋๋ฉ๋๋ค. .WerfReviewCommit
.
์ ๋ฌผ์ด ์ค๋น๋์์ต๋๋ค. ์ด์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์์ํ ์๊ฐ์ ๋๋ค!
Kubernetes์์ ์คํ๋๋๋ก ์ค๊ณ๋ ์ต์ข
์ด๋ฏธ์ง๋ ์๋ฒ ๊ตฌ์ฑ ํ์ผ์ด ์ถ๊ฐ๋ ์ผ๋ฐ NGINX์
๋๋ค. nginx.conf
๊ทธ๋ฆฌ๊ณ ์ธ๊ณต๋ฌผ๋ก๋ถํฐ์ ์ ์ . ์ฌ์ดํธ ๋ฃจํธ ๋ฒ์ ์ ์ํฐํฉํธ ์ธ์๋ ๋ณ์์ ๋ํด ๋ฃจํ๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. .WerfVersions
์ฑ๋ ๋ฐ ๋ฆด๋ฆฌ์ค ๋ฒ์ ์ ์ํฐํฉํธ๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด + ์ด์ ์ ์ฑํํ ์ํฐํฉํธ ๋ช
๋ช
๊ท์น์ ๋ฐ๋ฆ
๋๋ค. ๊ฐ ์ํฐํฉํธ๋ ๋ ๊ฐ์ง ์ธ์ด๋ก ์ฌ์ดํธ ๋ฒ์ ์ ์ ์ฅํ๋ฏ๋ก ๊ตฌ์ฑ์์ ์ ๊ณตํ๋ ์์น๋ก ์ด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ต์ข ์ด๋ฏธ์ง์ ๋ํ ์ค๋ช werf-doc
image: werf-doc
from: nginx:stable-alpine
ansible:
setup:
- name: "Setup /etc/nginx/nginx.conf"
copy:
content: |
{{ .Files.Get ".werf/nginx.conf" | indent 8 }}
dest: /etc/nginx/nginx.conf
- file:
path: "{{`{{ item }}`}}"
state: directory
mode: 0777
with_items:
- /app/main_site/assets
- /app/ru_site/assets
import:
- artifact: doc-root
add: /app/_main_site
to: /app/main_site
before: setup
- artifact: doc-root
add: /app/_ru_site
to: /app/ru_site
before: setup
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
add: /app/_main_site
to: /app/main_site/v{{ $Channel }}
before: setup
{{ end -}}
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
add: /app/_ru_site
to: /app/ru_site/v{{ $Channel }}
before: setup
{{ end -}}
๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ํจ๊ป ๊ฐ๋ฐ ํ๋ก์์ ์คํ๋๋ ์ถ๊ฐ ์ด๋ฏธ์ง์๋ ๋ ๊ฐ์ง ๋ฒ์ ์ ์ฌ์ดํธ๋ง ํฌํจ๋ฉ๋๋ค. ์ฆ, ๊ฒํ ์ปค๋ฐ์ ๋ฒ์ ๊ณผ ์ฌ์ดํธ์ ๋ฃจํธ ๋ฒ์ (์ผ๋ฐ ์์ฐ์ด ์์ผ๋ฉฐ ๊ธฐ์ตํ๋ ๊ฒฝ์ฐ) , ๋ฆด๋ฆฌ์ค ๋ฐ์ดํฐ). ๋ฐ๋ผ์ ์ถ๊ฐ ์ด๋ฏธ์ง๋ ๊ฐ์ ธ์ค๊ธฐ ์น์ (๋ฐ ์ด๋ฆ)์์๋ง ๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ๋ค๋ฆ ๋๋ค.
image: werf-dev
...
import:
- artifact: doc-root
add: /app/_main_site
to: /app/main_site
before: setup
- artifact: doc-root
add: /app/_ru_site
to: /app/ru_site
before: setup
{{- if .WerfReviewCommit }}
- artifact: doc-review
add: /app/_main_site
to: /app/main_site/review
before: setup
- artifact: doc-review
add: /app/_ru_site
to: /app/ru_site/review
before: setup
{{- end }}
์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด ๋ฆฌ๋ทฐ ์ปค๋ฐ์ ์ํ ์ํฐํฉํธ๋ ์ค์ ๋ ํ๊ฒฝ ๋ณ์๊ฐ ์คํ๋ ๋๋ง ์์ฑ๋ฉ๋๋ค. REVIEW_SHA
. ํ๊ฒฝ ๋ณ์๊ฐ ์์ผ๋ฉด werf-dev ์ด๋ฏธ์ง๊ฐ ์ ํ ์์ฑ๋์ง ์์ ์๋ ์์ต๋๋ค. REVIEW_SHA
, ํ์ง๋ง ๊ทธ๋ฌ๊ธฐ ์ํด์๋
์กฐ๋ฆฝ์ด ์ค๋น๋์์ต๋๋ค! CI/CD์ ์ค์ํ ๋์์ค๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
GitLab CI์ ํ์ดํ๋ผ์ธ ๋ฐ ๋์ ๋น๋ ๊ธฐ๋ฅ
๋น๋๋ฅผ ์คํํ ๋ ์ฌ์ฉ๋๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค. werf.yaml
. ์ด๋ GitHub ํํฌ์์ ํ์ดํ๋ผ์ธ์ ํธ์ถํ ๋ ์ค์ ํ๊ฒ ๋ REVIEW_SHA ๋ณ์์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
Bash ์คํฌ๋ฆฝํธ์์ ํ์ํ ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค. generate_artifacts
, ๋ ๊ฐ์ GitLab ํ์ดํ๋ผ์ธ ์ํฐํฉํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ัะฐะนะป
releases.yml
๋ฆด๋ฆฌ์ค ๋ฐ์ดํฐ๋ก, - ัะฐะนะป
common_envs.sh
, ๋ด๋ณด๋ผ ํ๊ฒฝ ๋ณ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
ํ์ผ ๋ด์ฉ generate_artifacts
๋น์ ์ ์ฐ๋ฆฌ์์์ ์ฐพ์ ์ ์์ต๋๋ค common_envs.sh
์ฐ๋ฆฌ์๊ฒ ์ค์ํ๊ธฐ ๋๋ฌธ์ werf์ ์์
์ ๊ทธ๊ฒ์ ๋ฌ๋ ค ์์ต๋๋ค. ๋ด์ฉ์ ์:
export RELEASES='1.0%v1.0.6-4'
export CHANNELS='1.0-alpha%v1.0.7-1 1.0-beta%v1.0.7-1 1.0-ea%v1.0.6-4 1.0-stable%v1.0.6-4 1.0-rock-solid%v1.0.6-4'
export ROOT_VERSION='v1.0.6-4'
์๋ฅผ ๋ค์ด Bash ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์คํฌ๋ฆฝํธ์ ์ถ๋ ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. source
.
์ด์ ์ฌ๋ฏธ์๋ ๋ถ๋ถ์ด ๋์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋์ ๋ฐฐํฌ๊ฐ ๋ชจ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ค๋ฉด ๋ค์ ์ฌํญ์ ํ์ธํด์ผ ํฉ๋๋ค. werf.yaml
์์๋ค ๋๊ฐ๋ค ์ ์ด๋ ํ๋์ ํ์ดํ๋ผ์ธ ๋ด์์. ์ด ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด werf๊ฐ ์กฐ๋ฆฝ ์ค์ ๊ณ์ฐํ๋ ๋จ๊ณ(์: ๋ฐฐํฌ)์ ์๋ช
์ด ๋ฌ๋ผ์ง๋๋ค. ์ด๋ก ์ธํด ๋ฐฐํฌ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ํ๋ฉด... ๋ฐฐํฌ์ ํ์ํ ์ด๋ฏธ์ง๊ฐ ๋๋ฝ๋ฉ๋๋ค.
์ฆ, ์ฌ์ดํธ ์ด๋ฏธ์ง๋ฅผ ์กฐ๋ฆฝํ๋ ๋์ ๋ฆด๋ฆฌ์ค์ ๋ฒ์ ์ ๋ํ ์ ๋ณด๊ฐ ๋์ผํ๊ณ ๋ฐฐํฌ ์ ์ ๋ฒ์ ์ด ๋ฆด๋ฆฌ์ค๋๊ณ ํ๊ฒฝ ๋ณ์์ ๊ฐ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ ์ค๋ฅ์ ํจ๊ป ๋ฐฐํฌ๊ฐ ์คํจํฉ๋๋ค. ๊ฒฐ๊ตญ ์ ๋ฒ์ ์ ๊ฒฐ๊ณผ๋ฌผ์ ์์ง ๊ตฌ์ถ๋์ง ์์์ต๋๋ค.
์ธ๋๋ผ๋ฉด werf.yaml
์ธ๋ถ ๋ฐ์ดํฐ(์: ํ์ฌ ๋ฒ์ ๋ชฉ๋ก)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฏ๋ก ํด๋น ๋ฐ์ดํฐ์ ๊ตฌ์ฑ๊ณผ ๊ฐ์ ํ์ดํ๋ผ์ธ ๋ด์ ๊ธฐ๋ก๋์ด์ผ ํฉ๋๋ค. ์ด๋ ์ธ๋ถ ๋งค๊ฐ๋ณ์๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ํนํ ์ค์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ธ๋ถ ๋ฐ์ดํฐ ์์ ๋ฐ ๊ธฐ๋ก GitLab ํ์ดํ๋ผ์ธ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์(์ฌ์ ๋น๋) ๋ค์ ํ์์ผ๋ก ์ถ๊ฐ๋ก ์ ์กํฉ๋๋ค. GitLab CI ์ํฐํฉํธ. ์ด๋ ๊ฒ ํ๋ฉด ๋์ผํ ๊ตฌ์ฑ์ผ๋ก ํ์ดํ๋ผ์ธ ์์
(๋น๋, ๋ฐฐํฌ, ์ ๋ฆฌ)์ ์คํํ๊ณ ๋ค์ ์์ํ ์ ์์ต๋๋ค. werf.yaml
.
๋ฌด๋์ ๋ด์ฉ ์ฌ์ ๋น๋ ํ์ผ .gitlab-ci.yml
:
Prebuild:
stage: prebuild
script:
- bash ./generate_artifacts 1> common_envs.sh
- cat ./common_envs.sh
artifacts:
paths:
- releases.yml
- common_envs.sh
expire_in: 2 week
์ํฐํฉํธ์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ์บก์ฒํ ํ์๋ ํ์ค GitLab CI ํ์ดํ๋ผ์ธ ๋จ๊ณ์ธ ๋น๋ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค. werf GitHub ์ ์ฅ์์ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ ์์ฒด๋ฅผ ์์ํฉ๋๋ค(์ฆ, GitHub ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ). ์ด์ ๋ํ ๋ฐ์ดํฐ๋ ์น์ ์ GitLab ํ๋ก์ ํธ ์์ฑ์์ ์ฐพ์ ์ ์์ต๋๋ค. CI/CD ์ค์ -> ํ์ดํ๋ผ์ธ ํธ๋ฆฌ๊ฑฐ์ ํด๋ฆญํ ๋ค์ GitHub์์ ํด๋น Webhook๋ฅผ ์์ฑํฉ๋๋ค(์ค์ -> ์นํ ).
๋น๋ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Build:
stage: build
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- werf build-and-publish --stages-storage :local
except:
refs:
- schedules
dependencies:
- Prebuild
GitLab์ ๋จ๊ณ์์ ๋น๋ ๋จ๊ณ๋ก ๋ ๊ฐ์ ์ํฐํฉํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ ๋น๋์ด๋ฏ๋ก ๋ค์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ค๋น๋ ์
๋ ฅ ๋ฐ์ดํฐ์ ํจ๊ป ๋ณ์๋ฅผ ๋ด๋ณด๋
๋๋ค. source common_envs.sh
. ์ผ์ ์ ๋ฐ๋ผ ํ์ดํ๋ผ์ธ์ ์์ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋น๋ ๋จ๊ณ๋ฅผ ์์ํฉ๋๋ค. ์ผ์ ์ ๋ฐ๋ผ ์ฒญ์๋ฅผ ์ํ ํ์ดํ๋ผ์ธ์ ์คํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์กฐ๋ฆฝ์ ์ํํ ํ์๊ฐ ์์ต๋๋ค.
๋ฐฐํฌ ๋จ๊ณ์์๋ YAML ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ํ๋ก์ ๊ฐ๋ฐ ํ๋ก์ ๊ฐ๋ณ์ ์ผ๋ก ๋ฐฐํฌํ๋ ๋ ๊ฐ์ง ์์ ์ ์ค๋ช ํฉ๋๋ค.
.base_deploy: &base_deploy
stage: deploy
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- werf deploy --stages-storage :local
dependencies:
- Prebuild
except:
refs:
- schedules
Deploy to Production:
<<: *base_deploy
variables:
WERF_KUBE_CONTEXT: prod
environment:
name: production
url: werf.io
only:
refs:
- master
except:
variables:
- $REVIEW_SHA
refs:
- schedules
Deploy to Test:
<<: *base_deploy
variables:
WERF_KUBE_CONTEXT: dev
environment:
name: test
url: werf.test.flant.com
except:
refs:
- schedules
only:
variables:
- $REVIEW_SHA
์์
์ ๋ณธ์ง์ ์ผ๋ก werf๊ฐ ๋ฐฐํฌ๋ฅผ ์ํํด์ผ ํ๋ ํด๋ฌ์คํฐ ์ปจํ
์คํธ๋ฅผ ๋ํ๋ด๋ ์ ์์๋ง ๋ค๋ฆ
๋๋ค(WERF_KUBE_CONTEXT
), ๋ฃจํ ํ๊ฒฝ ๋ณ์ ์ค์ (environment.name
ะธ environment.url
), ์ด๋ Helm ์ฐจํธ ํ
ํ๋ฆฟ์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ
ํ๋ฆฟ์ ๋ด์ฉ์ ์ ๊ณตํ์ง ์์ ๊ฒ์
๋๋ค. ์๋ํ๋ฉด... ๋ฌธ์ ์ ์ฃผ์ ์ ๋ํด์๋ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ด ์์ง๋ง ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ต์ข ํฐ์น
Werf ๋ฒ์ ์ด ์์ฃผ ์ถ์๋๋ฏ๋ก ์ ์ด๋ฏธ์ง๊ฐ ์์ฃผ ๋น๋๋๊ณ Docker ๋ ์ง์คํธ๋ฆฌ๊ฐ ์ง์์ ์ผ๋ก ์ฑ์ฅํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ฑ ์ ๋ฐ๋ผ ์๋ ์ด๋ฏธ์ง ์ ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ๋งค์ฐ ์ฝ์ต๋๋ค.
๊ตฌํํ๋ ค๋ฉด ๋ค์์ด ํ์ํฉ๋๋ค.
- ์ฒญ์ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ธ์.
.gitlab-ci.yml
; - ์ฒญ์ ์์ ์ ์ฃผ๊ธฐ์ ์คํ์ ์ถ๊ฐํฉ๋๋ค.
- ์ฐ๊ธฐ ์ก์ธ์ค ํ ํฐ์ ์ฌ์ฉํ์ฌ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.
์ฒญ์ ๋จ๊ณ ์ถ๊ฐ .gitlab-ci.yml
:
Cleanup:
stage: cleanup
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- docker login -u nobody -p ${WERF_IMAGES_CLEANUP_PASSWORD} ${WERF_IMAGES_REPO}
- werf cleanup --stages-storage :local
only:
refs:
- schedules
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด ๋ชจ๋ ๊ฒ์ ์กฐ๊ธ ๋ ๋๊ฒ ๋ณด์์ต๋๋ค. ์ ๋ฆฌํ๋ ค๋ฉด ๋จผ์ Docker ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ ์ ์๋ ๊ถํ์ด ์๋ ํ ํฐ์ ์ฌ์ฉํ์ฌ Docker ๋ ์ง์คํธ๋ฆฌ์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค(์๋์ผ๋ก ๋ฐํ๋ GitLab CI ์์
ํ ํฐ์ ๊ทธ๋ ์ง ์์ต๋๋ค). ๊ทธ๋ฌํ ๊ถ๋ฆฌ๋ฅผ ๊ฐ์ต๋๋ค). ํ ํฐ์ GitLab์์ ๋ฏธ๋ฆฌ ์์ฑ๋์ด ์์ด์ผ ํ๋ฉฐ ํ๊ฒฝ ๋ณ์์ ๊ทธ ๊ฐ์ ์ง์ ํด์ผ ํฉ๋๋ค. WERF_IMAGES_CLEANUP_PASSWORD
๊ณํ (CI/CD ์ค์ -> ๋ณ์).
ํ์ํ ์ผ์ ์ ๋ฐ๋ผ ์ฒญ์ ์์
์ ์ถ๊ฐํ๋ ์์
์ ๋ค์์์ ์ํ๋ฉ๋๋ค. CI/CD ->
์ผ์ .
๊ทธ๊ฒ ๋ค์ ๋๋ค. Docker ๋ ์ง์คํธ๋ฆฌ์ ํ๋ก์ ํธ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ด๋ฏธ์ง๋ก ์ธํด ์ง์์ ์ผ๋ก ์ฆ๊ฐํ์ง ์์ต๋๋ค.
์ค์ ๋ถ๋ถ์ด ๋๋๋ฉด ๊ธฐ์ฌ์ ์ ์ฒด ๋ชฉ๋ก์ด ๋ค์์์ ์ ๊ณต๋๋ค๋ ์ ์ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๊ฒฐ๊ณผ
- ๋ฒ์ ๋น ํ๋์ ์ํฐํฉํธ์ธ ๋ ผ๋ฆฌ์ ์ด์ ๋ธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ์์ต๋๋ค.
- ์ด์ ๋ธ๋ฆฌ๋ ๋ณดํธ์ ์ด๋ฉฐ werf์ ์ ๋ฒ์ ์ด ์ถ์๋ ๋ ์๋์ผ๋ก ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ์น ์ฌ์ดํธ์ ๋ฌธ์๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- ์๋ก ๋ค๋ฅธ ์ค๊ณฝ์ ์ํด ๋ ๊ฐ์ ์ด๋ฏธ์ง๊ฐ ์กฐํฉ๋ฉ๋๋ค.
- ํจ๊ณผ๊ฐ ๋นจ๋ฆฌ ๋์ค๊ฑฐ๋ ์. ์บ์ฑ์ ๊ฐ๋ฅํ ํ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. werf์ ์ ๋ฒ์ ์ด ์ถ์๋๊ฑฐ๋ ๊ฒํ ์ปค๋ฐ์ ์ํด GitHub ํํฌ๊ฐ ํธ์ถ๋๋ฉด ๋ณ๊ฒฝ๋ ๋ฒ์ ์ด ์๋ ํด๋น ์ํฐํฉํธ๋ง ๋ค์ ๋น๋๋ฉ๋๋ค.
- ์ฌ์ฉํ์ง ์๋ ์ด๋ฏธ์ง ์ญ์ ์ ๋ํด ์๊ฐํ ํ์๊ฐ ์์ต๋๋ค. werf ์ ์ฑ ์ ๋ฐ๋ผ ์ ๋ฆฌํ๋ฉด Docker ๋ ์ง์คํธ๋ฆฌ๊ฐ ์์๋๋ก ์ ์ง๋ฉ๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
- werf๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ๋ธ๋ฆฌ ์์ฒด์ ์บ์ฑ๊ณผ ์ธ๋ถ ์ ์ฅ์๋ก ์์ ํ ๋์ ์บ์ฑ์ผ๋ก ์ธํด ์ด์ ๋ธ๋ฆฌ๊ฐ ๋น ๋ฅด๊ฒ ์๋ํ ์ ์์ต๋๋ค.
- ์ธ๋ถ Git ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค๋ฒ ์ ์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๊ฑฐ๋ ๊น๋ค๋ก์ด ์ต์ ํ ๋
ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํด๋ฅผ ๋ค์ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. werf๋ ์บ์๋ฅผ ์ฌ์ฉํ๊ณ ๋ณต์ ๋ฅผ ํ ๋ฒ๋ง ์ํํ ๋ค์ ๋ค์์ ์ฌ์ฉํฉ๋๋ค.
fetch
ํ์ํ ๋๋ง. - ๋น๋ ๊ตฌ์ฑ ํ์ผ์์ Go ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ
werf.yaml
๊ฒฐ๊ณผ๊ฐ ์ธ๋ถ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ค๋ช ํ ์ ์์ต๋๋ค. - mount in werf๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ํ์ดํ๋ผ์ธ์ ๊ณตํต์ ์ธ ์บ์๋ก ์ธํด ์ํฐํฉํธ ์์ง ์๋๊ฐ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
- werf๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ ์ด๋ ๋์ ์ผ๋ก ๊ตฌ์ถํ ๋ ํนํ ์ค์ํฉ๋๋ค.
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Kubernetes์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ ๊ณตํ๋ ๋์ ๋ช ๋ น ์คํ "; - ยซ
werf ๋ฐ GitLab CI๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ์ ํ์ ๋ง์ดํฌ๋ก์๋น์ค ๊ตฌ์ถ ๋ฐ ๋ฐฐํฌ "; - ยซ
Werf๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ Helm ์ฐจํธ ์ถ์ "; - ยซ
werf 1.0 stable ์๊ฐ: GitOps๋ ๊ทธ๊ฒ๊ณผ ์ด๋ค ๊ด๋ จ์ด ์์ผ๋ฉฐ, ์ํ ๋ฐ ๊ณํ์ ๋ฌด์์ ๋๊น? ".
์ถ์ฒ : habr.com