์๋ ํ์ธ์! ์ ์ด๋ฆ์ Dima์ด๊ณ Wrike SysOps ํ์ ๊ธฐ์ ์ฑ ์์์ ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์น์ฌ์ดํธ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ต๋ํ ๊ฐ๊น๊ฒ ๋ง๋ค๊ณ ํ ๋ฌ์ 10๋ฌ๋ฌ๋ฅผ ๋ค์ฌ 5๋ถ ์์ ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ ์ฐ๋ฆฌ ํ ๋ด์์ ํด๊ฒฐํ๋ ๋ฌธ์ ์๋ ๊ฑฐ์ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์คํ๋ ค ๋์๊ฒ ์๋ก์ด ๊ธฐ์ ์ ์๊ฒ ๋ ๋์ ๊ฐ์ธ์ ์ธ ๊ฒฝํ๊ณผ ์ธ์์ ๋๋ค. ๋ค์ํ ๊ฒฝํ์ ๊ฐ์ง ์ฌ๋๋ค์๊ฒ ์ง์นจ์ด ์ ์ฉํ ์ ์๋๋ก ๋จ๊ณ๋ฅผ ์ต๋ํ ์์ธํ ์ค๋ช ํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค. ๋๋ ๋น์ ์ด ์ฆ๊ธธ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ฐ๋ค!
๋ฐ๋ผ์ ์๋ง๋ ๊ทํ๋ ์ด๋ฏธ ์น์ฌ์ดํธ๋ฅผ ํธ์คํ
ํ๋ ๊ฐ๋จํ๊ณ ์ ๋ ดํ ๋ฐฉ๋ฒ์ ์ฐพ์์ ๊ฒ์
๋๋ค. ์๋ง๋ ์ฌ๊ธฐ์ ์ค๋ช
๋ ๋๋ก ๋ฌด๋ฃ์ผ ์๋ ์์ต๋๋ค.
ํ์ง๋ง ๊ฐ์๊ธฐ ์ฌ์ ํ ์ง๋ฃจํ๊ณ ๋ฉ์ง ์ ๊ธฐ์ ์ธ๊ณ๋ฅผ ์ ํ๊ณ ์ถ๋์? ๋ฐฐํฌ ์๋ํ๋ฅผ ๊ณ ๋ ค ์ค์ด๊ณ ์ฌ์ดํธ ์๋๋ฅผ ์ต๋ํ ๋์ด๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ธฐ์ฌ์์ ์ฐ๋ฆฌ๋
์๋ํ๋ฅผ ์ํด Gitlab CI/CD๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ฐ์ํ๋ ์ด๋ป์ต๋๊น? ๋ค์์ ์ฌ์ฉํ์ฌ Cloudflare์ ์ง์ ์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํด ๋ณด๊ฒ ์ต๋๋ค.
์์ํ๋ ๋ฐ ํ์ํ ๊ฒ:
-
Gitlab(์์ฒด ๋๋
ํ๋ฆผ ) -
๊ณ์ Cloudflare์์ -
์ค์น๋จ
nodejs/npm
1๋ถ: Hugo ์ค์น
์ด๋ฏธ Hugo๊ฐ ์ค์น๋์ด ์๊ฑฐ๋ ๋ค๋ฅธ ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ๋ฅผ ์ ํธํ๋ ๊ฒฝ์ฐ(๋๋ ์ ํ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ) ์ด ๋ถ๋ถ์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
-
๋ค์์์ ํด๊ณ ๋ฅผ ๋ค์ด๋ก๋ํ์ธ์.
https://github.com/gohugoio/hugo/releases -
์ฐ๋ฆฌ๋ ๋ค์์ ์ ์๋ ๊ฒ ์ค ํ๋์ ๋ฐ๋ผ Hugo ์คํ ํ์ผ์ ๋ฐฐ์นํฉ๋๋ค.
PATH ๋ฐฉ๋ฒ -
์ ์ฌ์ดํธ ๋ง๋ค๊ธฐ:
hugo new site blog.example.com
-
ํ์ฌ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๋ก ์์ฑ๋ ๋๋ ํฐ๋ฆฌ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
cd blog.example.com
-
๋์์ธ ํ ๋ง๋ฅผ ์ ํํ์ธ์(
https://github.com/budparr/gohugo-theme-ananke/releases ๋๋ ๋ฌด์์ด๋ ) -
์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
hugo new posts/my-amazing-post.md
-
์์ฑ๋ ํ์ผ์ ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฝํ ์ธ /๊ฒ์๋ฌผ/my-amazing-post.md.
๋ชจ๋ ์์ ์ด ์๋ฃ๋๋ฉด ์ด์ ๊ฐ์ ๋ค์์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ทธ๋ฆ๋ -
์ ์ ํ์ผ ์์ฑ:
hugo -D
์ด์ ์ ์ ์ฌ์ดํธ๋ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ ์์ต๋๋ค. ./๊ณต๊ณต์ ์ฒซ ๋ฒ์งธ ์๋ ๋ฐฐํฌ๋ฅผ ์ํ ์ค๋น๊ฐ ์๋ฃ๋์์ต๋๋ค.
2๋ถ: Cloudflare ์ค์
์ด์ Cloudflare์ ์ด๊ธฐ ์ค์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ดํธ์ ๋ํ ๋๋ฉ์ธ์ด ์ด๋ฏธ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ฅผ ๋ค์ด๋ณด์ blog.example.com.
1๋จ๊ณ: DNS ํญ๋ชฉ ์์ฑ
๋จผ์ ๋๋ฉ์ธ์ ์ ํํ ๋ค์ ๋ฉ๋ด ํญ๋ชฉ์ ์ ํํ์ธ์. DNS. ์ฐ๋ฆฌ๋ ๋ธ๋ก๊ทธ A-๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ด์ ๋ํ ๊ฐ์ IP๋ฅผ ํ์ํฉ๋๋ค(์ด๊ฒ์ ๊ณต์
2๋จ๊ณ: Cloudflare ํ ํฐ
-
๋ด ํ๋กํ (My Profile) -> API ํ ํฐ ํญ-> ํ ํฐ ์์ฑ -> ์ปค์คํ ํ ํฐ ์์ฑ
์ฌ๊ธฐ์์๋ ํ ํฐ์ ๊ณ์ ๋ฐ ์์ญ์ผ๋ก ์ ํํด์ผ ํ์ง๋ง ๊ทธ๋ฆผ์ ๋์ด๋ ๊ถํ์ ๋ํ ํธ์ง ์ต์ ์ ๊ทธ๋๋ก ๋ก๋๋ค.
๋ฏธ๋๋ฅผ ์ํด ํ ํฐ์ ์ ์ฅํ์ธ์. ์ธ ๋ฒ์งธ ๋ถ๋ถ์์ ํ์ํฉ๋๋ค.
3๋จ๊ณ: accountid ๋ฐ zoneid ๊ฐ์ ธ์ค๊ธฐ
๋๋ฉ์ธ โ ์ดํด๋ณด๊ธฐ โ [์ค๋ฅธ์ชฝ ์ฌ์ด๋๋ฐ]
์ด๊ฑด ๋ด๊บผ์ด๋ ํจ๋ถ๋ก ์ฌ์ฉํ์ง ๋ง์ธ์ :)
ํ ํฐ ์์ ์ ์ฅํ์ธ์. ์ธ ๋ฒ์งธ ๋ถ๋ถ์์๋ ํ์ํฉ๋๋ค.
4๋จ๊ณ: ์์ ์ ํ์ฑํ
๋๋ฉ์ธ โ ๋ ธ๋์ โ ์์ ์ ๊ด๋ฆฌ
๊ณ ์ ํ ์ด๋ฆ์ ์ ํํ๊ณ Workers โ Unlimited(ํ์ฌ ์ $5) ์๊ธ์ ๋ถ๊ณผํฉ๋๋ค. ์ํ๋ ๊ฒฝ์ฐ ๋์ค์ ๋ฌด๋ฃ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ์ ์์ต๋๋ค.
3๋ถ: ์ฒซ ๋ฒ์งธ ๋ฐฐํฌ(์๋ ๋ฐฐํฌ)
์ค์ ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์์๋ณด๊ธฐ ์ํด ์ฒซ ๋ฒ์งธ ์๋ ๋ฐฐํฌ๋ฅผ ์ํํ์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ด ๋ ๊ฐ๋จํ๊ฒ ์ํ๋ ์ ์์ง๋ง:
-
๋ญ๊ธ๋ฌ ์ค์น:
npm i @cloudflare/wrangler -g
-
๋ธ๋ก๊ทธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด ๋ณด๊ฒ ์ต๋๋ค.
cd blog.example.com
-
๋ญ๊ธ๋ฌ ์คํ:
wrangler init โ site hugo-worker
-
๋ญ๊ธ๋ฌ ๊ตฌ์ฑ์ ๋ง๋ญ๋๋ค(์์ฒญ ์ ํ ํฐ ์ ๋ ฅ).
wrangler config
์ด์ ์๋ก ์์ฑ๋ ํ์ผ์ ๋ณ๊ฒฝํด ๋ณด๊ฒ ์ต๋๋ค. wrangler.toml (
-
์ง์ accountid ๋ฐ zoneid
-
์ฐ๋ฆฌ๋ ๋ณํํ๋ค ๊ธธ *์ ๊ฐ์ ๊ฒblog.example.com/*
-
์ง์ ๊ทธ๋ฆ๋ ์ ๋ ธ๋์๊ฐ๋ฐ
-
๋ฒํท์ ./public์ผ๋ก ๋ณ๊ฒฝ (๋๋ ์ ์ ์ฌ์ดํธ์ ์์น)
-
๊ฒฝ๋ก์ ๋๋ฉ์ธ์ด ๋ ๊ฐ ์ด์ ์์ผ๋ฉด ์์ ์คํฌ๋ฆฝํธ์์ ๊ฒฝ๋ก๋ฅผ ์์ ํด์ผ ํฉ๋๋ค. ๋ ธ๋์ ์ฌ์ดํธ/index.js (๊ธฐ๋ฅ ์ฐธ์กฐ ํธ๋ค์ด๋ฒคํธ)
์ข์ต๋๋ค. ์ด์ ํ์ ์ฌ์ฉํ์ฌ ์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ ์๊ฐ์
๋๋ค. wrangler publish
.
4๋ถ: ๋ฐฐํฌ ์๋ํ
์ด ๊ฐ์ด๋๋ Gitlab์ฉ์ผ๋ก ์์ฑ๋์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์๋ํ๋ ๋ฐฐํฌ์ ๋ณธ์ง๊ณผ ์ฉ์ด์ฑ์ ํฌ์ฐฉํฉ๋๋ค.
1๋จ๊ณ: ํ๋ก์ ํธ ์์ฑ ๋ฐ ๊ตฌ์ฑ
-
์ GitLab ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์ฌ์ดํธ ์ ๋ก๋: ๋๋ ํฐ๋ฆฌ ๋ธ๋ก๊ทธ.example.com ๋ชจ๋ ๋ด์ฉ์ด ํฌํจ๋ ํ์ผ์ ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ ์์ด์ผ ํฉ๋๋ค.
-
์ฐ๋ฆฌ๋ ์ค์ ํ๋ค ๋ณํ๊ธฐ ์ฌ์ด CFAPITOKEN ์ฌ๊ธฐ : ์ค์ โ CI / CD โ ๋ณ์
2๋จ๊ณ: .gitlab-ci.yml ํ์ผ ์์ฑ ๋ฐ ์ฒซ ๋ฒ์งธ ๋ฐฐํฌ ์คํ
ํ์ผ ๋ง๋ค๊ธฐ .gitlab-ci.yml ๋ฃจํธ์ ๋ค์ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค.
stages:
- build
- deploy
build:
image: monachus/hugo
stage: build
variables:
GIT_SUBMODULE_STRATEGY: recursive
script:
- cd blog.example.com/
- hugo
artifacts:
paths:
- blog.example.com/public
only:
- master # this job will affect only the 'master' branch
tags:
- gitlab-org-docker #
deploy:
image: timbru31/ruby-node:2.3
stage: deploy
script:
- wget https://github.com/cloudflare/wrangler/releases/download/v1.8.4/wrangler-v1.8.4-x86_64-unknown-linux-musl.tar.gz
- tar xvzf wrangler-v1.8.4-x86_64-unknown-linux-musl.tar.gz
- cd blog.example.com/
- ../dist/wrangler publish
artifacts:
paths:
- blog.example.com/public
only:
- master # this job will affect only the 'master' branch
tags:
- gitlab-org-docker #
์ฒซ ๋ฒ์งธ ๋ฐฐํฌ๋ฅผ ์๋์ผ๋ก ์์ํฉ๋๋ค(CI/CD โ ํ์ดํ ๋ผ์ธ โ ํ์ดํ๋ผ์ธ ์คํ) ๋๋ ๋ง์คํฐ ๋ธ๋์น์ ์ปค๋ฐํฉ๋๋ค. ์ง์!
๊ฒฐ๋ก
๊ธ์, ์ ๊ฐ ๊ทธ๊ฒ์ ์ฝ๊ฐ ์ ์ ํ์ ์๋ ์๊ณ , ์ ์ฒด ๊ณผ์ ์ด XNUMX๋ถ ๋จ์ง ๊ฑธ๋ ธ์ต๋๋ค. ํ์ง๋ง ์ด์ ์๋ ๋ฐฐํฌ ๊ธฐ๋ฅ๊ณผ ์์ ์๋ก ์ํํ ์ ์๋ ๋ค๋ฅธ ์์ ์ ๋ํ ๋ช ๊ฐ์ง ์๋ก์ด ์์ด๋์ด๋ฅผ ๊ฐ์ถ ๋น ๋ฅธ โโ์ฌ์ดํธ๊ฐ ์๊ฒผ์ต๋๋ค.
์ถ์ฒ : habr.com