เชจเชฎเชธเซเชคเซ! เชคเชพเชเซเชคเชฐเชฎเชพเช, เชกเซเชเชฐ เชเชฎเซเชเซเชธ เชฌเชจเชพเชตเชตเชพ เช เชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชเชฎเชพเชตเช เชฎเชพเชเซ เชฌเชเชจเซ เชฎเชพเชเซ เชเชฃเชพ เชถเชพเชจเชฆเชพเชฐ เชเชเซเชฎเซเชถเชจ เชเซเชฒเซเชธ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ. เช เชธเชเชฆเชฐเซเชญเซ, เชฎเซเช เชเชฟเชเชฒเซเชฌ เชธเชพเชฅเซ เชฐเชฎเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เชคเซเชจเซ เชเซเชทเชฎเชคเชพเชเชจเซ เชธเชเชชเซเชฐเซเชฃ เช เชญเซเชฏเชพเชธ เชเชฐเซเชฏเซ เช เชจเซ, เช เชฒเชฌเชคเซเชค, เชชเชพเชเชชเชฒเชพเชเชจ เชธเซเช เชเชฐเซ.
เช เชเชพเชฐเซเชฏ เชตเซเชฌเชธเชพเชเช เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซเชฐเชฟเชค เชนเชคเซเช
เชฎเซเช เชถเชฐเซเชเชคเชฅเซ เชธเชฎเชพเชจ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฌเชจเชพเชตเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชฏเซ, เชชเชฐเชเชคเซ เชธเชเชชเซเชฐเซเชฃ เชฐเซเชคเซ Gitlab CI เช เชจเซ เชฎเชซเชค เชเซเชฒเซเชธ เชชเชฐ เชฌเชจเซเชฒ เชเซ เชเซเชจเซ เชเชชเชฏเซเช เชนเซเช เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช. เชเชเซ เชนเซเช เชคเชฎเชจเซ เชเชเชฐเซ เชคเซเชฎเชจเชพ เชตเชฟเชถเซ เชตเชงเซ เชเชฃเชพเชตเซเชถ.
เช เชฒเซเช เชธเชพเชงเชจเซเชจเซ เชเชฐเซเชเชพ เชเชฐเชถเซ เชเซเชฎ เชเซ:
เชนเซเชฏเซเชเซ, qbec, เชเชจเชฟเชเซ, git-เชเซเชฐเชฟเชชเซเช ะธ เชเชฟเชเชฒเซเชฌ เชธเซ.เชเช. เชเชคเชฟเชถเซเชฒ เชตเชพเชคเชพเชตเชฐเชฃเชจเซ เชฐเชเชจเชพ เชธเชพเชฅเซ.
เชธเชพเชฎเชเซเชฐเซ
เชนเซเชฏเซเชเซเชจเซ เชฎเชณเซ เชกเซเชเชฐเชซเชพเชเชฒ เชคเซเชฏเชพเชฐ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช เชเชจเชฟเชเซเชจเซ เชเชณเชเชตเชพ qbec เชจเซ เชเชพเชฃเชตเซเช เชเซเชฌเชฐเชจเซเชเซเชธ-เชเชเซเชเชฟเชเซเชฏเซเชเชฐ เชธเชพเชฅเซ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชฐเชนเซเชฏเชพเช เชเซเช qbec เชธเชพเชฅเซ เชนเซเชฒเซเชฎ เชเชพเชฐเซเช เชเซเช เชตเซ เชฐเชนเซเชฏเชพ เชเซเช เชเชฟเช-เชเซเชฐเชฟเชชเซเชเชจเซ เชชเชฐเชฟเชเชฏ เชเซเชฒเชฌเซเชเซเชธ เชเชฎเซเช เชฌเชจเชพเชตเซ เชฐเชนเซเชฏเชพ เชเซเช เช เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เชชเชพเชเชชเชฒเชพเชเชจ เช เชจเซ เชเซ เชเซเชธ เชฆเซเชตเชพเชฐเชพ เชเชฌเซเชเชจเซ เชเชธเซเชฎเซเชฌเชฒเซ เชเชฎเชพเชตเช เชเชเซเชฎเซเชถเชจ เชฎเชพเชธเซเชเชฐ เชชเชฐ เชฆเชฌเชพเชฃ เชเชฐเชคเซ เชตเชเชคเซ เชเชฒเชพเชเซเชคเชฟเช เช เชจเซ เชเชธเซเชฎเซเชฌเชฒเซ เชเชคเชฟเชถเซเชฒ เชตเชพเชคเชพเชตเชฐเชฃ เชเชชเซเชฒเชฟเชเซเชถเชจเซเชจเซ เชธเชฎเซเชเซเชทเชพ เชเชฐเซ
1. เชนเซเชฏเซเชเซเชจเซ เชเชพเชฃเชตเซเช
เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเชเชจเชพ เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เช เชฎเซ เชนเซเชฏเซเชเซ เชชเชฐ เชฌเชจเซเชฒ เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชชเซเชฐเชเชพเชถเชจ เชธเชพเชเช เชฌเชจเชพเชตเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชถเซเช. เชนเซเชฏเซเชเซ เช เชธเซเชเซเชเชฟเช เชเชจเซเชเซเชจเซเช เชเชจเชฐเซเชเชฐ เชเซ.
เชเซเช เชธเซเชเซเชเชฟเช เชเชจเชฐเซเชเชฐเซเชธเชฅเซ เชชเชฐเชฟเชเชฟเชค เชจเชฅเซ, เชนเซเช เชคเชฎเชจเซ เชคเซเชฎเชจเชพ เชตเชฟเชถเซ เชฅเซเชกเซเช เชตเชงเซ เชเชนเซเชถ. เชกเซเชเชพเชฌเซเช เช เชจเซ เชเซเชเชฒเชพเช PHP เชธเชพเชฅเซเชจเชพ เชชเชฐเชเชชเชฐเชพเชเชค เชตเซเชฌเชธเชพเชเช เชเชจเซเชเชฟเชจเชฅเซ เชตเชฟเชชเชฐเซเชค, เชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชจเชเชคเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ, เชซเซเชฒเชพเชฏ เชชเชฐ เชชเซเชทเซเช เซ เชเชจเชฐเซเช เชเชฐเซ เชเซ, เชธเซเชเซเชเชฟเช เชเชจเชฐเซเชเชฐเซเชธ เชฅเซเชกเซ เช เชฒเช เชฐเซเชคเซ เชกเชฟเชเชพเชเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชคเซเช เชคเชฎเชจเซ เชธเซเชคเซเชฐเซเชคเซ เชฒเซเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชฎเชพเชฐเซเชเชกเชพเชเชจ เชฎเชพเชฐเซเชเช เชช เช เชจเซ เชฅเซเชฎ เชเซเชฎเซเชชเชฒเซเชเซเชธเชฎเชพเช เชซเชพเชเชฒเซเชจเซ เชธเชฎเซเชน, เชชเชเซ เชคเซเชฎเชจเซ เชธเชเชชเซเชฐเซเชฃ เชฐเซเชคเซ เชธเชฎเชพเชชเซเชค เชตเซเชฌเชธเชพเชเชเชฎเชพเช เชเชฎเซเชชเชพเชเชฒ เชเชฐเซ.
เชเชเชฒเซ เชเซ, เชชเชฐเชฟเชฃเชพเชฎเซ, เชคเชฎเชจเซ เชเช เชกเชฟเชฐเซเชเซเชเชฐเซ เชฎเชพเชณเชเซเช เช เชจเซ เชเชจเชฐเซเช เชเชฐเซเชฒเซ HTML เชซเชพเชเชฒเซเชจเซ เชธเชฎเซเชน เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ, เชเซเชจเซ เชคเชฎเซ เชเซเชเชชเชฃ เชธเชธเซเชคเชพ เชนเซเชธเซเชเชฟเชเช เชชเชฐ เช เชชเชฒเซเชก เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชเชพเชฐเซเชฏเชเชพเชฐเซ เชตเซเชฌเชธเชพเชเช เชฎเซเชณเชตเซ เชถเชเซ เชเซ.
เชคเชฎเซ เชนเซเชฏเซเชเซเชจเซ เชธเซเชฅเชพเชจเชฟเช เชฐเซเชคเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชคเซเชจเซ เช เชเชฎเชพเชตเซ เชถเชเซ เชเซ:
เชจเชตเซ เชธเชพเชเช เชถเชฐเซ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช:
hugo new site docs.example.org
เช เชจเซ เชคเซ เช เชธเชฎเชฏเซ git เชฐเซเชชเซเชเซเชเชฐเซ:
cd docs.example.org
git init
เช เชคเซเชฏเชพเชฐ เชธเซเชงเซ, เช เชฎเชพเชฐเซ เชธเชพเชเช เชจเซเชธเชฐเซเชเชฟเช เชเซ เช เชจเซ เชคเซเชจเชพ เชชเชฐ เชเชเชเช เชฆเซเชเชพเชฏ เชคเซ เชฎเชพเชเซ, เชเชชเชฃเซ เชธเซเชชเซเชฐเชฅเชฎ เชฅเซเชฎเชจเซ เชเชจเซเชเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ; เชฅเซเชฎ เช เชซเชเซเชค เชจเชฎเซเชจเชพเช เช เชจเซ เชธเซเชชเชทเซเช เชจเชฟเชฏเชฎเซเชจเซ เชธเชฎเซเชน เชเซ เชเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เช เชฎเชพเชฐเซ เชธเชพเชเช เชเชจเชฐเซเช เชฅเชพเชฏ เชเซ.
เชฅเซเชฎ เชฎเชพเชเซ เช
เชฎเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช
เชนเซเช เช เชนเชเซเชเชค เชชเชฐ เชตเชฟเชถเซเชท เชงเซเชฏเชพเชจ เชเชชเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เช เชฎเชพเชฐเซ เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเช เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชฅเซเชฎ เชซเชพเชเชฒเซเชจเซ เชธเชพเชเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ; เชคเซเชจเชพ เชฌเชฆเชฒเซ, เช เชฎเซ เชคเซเชจเซ เชซเชเซเชค เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชจเซเชเซเช เชเชฐเซ เชถเชเซเช เชเซเช. git เชธเชฌเชฎเซเชกเซเชฏเซเชฒ:
git submodule add https://github.com/matcornic/hugo-theme-learn themes/learn
เชเชฎ, เช เชฎเชพเชฐเซ เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชซเชเซเชค เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเช เชธเชพเชฅเซ เชธเซเชงเซ เชฐเซเชคเซ เชธเชเชฌเชเชงเชฟเชค เชซเชพเชเชฒเซ เชนเชถเซ, เช เชจเซ เชเชจเซเชเซเชเซเชก เชฅเซเชฎ เชเซเชเซเชเชธ เชฐเชฟเชชเซเชเซเชเชฐเซเชจเซ เชฒเชฟเชเช เชคเชฐเซเชเซ เช เชจเซ เชคเซเชฎเชพเช เชเชฎเชฟเช เชคเชฐเซเชเซ เชฐเชนเซเชถเซ, เชเชเชฒเซ เชเซ, เชคเซเชจเซ เชนเชเชฎเซเชถเชพ เชฎเซเชณ เชธเซเชคเซเชฐเซเชคเชฎเชพเชเชฅเซ เชเซเชเชเซ เชถเชเชพเชฏ เชเซ เช เชจเซ เชคเซเชจเชพเชฅเซ เชกเชฐเชตเซเช เชจเชนเซเช. เช เชธเชเชเชค เชซเซเชฐเชซเชพเชฐเซ.
เชเชพเชฒเซ เชฐเซเชชเชฐเซเชเชพเชจเซ เช เซเช เชเชฐเซเช config.toml:
baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"
เชชเชนเซเชฒเซเชฅเซ เช เช เชคเชฌเชเซเชเซ เชคเชฎเซ เชเชฒเชพเชตเซ เชถเชเซ เชเซ:
hugo server
เช
เชจเซ เชธเชฐเชจเชพเชฎเซ
เชฎเชพเช เชเชตเชฐ เชชเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช content/_index.md:
# My docs site
## Welcome to the docs!
You will be very smart :-)
เชจเชตเชพ เชฌเชจเชพเชตเซเชฒเชพ เชชเซเชทเซเช เชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
เชธเชพเชเช เชเชจเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชซเชเซเชค เชเชฒเชพเชตเซ:
hugo
เชกเชฟเชฐเซเชเซเชเชฐเซ เชธเชพเชฎเชเซเชฐเซเช เชเชพเชนเซเชฐ/ เช
เชจเซ เชคเชฎเชพเชฐเซ เชตเซเชฌเชธเชพเชเช เชนเชถเซ.
เชนเชพ, เชฎเชพเชฐเซเช เชฆเซเชตเชพเชฐเชพ, เชเชพเชฒเซ เชคเชฐเชค เช เชคเซเชจเซ เชเชฎเซเชฐเซเช .gitignore:
echo /public > .gitignore
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add .
git commit -m "New site created"
2. เชกเซเชเชฐเชซเชพเชเชฒ เชคเซเชฏเชพเชฐ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เช เชฎเชพเชฐเชพ เชญเชเชกเชพเชฐเชจเซ เชฐเชเชจเชพเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพเชจเซ เชธเชฎเชฏ เชเซ. เชนเซเช เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเชจเชพ เชเซเชตเซ เชตเชธเซเชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช:
.
โโโ deploy
โ โโโ app1
โ โโโ app2
โโโ dockerfiles
โโโ image1
โโโ image2
- เชกเซเชเชฐเชซเชพเชเชฒเซเชธ/ - เชกเซเชเชฐเชซเชพเชเชฒเซเชธ เชธเชพเชฅเซเชจเซ เชกเชฟเชฐเซเชเซเชเชฐเซเช เช เชจเซ เช เชฎเชพเชฐเซ เชกเซเชเชฐ เชเชฎเซเชเซเชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชฌเชงเซเช เชธเชฎเชพเชตเซ เชเซ.
- เชเชฎเชพเชตเชตเซเช/ โ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซเชจเซ เชกเชฟเชฐเซเชเซเชเชฐเซเช เชงเชฐเชพเชตเซ เชเซ
เชเชฎ, เช เชฎเซ เชชเชพเชฅ เชธเชพเชฅเซ เช เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เชกเซเชเชฐเชซเชพเชเชฒ เชฌเชจเชพเชตเซเชถเซเช เชกเซเชเชฐเชซเชพเชเชฒเซเชธ/เชตเซเชฌเชธเชพเชเช/เชกเซเชเชฐเชซเชพเชเชฒ
FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src
FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]
เชเซเชฎ เชคเชฎเซ เชเซเช เชถเชเซ เชเซ, เชกเซเชเชฐเชซเชพเชเชฒเชฎเชพเช เชฌเซ เชเซ เชฅเซ, เช เชฒเชเซเชทเชฃ เชเชนเซเชตเชพเชฏ เชเซ
เชเชฎ, เช
เชเชคเชฟเชฎ เชเชฌเซ เชซเชเซเชค เชธเชฎเชพเชตเชถเซ เชถเซเชฏเชพเชฎhttpd (เชนเชณเชตเชพ HTTP เชธเชฐเซเชตเชฐ) เช
เชจเซ เชเชพเชนเซเชฐ/ - เช
เชฎเชพเชฐเซ เชธเซเชเซเชเชฟเชเชฒเซ เชเชจเชฐเซเช เชเชฐเซเชฒเซ เชตเซเชฌเชธเชพเชเชเชจเซ เชธเชพเชฎเชเซเชฐเซ.
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. เชเชจเชฟเชเซเชจเซ เชเชพเชฃเชตเซเช
เชกเซเชเชฐ เชเชฎเซเช เชฌเชฟเชฒเซเชกเชฐ เชคเชฐเซเชเซ, เชฎเซเช เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช
เชเชฌเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ, เชซเชเซเชค เชเชจเซเชเซเชจเชฐ เชธเชพเชฅเซ เชเชฒเชพเชตเซ kaniko เชตเชนเซเชตเชเชเชฐเซเชคเชพ เช เชจเซ เชคเซเชจเซ เชตเชฐเซเชคเชฎเชพเชจ เชฌเชฟเชฒเซเชก เชธเชเชฆเชฐเซเชญเชฎเชพเช เชชเชธเชพเชฐ เชเชฐเซ; เช เชกเซเชเชฐ เชฆเซเชตเชพเชฐเชพ เชธเซเชฅเชพเชจเชฟเช เชฐเซเชคเซ เชชเชฃ เชเชฐเซ เชถเชเชพเชฏ เชเซ:
docker run -ti --rm
-v $PWD:/workspace
-v ~/.docker/config.json:/kaniko/.docker/config.json:ro
gcr.io/kaniko-project/executor:v0.15.0
--cache
--dockerfile=dockerfiles/website/Dockerfile
--destination=registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1
เชเซเชฏเชพเช registry.gitlab.com/kvaps/docs.example.org/website - เชคเชฎเชพเชฐเซ เชกเซเชเชฐ เชเชฎเซเชเชจเซเช เชจเชพเชฎ; เชฌเชจเชพเชตเซเชฏเชพ เชชเชเซ, เชคเซ เชเชชเชฎเซเชณเซ เชกเซเชเชฐ เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเช เชฒเซเชเช เชฅเชถเซ.
เชชเซเชฐเชพเชฎเซเชเชฐ --เชเซเชถ เชคเชฎเชจเซ เชกเซเชเชฐ เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเช เชธเซเชคเชฐเซ เชเซเชถ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ; เชเชชเซเชฒ เชเชฆเชพเชนเชฐเชฃ เชฎเชพเชเซ, เชคเซเช เชเชฎเชพเช เชธเชพเชเชตเชตเชพเชฎเชพเช เชเชตเชถเซ registry.gitlab.com/kvaps/docs.example.org/website/cache, เชชเชฐเชเชคเซ เชคเชฎเซ เชชเซเชฐเชพเชฎเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชจเซเชฏ เชชเชพเชฅเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชถเชเซ เชเซ --cache-repo.
เชกเซเชเชฐ-เชฐเชเชฟเชธเซเชเซเชฐเซเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
4. qbec เชจเซ เชเชพเชฃเชตเซเช
เช เชเชพเชธ เชเชฐเซเชจเซ เชเชตเชพ เชเชฟเชธเซเชธเชพเชเชฎเชพเช เชธเชพเชเซเช เชนเซเช เชถเชเซ เชเซ เชเซ เชเซเชฏเชพเช เชคเชฎเชพเชฐเซ เชตเชฟเชตเชฟเชง เชชเชฐเชฟเชฎเชพเชฃเซ เชธเชพเชฅเซ เชเซเชเชฒเชพเช เชเซเชฒเชธเซเชเชฐเซเชฎเชพเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฎเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ เช เชจเซ เชเชฟเชเชฎเชพเช เชเซเชทเชฃเชพเชคเซเชฎเช เชฐเซเชคเซ เชคเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซ.
Qbec เชคเชฎเชจเซ เชเชฐเซเชฐเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชชเชธเชพเชฐ เชเชฐเซเชจเซ เชนเซเชฒเซเชฎ เชเชพเชฐเซเชเชจเซ เชฐเซเชจเซเชกเชฐ เชเชฐเชตเชพเชจเซ เชชเชฃ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ เช เชจเซ เชชเชเซ เชคเซเชจเซ เชจเชฟเชฏเชฎเชฟเชค เชฎเซเชจเชฟเชซเซเชธเซเชเชจเซ เชเซเชฎ เชธเชเชเชพเชฒเชฟเชค เชเชฐเซ เชเซ, เชเซเชฎเชพเช เชคเชฎเซ เชคเซเชจเชพ เชชเชฐ เชตเชฟเชตเชฟเชง เชชเชฐเชฟเชตเชฐเซเชคเชจเซ เชฒเชพเชเซ เชเชฐเซ เชถเชเซ เชเซ, เช เชจเซ เช เชฌเชฆเชฒเชพเชฎเชพเช, เชคเชฎเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเชฅเซ เชเซเชเชเชพเชฐเซ เชฎเซเชณเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชเชพเชฐเซเช เชฎเซเชฏเซเชเชฟเชฏเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซ. เชเชเชฒเซ เชเซ, เชคเชฎเซ เชเชพเชฐเซเชเซเชธเชจเซ เชธเซเชงเชพ เช เชเชฟเชเชฎเชพเชเชฅเซ เชธเซเชเซเชฐ เช เชจเซ เชฐเซเชจเซเชกเชฐ เชเชฐเซ เชถเชเซ เชเซ, เชเซเชฏเชพเช เชคเซเช เชธเชเชฌเชเชงเชฟเชค เชเซ.
เชฎเซเช เช เชเชพเช เชเชนเซเชฏเซเช เชคเซเชฎ, เช เชฎเซ เชคเชฎเชพเชฎ เชเชฎเชพเชตเชเชจเซ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเซเชถเซเช เชเชฎเชพเชตเชตเซเช/:
mkdir deploy
cd deploy
เชเชพเชฒเซ เช เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เชเชชเซเชฒเชฟเชเซเชถเชจ เชถเชฐเซ เชเชฐเซเช:
qbec init website
cd website
เชนเชตเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชฐเชเชจเชพ เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ:
.
โโโ components
โโโ environments
โ โโโ base.libsonnet
โ โโโ default.libsonnet
โโโ params.libsonnet
โโโ qbec.yaml
เชเชพเชฒเซ เชซเชพเชเชฒ เชเซเชเช qbec.yaml:
apiVersion: qbec.io/v1alpha1
kind: App
metadata:
name: website
spec:
environments:
default:
defaultNamespace: docs
server: https://kubernetes.example.org:8443
vars: {}
เช
เชนเซเช เชเชชเชฃเซ เชฎเซเชเซเชฏเชคเซเชตเซ เชฐเชธ เชงเชฐเชพเชตเซเช เชเซเช spec.Environments, qbec เช เชชเชนเซเชฒเชพเชฅเซ เช เช
เชฎเชพเชฐเชพ เชฎเชพเชเซ เชกเชฟเชซเซเชฒเซเช เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซเชจเซเช เชฌเชจเชพเชตเซเชฏเซเช เชเซ เช
เชจเซ เชธเชฐเซเชตเชฐ เชธเชฐเชจเชพเชฎเซเช, เชคเซเชฎเช เช
เชฎเชพเชฐเซ เชตเชฐเซเชคเชฎเชพเชจ kubeconfig เชฎเชพเชเชฅเซ เชจเซเชฎเชธเซเชชเซเชธ เชฒเซเชงเซเช เชเซ.
เชนเชตเซ เชเซเชฏเชพเชฐเซ เชคเซเชจเชพเชค เชฎเซเชณเชญเซเชค เชชเชฐเซเชฏเชพเชตเชฐเชฃ, qbec เชนเชเชฎเซเชถเชพ เชฎเชพเชคเซเชฐ เชเชฒเซเชฒเซเชเชฟเชค Kubernetes เชเซเชฒเชธเซเชเชฐ เช
เชจเซ เชเชฒเซเชฒเซเชเชฟเชค เชจเซเชฎเชธเซเชชเซเชธเชฎเชพเช เช เชเชฎเชพเชตเช เชเชฐเชถเซ, เชเชเชฒเซ เชเซ, เชเชฎเชพเชตเช เชเชฐเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชธเชเชฆเชฐเซเชญเซ เช
เชจเซ เชจเซเชฎเชธเซเชชเซเชธ เชตเชเซเชเซ เชธเซเชตเชฟเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
เชเซ เชเชฐเซเชฐเซ เชนเซเชฏ, เชคเซ เชคเชฎเซ เชนเชเชฎเซเชถเชพ เช เชซเชพเชเชฒเชฎเชพเช เชธเซเชเชฟเชเชเซเชธ เช
เชชเชกเซเช เชเชฐเซ เชถเชเซ เชเซ.
เชคเชฎเชพเชฐเชพ เชฌเชงเชพ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชเซ qbec.yaml, เช เชจเซ เชซเชพเชเชฒเชฎเชพเช params.libsonnet, เชเซเชฏเชพเช เชคเซ เชเชนเซ เชเซ เชเซ เชคเซเชฎเชจเชพ เชฎเชพเชเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชเซเชฏเชพเชเชฅเซ เชฎเซเชณเชตเชตเซเช.
เชเชเชณ เชเชชเชฃเซ เชฌเซ เชกเชฟเชฐเซเชเซเชเชฐเซเช เชเซเชเช เชเซเช:
- เชเชเชเซ/ - เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเชพเชเซเชจเชพ เชคเชฎเชพเชฎ เชฎเซเชจเชฟเชซเซเชธเซเชเซเชธ เช เชนเซเช เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ; เชคเซเชจเซเช เชตเชฐเซเชฃเชจ jsonnet เช เชจเซ เชจเชฟเชฏเชฎเชฟเชค yaml เชซเชพเชเชฒเซ เชฌเชเชจเซเชฎเชพเช เชเชฐเซ เชถเชเชพเชฏ เชเซ
- เชตเชพเชคเชพเชตเชฐเชฃ/ โ เช เชนเซเช เชเชชเชฃเซ เชเชชเชฃเชพ เชตเชพเชคเชพเชตเชฐเชฃ เชฎเชพเชเซเชจเชพ เชคเชฎเชพเชฎ เชเชฒ (เชชเซเชฐเชพเชฎเซเชเชฐเซเชธ)เชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเชถเซเช.
เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชฌเซ เชซเชพเชเชฒเซ เชเซ:
- Environments/base.libsonnet - เชคเซเชฎเชพเช เชคเชฎเชพเชฎ เชตเชพเชคเชพเชตเชฐเชฃ เชฎเชพเชเซ เชธเชพเชฎเชพเชจเซเชฏ เชชเชฐเชฟเชฎเชพเชฃเซ เชนเชถเซ
- Environments/default.libsonnet โ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชเซ เชเชตเชฐเชฐเชพเชเชก เชเชฐเซเชฒเชพ เชชเชฐเชฟเชฎเชพเชฃเซ เชธเชฎเชพเชตเซ เชเซ เชฎเซเชณเชญเซเชค
เชเชพเชฒเซ เชเซเชฒเซเช Environments/base.libsonnet เช เชจเซ เชคเซเชฏเชพเช เช เชฎเชพเชฐเชพ เชชเซเชฐเชฅเชฎ เชเชเช เชฎเชพเชเซ เชชเชฐเชฟเชฎเชพเชฃเซ เชเชฎเซเชฐเซ:
{
components: {
website: {
name: 'example-docs',
image: 'registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1',
replicas: 1,
containerPort: 80,
servicePort: 80,
nodeSelector: {},
tolerations: [],
ingressClass: 'nginx',
domain: 'docs.example.org',
},
},
}
เชเชพเชฒเซ เชเชชเชฃเซ เชชเซเชฐเชฅเชฎ เชเชเช เชชเชฃ เชฌเชจเชพเชตเซเช components/website.jsonnet:
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.website;
[
{
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
labels: { app: params.name },
name: params.name,
},
spec: {
replicas: params.replicas,
selector: {
matchLabels: {
app: params.name,
},
},
template: {
metadata: {
labels: { app: params.name },
},
spec: {
containers: [
{
name: 'darkhttpd',
image: params.image,
ports: [
{
containerPort: params.containerPort,
},
],
},
],
nodeSelector: params.nodeSelector,
tolerations: params.tolerations,
imagePullSecrets: [{ name: 'regsecret' }],
},
},
},
},
{
apiVersion: 'v1',
kind: 'Service',
metadata: {
labels: { app: params.name },
name: params.name,
},
spec: {
selector: {
app: params.name,
},
ports: [
{
port: params.servicePort,
targetPort: params.containerPort,
},
],
},
},
{
apiVersion: 'extensions/v1beta1',
kind: 'Ingress',
metadata: {
annotations: {
'kubernetes.io/ingress.class': params.ingressClass,
},
labels: { app: params.name },
name: params.name,
},
spec: {
rules: [
{
host: params.domain,
http: {
paths: [
{
backend: {
serviceName: params.name,
servicePort: params.servicePort,
},
},
],
},
},
],
},
},
]
เช เชซเชพเชเชฒเชฎเชพเช เช เชฎเซ เชเช เชธเชพเชฅเซ เชคเซเชฐเชฃ เชเซเชฌเชฐเชจเซเชเซเชธ เชเชจเซเชเชฟเชเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเชฏเซเช เชเซ, เช เชเซ: เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช, เชธเซเชตเชพ ะธ เชชเซเชฐเชตเซเชถ. เชเซ เชเชชเชฃเซ เชเชเซเชเซเช เชคเซ, เช เชฎเซ เชคเซเชจเซ เชตเชฟเชตเชฟเชง เชเชเชเซเชฎเชพเช เชฎเซเชเซ เชถเชเซเช เชเซเช, เชชเชฐเชเชคเซ เช เชคเชฌเชเซเชเซ เช เชฎเชพเชฐเชพ เชฎเชพเชเซ เชเช เชชเซเชฐเชคเซเช เชนเชถเซ.
เชตเชพเชเซเชฏเชฐเชเชจเชพ jsonnet เชจเชฟเชฏเชฎเชฟเชค json เชเซเชตเซเช เช เชเซ, เชธเซเชฆเซเชงเชพเชเชคเชฟเช เชฐเซเชคเซ, เชจเชฟเชฏเชฎเชฟเชค json เชชเชนเซเชฒเซเชฅเซ เช เชฎเชพเชจเซเชฏ jsonnet เชเซ, เชคเซเชฅเซ เชถเชฐเซเชเชคเชฎเชพเช เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชจเชฒเชพเชเชจ เชธเซเชตเชพเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ เชตเชงเซ เชธเชฐเชณ เชฌเชจเซ เชถเชเซ เชเซ เชเซเชฎ เชเซ yaml2json เชคเชฎเชพเชฐเชพ เชธเชพเชฎเชพเชจเซเชฏ yaml เชจเซ json เชฎเชพเช เชฐเซเชชเชพเชเชคเชฐเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฅเชตเชพ, เชเซ เชคเชฎเชพเชฐเชพ เชเชเชเซเชฎเชพเช เชเซเช เชเชฒ เชจ เชนเซเชฏ, เชคเซ เชคเซเชจเซเช เชตเชฐเซเชฃเชจ เชจเชฟเชฏเชฎเชฟเชค yaml เชจเชพ เชฐเซเชชเชฎเชพเช เชเชฐเซ เชถเชเชพเชฏ เชเซ.
เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชคเซ เชตเชเชคเซ jsonnet เชนเซเช เชคเชฎเชพเชฐเชพ เชธเชเชชเชพเชฆเช เชฎเชพเชเซ เชชเซเชฒเชเชเชจ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเซเชฌ เชญเชฒเชพเชฎเชฃ เชเชฐเซเช เชเซเช
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชตเชฟเชฎ เชฎเชพเชเซ เชชเซเชฒเชเชเชจ เชเซ vim-jsonnet, เชเซ เชธเชฟเชจเซเชเซเชเซเชธ เชนเชพเชเชฒเชพเชเชเชฟเชเช เชเชพเชฒเซ เชเชฐเซ เชเซ เช เชจเซ เชเชชเชฎเซเชณเซ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเชพเชฏ เชเซ jsonnet fmt เชเซเชฏเชพเชฐเซ เชชเชฃ เชคเชฎเซ เชธเชพเชเชตเซ เชเซ (เชเซเชธเซเชจเซเช เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเซเช เชเชฐเซเชฐเซ เชเซ).
เชฌเชงเซเช เชคเซเชฏเชพเชฐ เชเซ, เชนเชตเซ เช เชฎเซ เชเชฎเชพเชตเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซ เชถเชเซเช เชเซเช:
เช เชฎเชจเซ เชถเซเช เชฎเชณเซเชฏเซเช เชคเซ เชเซเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ เชเชฒเชพเชตเซเช:
qbec show default
เชเชเชเชชเซเช เชชเชฐ, เชคเชฎเซ เชฐเซเชจเซเชกเชฐ เชเชฐเซเชฒ yaml เชฎเซเชจเชฟเชซเซเชธเซเช เชเซเชถเซ เชเซ เชกเชฟเชซเซเชฒเซเช เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชฒเชพเชเซ เชฅเชถเซ.
เชธเชฐเชธ, เชนเชตเซ เช เชฐเชเซ เชเชฐเซ:
qbec apply default
เชเชเชเชชเซเช เชชเชฐ เชคเชฎเซ เชนเชเชฎเซเชถเชพ เชเซเชถเซ เชเซ เชคเชฎเชพเชฐเชพ เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชถเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, qbec เชคเชฎเชจเซ เชเชพเชเชช เชเชฐเซเชจเซ เชซเซเชฐเชซเชพเชฐเซ เชธเชพเชฅเซ เชธเชเชฎเชค เชฅเชตเชพ เชฎเชพเชเซ เชเชนเซเชถเซ. y เชคเชฎเซ เชคเชฎเชพเชฐเชพ เชเชฐเชพเชฆเชพเชจเซ เชชเซเชทเซเชเชฟ เชเชฐเซ เชถเชเชถเซ.
เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชคเซเชฏเชพเชฐ เช เชจเซ เชคเซเชจเชพเชค เชเซ!
เชเซ เชคเชฎเซ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเซ เชเซ, เชคเซ เชคเชฎเซ เชนเชเชฎเซเชถเชพ เช เชเชฐเซ เชถเชเซ เชเซ:
qbec diff default
เช เชซเซเชฐเชซเชพเชฐเซ เชตเชฐเซเชคเชฎเชพเชจ เชเชฎเชพเชตเชเชจเซ เชเซเชตเซ เชฐเซเชคเซ เช เชธเชฐ เชเชฐเชถเซ เชคเซ เชเซเชตเชพ เชฎเชพเชเซ
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. เชเซเชฌเชฐเชจเซเชเซเชธ-เชเชเซเชเชฟเชเซเชฏเซเชเชฐ เชธเชพเชฅเซ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชฐเชนเซเชฏเชพเช เชเซเช
เชคเชพเชเซเชคเชฐเชฎเชพเช เชธเซเชงเซ เชนเซเช เชซเชเซเชค เชจเชฟเชฏเชฎเชฟเชค เชเชชเชฏเซเช เชเชฐเชคเซ เชนเชคเซ gitlab-เชฐเชจเชฐ เชถเซเชฒ เช เชฅเชตเชพ เชกเซเชเชฐ-เชเชเซเชเชฟเชเซเชฏเซเชเชฐ เชธเชพเชฅเซ เชชเซเชฐเซเชต-เชคเซเชฏเชพเชฐ เชฎเชถเซเชจ (LXC เชเชจเซเชเซเชจเชฐ) เชชเชฐ. เชถเชฐเซเชเชคเชฎเชพเช, เช เชฎเชพเชฐเซ เชเชฟเชเชฒเซเชฌเชฎเชพเช เชตเซเชถเซเชตเชฟเช เชธเซเชคเชฐเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชตเชพ เชเชฃเชพ เชฆเซเชกเชตเซเชฐเซ เชนเชคเชพ. เชคเซเชเช เชคเชฎเชพเชฎ เชชเซเชฐเซเชเซเชเซเชเซเชธ เชฎเชพเชเซ เชกเซเชเชฐ เชเชฌเซเช เชเชเชคเซเชฐเชฟเชค เชเชฐเซ.
เชชเชฐเชเชคเซ เชชเซเชฐเซเชเซเชเชฟเชธ เชฌเชคเชพเชตเซ เชเซ เชคเซเชฎ, เช เชตเชฟเชเชฒเซเชช เชตเซเชฏเชตเชนเชพเชฐเชฟเชเชคเชพ เช เชจเซ เชธเชฒเชพเชฎเชคเซ เชฌเชเชจเซเชจเซ เชฆเซเชฐเชทเซเชเชฟเช เชธเซเชฅเซ เชเชฆเชฐเซเชถ เชจเชฅเซ. เชฆเชฐเซเช เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชเซ เช เชฅเชตเชพ เชคเซ เชฆเชฐเซเช เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชเซ เช เชฒเช เชฆเซเชกเชตเซเชฐเซ เชคเซเชจเชพเชค เชเชฐเชตเชพ เชคเซ เชตเชงเซ เชธเชพเชฐเซเช เช เชจเซ เชตเซเชเชพเชฐเชฟเช เชฐเซเชคเซ เชตเชงเซ เชฏเซเชเซเชฏ เชเซ.
เชธเชฆเชจเชธเซเชฌเซ, เช เชเซเช เชธเชฎเชธเซเชฏเชพ เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ เชนเชตเซ เช เชฎเซ เชเชฎเชพเชตเชถเซเช gitlab-เชฐเชจเชฐ เชธเซเชงเชพ เชเซเชฌเชฐเชจเซเชเซเชธเชฎเชพเช เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเชเชจเชพ เชญเชพเช เชฐเซเชชเซ.
เชเชฟเชเชฒเซเชฌ เชเซเชฌเชฐเชจเซเชเซเชธเชจเซ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐเชจเซ เชคเซเชจเชพเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชนเซเชฒเซเชฎ เชเชพเชฐเซเช เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชคเซเชฅเซ เชคเชฎเชพเชฐเซ เชซเชเซเชค เชถเซเชงเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชจเซเชเชงเชฃเซ เชเซเชเชจ เชฎเชพเช เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชเซ เชธเซเชเชฟเชเชเซเชธ -> CI / CD -> เชฐเชจเชฐเซเชธ เช เชจเซ เชคเซเชจเซ เชธเซเชเชพเชจ เชธเซเชเชชเซ:
helm repo add gitlab https://charts.gitlab.io
helm install gitlab-runner
--set gitlabUrl=https://gitlab.com
--set runnerRegistrationToken=yga8y-jdCusVDn_t4Wxc
--set rbac.create=true
gitlab/gitlab-runner
เชเซเชฏเชพเช:
https://gitlab.com - เชคเชฎเชพเชฐเชพ เชเชฟเชเชฒเซเชฌ เชธเชฐเซเชตเชฐเชจเซเช เชธเชฐเชจเชพเชฎเซเช.- yga8y-jdCusVDn_t4Wxc - เชคเชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชเซ เชจเซเชเชงเชฃเซ เชเซเชเชจ.
- rbac.create=true โ kubernetes-executor เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชฎเชพเชฐเชพ เชเชพเชฐเซเชฏเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชชเซเชกเซเชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชธเชเซเชทเชฎ เชฅเชตเชพ เชฎเชพเชเซ เชฐเชจเชฐเชจเซ เชเชฐเซเชฐเซ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ.
เชเซ เชฌเชงเซเช เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเซเชฏ, เชคเซ เชคเชฎเชพเชฐเซ เชตเชฟเชญเชพเชเชฎเชพเช เชจเซเชเชงเชพเชฏเซเชฒ เชฐเชจเชฐ เชเซเชตเซ เชเซเชเช เชฆเซเชกเชตเซเชฐเซ, เชคเชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเช เชธเซเชเชฟเชเชเซเชธเชฎเชพเช.
เชเชฎเซเชฐเชพเชฏเซเชฒ เชฐเชจเชฐเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
เชคเซ เชธเชฐเชณ เชเซ? - เชนเชพ, เชคเซ เชเซเชฌ เชธเชฐเชณ เชเซ! เชฎเซเชจเซเชฏเซเช เชฒเซ เชฆเซเชกเชตเซเชฐเซเชจเซ เชจเซเชเชงเชฃเซ เชเชฐเชตเชพเชฎเชพเช เชนเชตเซ เชเซเช เชคเชเชฒเซเชซ เชจเชนเซเช เชชเชกเซ, เชนเชตเซเชฅเซ เชฆเซเชกเชตเซเชฐเซ เชเชชเซเชเชช เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ เช เชจเซ เชจเชพเชถ เชชเชพเชฎเชถเซ.
6. QBEC เชธเชพเชฅเซ เชนเซเชฒเซเชฎ เชเชพเชฐเซเช เชเซเช เชตเซ
เชเชพเชฐเชฃ เชเซ เช เชฎเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช gitlab-เชฐเชจเชฐ เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเชเชจเซ เชเช เชญเชพเช เชเซ, เชคเซ เช เชฎเชพเชฐเชพ เชเชฟเช เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชคเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพเชจเซ เชธเชฎเชฏ เชเซ.
เช เชฎเซ เชคเซเชจเซ เชเช เช เชฒเช เชเชเช เชคเชฐเซเชเซ เชตเชฐเซเชฃเชตเซ เชถเชเซเช เชเซเช เชตเซเชฌเชธเชพเชเช, เชชเชฐเชเชคเซ เชญเชตเชฟเชทเซเชฏเชฎเชพเช เช เชฎเซ เชตเชฟเชตเชฟเชง เชจเชเชฒเซ เชเชฎเชพเชตเชตเชพเชจเซ เชฏเซเชเชจเชพ เชฌเชจเชพเชตเซเช เชเซเช เชตเซเชฌเชธเชพเชเช เชเชฃเซ เชตเชพเชฐ, เชตเชฟเชชเชฐเซเชค gitlab-เชฐเชจเชฐ, เชเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเซเชฒเชธเซเชเชฐ เชฆเซเช เชฎเชพเชคเซเชฐ เชเช เช เชตเชพเชฐ เชเชฎเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ. เชคเซ เชเชพเชฒเซ เชคเซเชจเชพ เชฎเชพเชเซ เชเช เช เชฒเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชถเชฐเซ เชเชฐเซเช:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
เช เชตเชเชคเซ เช เชฎเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชเชจเซเชเชฟเชเซเชจเซเช เชฎเซเชจเซเชฏเซเช เชฒเซ เชตเชฐเซเชฃเชจ เชเชฐเซเชถเซเช เชจเชนเซเช, เชชเชฐเชเชคเซ เชคเซเชฏเชพเชฐ เชนเซเชฒเซเชฎ เชเชพเชฐเซเช เชฒเชเชถเซเช. qbec เชจเซ เชเช เชซเชพเชฏเชฆเซ เช เชเซ เชเซ Git เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเชเชฅเซ เชธเซเชงเชพ เชนเซเชฒเซเชฎ เชเชพเชฐเซเชเซเชธ เชฐเซเชจเซเชกเชฐ เชเชฐเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ.
เชเชพเชฒเซ เชคเซเชจเซ เชเชฟเช เชธเชฌเชฎเซเชกเซเชฏเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชจเซเชเซเช เชเชฐเซเช:
git submodule add https://gitlab.com/gitlab-org/charts/gitlab-runner vendor/gitlab-runner
เชนเชตเซ เชกเชฟเชฐเซเชเซเชเชฐเซ เชตเชฟเชเซเชฐเซเชคเชพ/เชเซเชเชฒเซเชฌ-เชฐเชจเชฐ เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐ เชฎเชพเชเซ เชเชพเชฐเซเช เชธเชพเชฅเซเชจเซ เชญเชเชกเชพเชฐ เชเซ.
เชคเซเชตเซ เช เชฐเซเชคเซ, เชคเชฎเซ เช เชจเซเชฏ เชฐเชฟเชชเซเชเซเชเชฐเซเชเชจเซ เชเชจเซเชเซเช เชเชฐเซ เชถเชเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชธเชเชชเซเชฐเซเชฃ เชฐเซเชชเซเชเซเชเชฐเซเชจเซ เชธเชคเซเชคเชพเชตเชพเชฐ เชเชพเชฐเซเช เชธเชพเชฅเซ
https://github.com/helm/charts
เชเชพเชฒเซ เชเชเชเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเช components/gitlab-runner.jsonnet:
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.gitlabRunner;
std.native('expandHelmTemplate')(
'../vendor/gitlab-runner',
params.values,
{
nameTemplate: params.name,
namespace: env.namespace,
thisFile: std.thisFile,
verbose: true,
}
)
เชฎเชพเชเซ เชชเซเชฐเชฅเชฎ เชฆเชฒเซเชฒ expandHelmTemplate เช เชฎเซ เชเชพเชฐเซเช เชชเชฐ เชชเชพเชฅ เชชเชธเชพเชฐ เชเชฐเซเช เชเซเช, เชชเชเซ params.values, เชเซ เชเชชเชฃเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชชเชฐเชฟเชฎเชพเชฃเซเชฎเชพเชเชฅเซ เชฒเชเช เชเซเช, เชคเซ เชชเชเซ เชเชฌเซเชเซเชเซเช เชเชตเซ เชเซ
- เชจเชพเชฎเชจเซ เชขเชพเชเชเซ - เชชเซเชฐเชเชพเชถเชจ เชจเชพเชฎ
- เชจเชพเชฎเชธเซเชฅเชณ - เชจเซเชฎเชธเซเชชเซเชธ เชธเซเชเชพเชจ เชชเชฐ เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค
- เช เชซเชพเชเชฒ โ เชเชฐเซเชฐเซ เชชเชฐเชฟเชฎเชพเชฃ เชเซ เชเซ เชตเชฐเซเชคเชฎเชพเชจ เชซเชพเชเชฒเชจเซ เชชเชพเชฅ เชชเชธเชพเชฐ เชเชฐเซ เชเซ
- เชตเชฐเซเชฌเซเช - เชเชฆเซเชถ เชฌเชคเชพเชตเซ เชเซ เชธเซเชเชพเชจ เชจเชฎเซเชจเซ เชเชพเชฐเซเช เชฐเซเชจเซเชกเชฐ เชเชฐเชคเซ เชตเชเชคเซ เชคเชฎเชพเชฎ เชฆเชฒเซเชฒเซ เชธเชพเชฅเซ
เชนเชตเซ เชเชพเชฒเซ เชฎเชพเช เชเชชเชฃเชพ เชเชเช เชฎเชพเชเซเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเช Environments/base.libsonnet:
local secrets = import '../secrets/base.libsonnet';
{
components: {
gitlabRunner: {
name: 'gitlab-runner',
values: {
gitlabUrl: 'https://gitlab.com/',
rbac: {
create: true,
},
runnerRegistrationToken: secrets.runnerRegistrationToken,
},
},
},
}
เชงเซเชฏเชพเชจ เชเชชเซ เชฆเซเชกเชตเซเชฐ เชจเซเชเชงเชฃเซ เชเซเชเชจ เช เชฎเซ เชฌเชพเชนเซเชฏ เชซเชพเชเชฒเชฎเชพเชเชฅเซ เชฒเชเช เชเซเช secrets/base.libsonnet, เชเชพเชฒเซ เชคเซเชจเซ เชฌเชจเชพเชตเซเช:
{
runnerRegistrationToken: 'yga8y-jdCusVDn_t4Wxc',
}
เชเชพเชฒเซ เชคเชชเชพเชธเซเช เชเซ เชฌเชงเซเช เชเชพเชฎ เชเชฐเซ เชเซ เชเซ เชจเชนเซเช:
qbec show default
เชเซ เชฌเชงเซเช เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชนเซเชฏ, เชคเซ เช เชฎเซ เชนเซเชฒเซเชฎ เชฆเซเชตเชพเชฐเชพ เช เชฎเชพเชฐเซ เช เชเชพเช เชเชฎเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฒ เชชเซเชฐเชเชพเชถเชจ เชเชพเชขเซ เชจเชพเชเซ เชถเชเซเช เชเซเช:
helm uninstall gitlab-runner
เช เชจเซ เชคเซ เช เชฐเซเชคเซ เชเชฎเชพเชตเชตเชพ, เชชเชฐเชเชคเซ qbec เชฆเซเชตเชพเชฐเชพ:
qbec apply default
7. เชเชฟเช-เชเซเชฐเชฟเชชเซเชเชจเซ เชชเชฐเชฟเชเชฏ
เช เชเซเชทเชฃเซ, เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐ เชฎเชพเชเซเชจเซ เช เชฎเชพเชฐเซ เชกเชฟเชฐเซเชเซเชเชฐเซ เชฎเชพเชณเชเซเช เชเชจเชพ เชเซเชตเซเช เชฆเซเชเชพเชฏ เชเซ:
.
โโโ components
โ โโโ gitlab-runner.jsonnet
โโโ environments
โ โโโ base.libsonnet
โ โโโ default.libsonnet
โโโ params.libsonnet
โโโ qbec.yaml
โโโ secrets
โ โโโ base.libsonnet
โโโ vendor
โโโ gitlab-runner (submodule)
เชชเชฐเชเชคเซ เชเชฟเชเชฎเชพเช เชฐเชนเชธเซเชฏเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเซเช เชธเชฒเชพเชฎเชค เชจเชฅเซ, เชถเซเช เชคเซ เชเซ? เชคเซเชฅเซ เชเชชเชฃเซ เชคเซเชฎเชจเซ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเชจเซเชเซเชฐเชฟเชชเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เชเช เชเชฒ เชเชพเชคเชฐ, เช เชนเชเชฎเซเชถเชพ เช เชฐเซเชฅเชฎเชพเช เชจเชฅเซ. เชคเชฎเซ เชฐเชนเชธเซเชฏเซ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเซ เชถเชเซ เชเซ qbec เช เชจเซ เชคเชฎเชพเชฐเซ CI เชธเชฟเชธเซเชเชฎเชจเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒเซ เชฆเซเชตเชพเชฐเชพ.
เชชเชฐเชเชคเซ เชคเซ เชจเซเชเชงเชตเซเช เชฏเซเชเซเชฏ เชเซ เชเซ เชคเซเชฏเชพเช เชตเชงเซ เชเชเชฟเชฒ เชชเซเชฐเซเชเซเชเซเชเซเชธ เชชเชฃ เชเซ เชเซเชฎเชพเช เชเชฃเชพ เชตเชงเซ เชฐเชนเชธเซเชฏเซ เชนเซเช เชถเชเซ เชเซ; เชคเซ เชฌเชงเชพเชจเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒ เชฆเซเชตเชพเชฐเชพ เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเชตเซเช เช เชคเซเชฏเชเชค เชฎเซเชถเซเชเซเชฒ เชนเชถเซ.เชคเชฆเซเชชเชฐเชพเชเชค, เช เชเชฟเชธเซเชธเชพเชฎเชพเช เชนเซเช เชคเชฎเชจเซ เชเชตเชพ เช เชฆเซเชญเซเชค เชธเชพเชงเชจ เชตเชฟเชถเซ เชเชนเซ เชถเชเชคเซ เชจเชฅเซ git-เชเซเชฐเชฟเชชเซเช.
git-เชเซเชฐเชฟเชชเซเช เชคเซ เชชเชฃ เช เชจเซเชเซเชณ เชเซ เชเซ เชคเซ เชคเชฎเชจเซ เชฐเชนเชธเซเชฏเซเชจเชพ เชธเชฎเชเซเชฐ เชเชคเชฟเชนเชพเชธเชจเซ เชธเชพเชเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ, เชธเชพเชฅเซ เชธเชพเชฅเซ เชธเชฐเชเชพเชฎเชฃเซ, เชฎเชฐเซเช เช เชจเซ เชคเชเชฐเชพเชฐเชจเซ เชคเซ เช เชฐเซเชคเซ เชเชเซเชฒเชตเชพ เชฆเซ เชเซ เชเซ เชฐเซเชคเซ เชเชชเชฃเซ เชเชฟเชเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเซเชตเชพเชฏเซเชฒเชพ เชเซเช.
เชธเซเชฅเชพเชชเชจ เชชเชเซ เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ git-เชเซเชฐเชฟเชชเซเช เชเชชเชฃเซ เชเชชเชฃเซ เชฐเซเชชเซเชเซเชเชฐเซ เชฎเชพเชเซ เชเซ เชเชจเชฐเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
git crypt init
เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ PGP เชเซ เชเซ, เชคเซ เชคเชฎเซ เชคเชฐเชค เช เช เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชเซ เชธเชนเชฏเซเชเซ เชคเชฐเซเชเซ เชคเชฎเชพเชฐเซ เชเชพเชคเชจเซ เชเชฎเซเชฐเซ เชถเชเซ เชเซ:
git-crypt add-gpg-user [email protected]
เช เชฐเซเชคเซ เชคเชฎเซ เชนเชเชฎเซเชถเชพ เชคเชฎเชพเชฐเซ เชเชพเชจเชเซ เชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช เชฐเซเชชเซเชเซเชเชฐเซเชจเซ เชกเชฟเชเซเชฐเชฟเชชเซเช เชเชฐเซ เชถเชเซ เชเซ.
เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ PGP เชเซ เชจเชฅเซ เช เชจเซ เชคเซเชจเซ เช เชชเซเชเซเชทเชพ เชจเชฅเซ, เชคเซ เชคเชฎเซ เชฌเซเชเซ เชฐเซเชคเซ เชเชเชจเซ เชชเซเชฐเซเชเซเชเซเช เชเซ เชจเชฟเชเชพเชธ เชเชฐเซ เชถเชเซ เชเซ:
git crypt export-key /path/to/keyfile
เชเชฎ, เชเซ เชเซเช เชจเชฟเชเชพเชธ เชเชฐเซ เชเซ เชเซเชซเชพเชเชฒ เชคเชฎเชพเชฐเชพ เชฐเซเชชเซเชเซเชเชฐเซเชจเซ เชกเชฟเชเซเชฐเชฟเชชเซเช เชเชฐเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชนเชถเซ.
เช เช
เชฎเชพเชฐเซเช เชชเซเชฐเชฅเชฎ เชฐเชนเชธเซเชฏ เชธเซเช เชเชฐเชตเชพเชจเซ เชธเชฎเชฏ เชเซ.
เชเชพเชฒเซ เชนเซเช เชคเชฎเชจเซ เชฏเชพเชฆ เชเชฐเชพเชตเซเช เชเซ เช
เชฎเซ เชนเชเซ เชชเชฃ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เชเซเช เชเชฎเชพเชตเช/gitlab-runner/, เชเซเชฏเชพเช เช
เชฎเชพเชฐเซ เชชเชพเชธเซ เชกเชฟเชฐเซเชเซเชเชฐเซ เชเซ เชฐเชนเชธเซเชฏเซ/, เชเชพเชฒเซ เชคเซเชฎเชพเชเชจเซ เชฌเชงเซ เชซเชพเชเชฒเซเชจเซ เชเชจเซเชเซเชฐเชฟเชชเซเช เชเชฐเซเช, เช เชฎเชพเชเซ เชเชชเชฃเซ เชเช เชซเชพเชเชฒ เชฌเชจเชพเชตเซเชถเซเช เชฐเชนเชธเซเชฏเซ/.gitattributes เชจเซเชเซเชจเซ เชธเชพเชฎเชเซเชฐเซ เชธเชพเชฅเซ:
* filter=git-crypt diff=git-crypt
.gitattributes !filter !diff
เชธเชพเชฎเชเซเชฐเซเชฎเชพเชเชฅเซ เชเซเช เชถเชเชพเชฏ เชเซ เชคเซเชฎ, เชฌเชงเซ เชซเชพเชเชฒเซ เชฎเชพเชธเซเช เชเชฐเซเชฒเซ เชเซ * เชฆเซเชตเชพเชฐเชพ เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ git-เชเซเชฐเชฟเชชเซเช, เชธเซเชฅเซ เชธเชฟเชตเชพเชฏ .gitaattributes
เช เชฎเซ เชคเซเชจเซ เชเชฒเชพเชตเซเชจเซ เชเชเชพเชธเซ เชถเชเซเช เชเซเช:
git crypt status -e
เชเชเชเชชเซเช เช เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเชเชจเซ เชฌเชงเซ เชซเชพเชเชฒเซเชจเซ เชฏเชพเชฆเซ เชนเชถเซ เชเซเชจเชพ เชฎเชพเชเซ เชเชจเซเชเซเชฐเชฟเชชเซเชถเชจ เชธเชเซเชทเชฎ เชเซ
เชฌเชธ, เชนเชตเซ เช เชฎเซ เชธเซเชฐเชเซเชทเชฟเชค เชฐเซเชคเซ เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเซ เชถเชเซเช เชเซเช:
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
เชฐเซเชชเซเชเซเชเชฐเซเชจเซ เช เชตเชฐเซเชงเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, เชซเชเซเชค เชเชฒเชพเชตเซ:
git crypt lock
เช
เชจเซ เชคเชฐเชค เช เชฌเชงเซ เชเชจเซเชเซเชฐเชฟเชชเซเชเซเชก เชซเชพเชเชฒเซ เชฌเชพเชเชจเชฐเซ เชเชเชเชเชฎเชพเช เชซเซเชฐเชตเชพเช เชเชถเซ, เชคเซเชฎเชจเซ เชตเชพเชเชเชตเซเช เช
เชถเชเซเชฏ เชนเชถเซ.
เชฐเซเชชเซเชเซเชเชฐเซเชจเซ เชกเชฟเชเซเชฐเชฟเชชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชฒเชพเชตเซ:
git crypt unlock
8. เชเซเชฒเชฌเซเชเซเชธ เชเชฎเซเช เชฌเชจเชพเชตเซ
เชเซเชฒเชฌเซเชเซเชธ เชเชฎเซเช เช เชคเชฎเชพเชฎ เชธเชพเชงเชจเซ เชธเชพเชฅเซเชจเซ เชเช เชเชฎเซเช เชเซ เชเซเชจเซ เชเชชเชฏเซเช เช เชฎเซ เช เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเชเชจเซ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชถเซเช. เชคเซเชจเซ เชเชชเชฏเซเช เชเชฟเชเชฒเซเชฌ เชฐเชจเชฐ เชฆเซเชตเชพเชฐเชพ เชฒเชพเชเซเชทเชฃเชฟเช เชเชฎเชพเชตเช เชเชพเชฐเซเชฏเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เช เชนเซเช เชฌเชงเซเช เชธเชฐเชณ เชเซ, เชเชพเชฒเซ เชเช เชจเชตเซเช เชฌเชจเชพเชตเซเช เชกเซเชเชฐเชซเชพเชเชฒเซเชธ/เชเซเชฒเชฌเซเชเซเชธ/เชกเซเชเชฐเชซเชพเชเชฒ เชจเซเชเซเชจเซ เชธเชพเชฎเชเซเชฐเซ เชธเชพเชฅเซ:
FROM alpine:3.11
RUN apk add --no-cache git git-crypt
RUN QBEC_VER=0.10.3
&& wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz
| tar -C /tmp -xzf -
&& mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/
RUN KUBECTL_VER=1.17.0
&& wget -O /usr/local/bin/kubectl
https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl
&& chmod +x /usr/local/bin/kubectl
RUN HELM_VER=3.0.2
&& wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz
| tar -C /tmp -zxf -
&& mv /tmp/linux-amd64/helm /usr/local/bin/helm
เชเซเชฎ เชคเชฎเซ เชเซเช เชถเชเซ เชเซ, เช เชเชฎเซเชเชฎเชพเช เช เชฎเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเซเชเซเชถเชจ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชคเซ เชคเชฎเชพเชฎ เชเชชเชฏเซเชเชฟเชคเชพเชเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเช เชเซเช. เช เชฎเชพเชฐเซ เช เชนเซเช เชคเซเชจเซ เชเชฐเซเชฐ เชจเชฅเซ เชธเชฟเชตเชพเชฏ เชเซ kubectl, เชชเชฐเชเชคเซ เชคเชฎเซ เชชเชพเชเชชเชฒเชพเชเชจ เชธเซเชเช เชช เชคเชฌเชเซเชเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชคเซเชจเซ เชธเชพเชฅเซ เชฐเชฎเชตเชพ เชฎเชพเชเซ เชถเชเซ เชเซ.
เชเชชเชฐเชพเชเชค, เชเซเชฌเชฐเชจเซเชเซเชธ เชธเชพเชฅเซ เชตเชพเชคเชเซเชค เชเชฐเชตเชพ เช เชจเซ เชคเซเชจเซ เชเชฎเชพเชตเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชฅเชตเชพ เชฎเชพเชเซ, เช เชฎเชพเชฐเซ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐ เชฆเซเชตเชพเชฐเชพ เชเชจเชฐเซเช เชเชฐเซเชฒเชพ เชชเซเชกเซเชธ เชฎเชพเชเซ เชญเซเชฎเชฟเชเชพ เชเซเช เชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ gitlab-runner เชธเชพเชฅเซ เชกเชฟเชฐเซเชเซเชเชฐเซเชฎเชพเช เชเชเช:
cd deploy/gitlab-runner
เช เชจเซ เชเช เชจเชตเซ เชเชเช เชเชฎเซเชฐเซ เชเชเชเซ/rbac.jsonnet:
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.rbac;
[
{
apiVersion: 'v1',
kind: 'ServiceAccount',
metadata: {
labels: {
app: params.name,
},
name: params.name,
},
},
{
apiVersion: 'rbac.authorization.k8s.io/v1',
kind: 'Role',
metadata: {
labels: {
app: params.name,
},
name: params.name,
},
rules: [
{
apiGroups: [
'*',
],
resources: [
'*',
],
verbs: [
'*',
],
},
],
},
{
apiVersion: 'rbac.authorization.k8s.io/v1',
kind: 'RoleBinding',
metadata: {
labels: {
app: params.name,
},
name: params.name,
},
roleRef: {
apiGroup: 'rbac.authorization.k8s.io',
kind: 'Role',
name: params.name,
},
subjects: [
{
kind: 'ServiceAccount',
name: params.name,
namespace: env.namespace,
},
],
},
]
เช เชฎเซ เชจเชตเชพ เชชเชฐเชฟเชฎเชพเชฃเซเชจเซเช เชชเชฃ เชตเชฐเซเชฃเชจ เชเชฐเซเชถเซเช Environments/base.libsonnet, เชเซ เชนเชตเซ เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ:
local secrets = import '../secrets/base.libsonnet';
{
components: {
gitlabRunner: {
name: 'gitlab-runner',
values: {
gitlabUrl: 'https://gitlab.com/',
rbac: {
create: true,
},
runnerRegistrationToken: secrets.runnerRegistrationToken,
runners: {
serviceAccountName: $.components.rbac.name,
image: 'registry.gitlab.com/kvaps/docs.example.org/toolbox:v0.0.1',
},
},
},
rbac: {
name: 'gitlab-runner-deploy',
},
},
}
เชงเซเชฏเชพเชจ เชเชชเซ $.components.rbac.name เชเชฒเซเชฒเซเช เชเชฐเซ เชจเชพเชฎ เชเชเช เชฎเชพเชเซ เชเชฐเชฌเซเชเชธเซ
เชเชพเชฒเซ เชคเชชเชพเชธเซเช เชเซ เชถเซเช เชฌเชฆเชฒเชพเชฏเซเช เชเซ:
qbec diff default
เช เชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชฒเชพเชเซ เชเชฐเซ:
qbec apply default
เชเชชเชฐเชพเชเชค, เชเชฟเชเชฎเชพเช เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
cd ../..
git add dockerfiles/toolbox
git commit -m "Add Dockerfile for toolbox"
git add deploy/gitlab-runner
git commit -m "Configure gitlab-runner to use toolbox"
9. เช
เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เชชเชพเชเชชเชฒเชพเชเชจ เช
เชจเซ เชเซ
เชเซเชธ เชฆเซเชตเชพเชฐเชพ เชเชฌเซเชเชจเซ เชเชธเซเชฎเซเชฌเชฒเซ
เชชเซเชฐเซเชเซเชเซเชเชจเชพ เชฎเซเชณเชฎเชพเช เชเชชเชฃเซ เชฌเชจเชพเชตเซเชถเซเช .gitlab-ci.yml เชจเซเชเซเชจเซ เชธเชพเชฎเชเซเชฐเซ เชธเชพเชฅเซ:
.build_docker_image:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug-v0.15.0
entrypoint: [""]
before_script:
- echo "{"auths":{"$CI_REGISTRY":{"username":"$CI_REGISTRY_USER","password":"$CI_REGISTRY_PASSWORD"}}}" > /kaniko/.docker/config.json
build_toolbox:
extends: .build_docker_image
script:
- /kaniko/executor --cache --context $CI_PROJECT_DIR/dockerfiles/toolbox --dockerfile $CI_PROJECT_DIR/dockerfiles/toolbox/Dockerfile --destination $CI_REGISTRY_IMAGE/toolbox:$CI_COMMIT_TAG
only:
refs:
- tags
build_website:
extends: .build_docker_image
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_TAG
only:
refs:
- tags
เชเซเชชเชพ เชเชฐเซเชจเซ เชจเซเชเชงเซ เชเซ เช เชฎเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช GIT_SUBMODULE_STRATEGY: เชธเชพเชฎเชพเชจเซเชฏ เชคเซ เชจเซเชเชฐเซเช เชฎเชพเชเซ เชเซเชฏเชพเช เชคเชฎเชพเชฐเซ เช เชฎเชฒ เชชเชนเซเชฒเชพ เชธเชฌเชฎเซเชกเซเชฏเซเชฒเซเชธเชจเซ เชธเซเชชเชทเซเชเชชเชฃเซ เชถเชฐเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add .gitlab-ci.yml
git commit -m "Automate docker build"
เชฎเชจเซ เชฒเชพเชเซ เชเซ เชเซ เช เชฎเซ เชเชจเซ เชธเซเชฐเชเซเชทเชฟเชค เชฐเซเชคเซ เชตเชฐเซเชเชจ เชเชนเซ เชถเชเซเช เชเซเช v0.0.1 เช เชจเซ เชเซเช เชเชฎเซเชฐเซ:
git tag v0.0.1
เชเซเชฏเชพเชฐเซ เชชเชฃ เช เชฎเชจเซ เชจเชตเซเช เชธเชเชธเซเชเชฐเชฃ เชฐเชฟเชฒเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ เชคเซเชฏเชพเชฐเซ เช เชฎเซ เชเซ เชเซเชธ เชเชฎเซเชฐเซเชถเซเช. เชกเซเชเชฐ เชเชฎเซเชเชฎเชพเช เชเซ เชเซเชธ เชเชฟเช เชเซ เชเซเชธ เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒเชพ เชนเชถเซ. เชจเชตเชพ เชเซเช เชธเชพเชฅเซเชจเซ เชฆเชฐเซเช เชชเซเชถ เช เชเซเช เชธเชพเชฅเซ เชเชฎเซเชเซเชธเชจเชพ เชจเชฟเชฐเซเชฎเชพเชฃเชจเซ เชเชฐเชเชญ เชเชฐเชถเซ.
เชเชพเชฒเซ เชคเซ เชเชฐเซเช git push --tags, เช เชจเซ เชเชพเชฒเซ เช เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เชชเชพเชเชชเชฒเชพเชเชจ เชเซเชเช:
เชชเซเชฐเชฅเชฎ เชชเชพเชเชชเชฒเชพเชเชจเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
เชคเซ เชนเชเซเชเชค เชคเชฐเชซ เชคเชฎเชพเชฐเซเช เชงเซเชฏเชพเชจ เชฆเซเชฐเชตเชพ เชฏเซเชเซเชฏ เชเซ เชเซ เชเซเชเซเชธ เชฆเซเชตเชพเชฐเชพ เชเชธเซเชฎเซเชฌเชฒเซ เชกเซเชเชฐ เชเชฎเซเชเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชฏเซเชเซเชฏ เชเซ, เชชเชฐเชเชคเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ เชฏเซเชเซเชฏ เชจเชฅเซ. เชเซเชจเชพ เชเชฎเชฟเชเซเชธเชจเซ เชจเชตเชพ เชเซ เชเซเชธ เช เชธเชพเชเชจ เชเชฐเซ เชถเชเชพเชฏ เชเซ, เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชคเซเชฎเชจเชพ เชฎเชพเชเซ เชชเชพเชเชชเชฒเชพเชเชจ เชถเชฐเซ เชเชฐเชตเชพเชฅเซ เชเซเชจเชพ เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชฎเชพเชตเช เชฅเชถเซ.
เช เชธเชฎเชธเซเชฏเชพเชจเซ เชเชเซเชฒเชตเชพ เชฎเชพเชเซ, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชกเซเชเชฐ เชเชฎเซเชเซเชธเชจเซเช เชฌเชฟเชฒเซเชก เชเซเช เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒเซเช เชนเซเชฏ เชเซ, เช เชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชถเชพเชเชพเชฎเชพเช เชเชฎเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชฎเชพเชธเซเชเชฐ, เชเซเชฎเชพเช เชเชเชคเซเชฐเชฟเชค เชเชฐเซเชฒเซ เชเชฌเซเชเชจเซ เชเชตเซเชคเซเชคเชฟเช เชนเชพเชฐเซเชกเชเซเชก เชเชฐเซเชฒเซ เชเซ. เช เชคเซ เชเซ เชเซเชฏเชพเช เชคเชฎเซ เชเช เชธเชฐเชณ เชฐเชฟเชตเชฐเซเช เชธเชพเชฅเซ เชฐเซเชฒเชฌเซเช เชถเชฐเซ เชเชฐเซ เชถเชเซ เชเซ เชฎเชพเชธเซเชเชฐ-เชถเชพเชเชพเช.
10. เชเชฎเชพเชตเชเชจเซเช เชเชเซเชฎเซเชถเชจ
เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐ เช เชฎเชพเชฐเชพ เชฐเชนเชธเซเชฏเซเชจเซ เชกเชฟเชเซเชฐเชฟเชชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเชพเชฐเซ เชฐเซเชชเซเชเซเชเชฐเซ เชเซ เชจเชฟเชเชพเชธ เชเชฐเชตเชพเชจเซ เช เชจเซ เชคเซเชจเซ เช เชฎเชพเชฐเชพ CI เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒเซเชฎเชพเช เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ:
git crypt export-key /tmp/docs-repo.key
base64 -w0 /tmp/docs-repo.key; echo
เช
เชฎเซ เชชเชฐเชฟเชฃเชพเชฎเซ เชฒเชพเชเชจเชจเซ Gitlab เชฎเชพเช เชธเชพเชเชตเซเชถเซเช; เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ เช
เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเช เชธเซเชเชฟเชเชเซเชธ เชชเชฐ เชเชเช:
เชธเซเชเชฟเชเชเซเชธ -> CI / CD -> เชตเซเชฐเซเชเชฌเชฒเซเชธ
เช เชจเซ เชเชพเชฒเซ เชเช เชจเชตเซเช เชเชฒ เชฌเชจเชพเชตเซเช:
เชชเซเชฐเชเชพเชฐ
เชเซ
เชญเชพเชต
เชธเซเชฐเชเซเชทเชฟเชค
เชฎเชนเซเชฐเซเช
เช
เชตเชเชพเชถ
File
GITCRYPT_KEY
<your string>
true
(เชคเชพเชฒเซเชฎ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชคเชฎเซ เชเชฐเซ เชถเชเซ เชเซ false
)
true
All environments
เชเชฎเซเชฐเชพเชฏเซเชฒ เชเชฒเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
เชนเชตเซ เชเชพเชฒเซ เช เชชเชกเซเช เชเชฐเซเช .gitlab-ci.yml เชคเซเชฎเชพเช เชเชฎเซเชฐเซ:
.deploy_qbec_app:
stage: deploy
only:
refs:
- master
deploy_gitlab_runner:
extends: .deploy_qbec_app
variables:
GIT_SUBMODULE_STRATEGY: normal
before_script:
- base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
script:
- qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes
deploy_website:
extends: .deploy_qbec_app
script:
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes
เช เชนเซเช เช เชฎเซ qbec เชฎเชพเชเซ เชเชฃเชพ เชจเชตเชพ เชตเชฟเชเชฒเซเชชเซ เชธเชเซเชฐเชฟเชฏ เชเชฐเซเชฏเชพ เชเซ:
- --root some/app โ เชคเชฎเชจเซ เชเซเชเซเชเชธ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชกเชฟเชฐเซเชเซเชเชฐเซ เชจเชเซเชเซ เชเชฐเชตเชพ เชฆเซ เชเซ
- --เชซเซเชฐเซเชธ:k8s-เชธเชเชฆเชฐเซเชญ __ เชธเชฎเชพเชตเซเชถ__ - เช เชเช เชเชพเชฆเซเช เชเชฒ เชเซ เชเซ เชเชนเซ เชเซ เชเซ เชเชฎเชพเชตเช เช เช เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชฅเชถเซ เชเซเชฎเชพเช gtilab-runner เชเชพเชฒเซ เชฐเชนเซเชฏเซเช เชเซ. เช เชเชฐเซเชฐเซ เชเซ เชเชพเชฐเชฃ เชเซ เช เชจเซเชฏเชฅเชพ qbec เชคเชฎเชพเชฐเชพ kubeconfig เชฎเชพเช เชฏเซเชเซเชฏ Kubernetes เชธเชฐเซเชตเชฐ เชถเซเชงเชตเชพเชจเซ เชชเซเชฐเชฏเชคเซเชจ เชเชฐเชถเซ.
- -- เชฐเชพเชน เชเซเช โ qbec เชจเซ เชคเซเชฏเชพเช เชธเซเชงเซ เชฐเชพเชน เชเซเชตเชพ เชฎเชพเชเซ เชฆเชฌเชพเชฃ เชเชฐเซ เชเซ เชเซเชฏเชพเช เชธเซเชงเซ เชคเซ เชฌเชจเชพเชตเซเชฒ เชธเชเชธเชพเชงเชจเซ เชคเซเชฏเชพเชฐ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช เชจ เชเชพเชฏ เช เชจเซ เชฎเชพเชคเซเชฐ เชคเซเชฏเชพเชฐเซ เช เชธเชซเชณ เชเชเซเชเชฟเช-เชเซเชก เชธเชพเชฅเซ เชฌเชนเชพเชฐ เชจเซเชเชณเซ.
- -เชนเชพ - เชซเชเซเชค เชเชจเซเชเชฐเซเชเซเชเชฟเชต เชถเซเชฒเชจเซ เช เชเซเชทเชฎ เชเชฐเซ เชเซ เชถเซเช เชคเชฎเชจเซ เชเชพเชคเชฐเซ เชเซ? เชเซเชฏเชพเชฐเซ เชคเซเชจเชพเชค.
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add .gitlab-ci.yml
git commit -m "Automate deploy"
เช เชจเซ เชชเชเซ เชเซเช เชฆเชฌเชพเชฃ เช เชฎเซ เชเซเชเชถเซเช เชเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชเชฎเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ:
เชฌเซเชเซ เชชเชพเชเชชเชฒเชพเชเชจเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
11. เชฎเชพเชธเซเชเชฐ เชชเชฐ เชฆเชฌเชพเชฃ เชเชฐเชคเซ เชตเชเชคเซ เชเชฒเชพเชเซเชคเชฟเช เช
เชจเซ เชเชธเซเชฎเซเชฌเชฒเซ
เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ, เชเชชเชฐ เชตเชฐเซเชฃเชตเซเชฒ เชชเชเชฒเชพเช เชฒเชเชญเช เชเซเชเชชเชฃ เชฎเชพเชเชเซเชฐเซเชธเชฐเซเชตเชฟเชธ เชฌเชจเชพเชตเชตเชพ เช เชจเซ เชตเชฟเชคเชฐเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชคเชพ เชเซ, เชชเชฐเชเชคเซ เช เชฎเซ เชฆเชฐ เชตเชเชคเซ เชธเชพเชเชเชจเซ เช เชชเชกเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชนเซเชฏ เชคเซเชฏเชพเชฐเซ เชเซเช เชเชฎเซเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชจเชฅเซ. เชคเซเชฅเซ, เช เชฎเซ เชตเชงเซ เชเชคเชฟเชถเซเชฒ เชฎเชพเชฐเซเช เช เชชเชจเชพเชตเซเชถเซเช เช เชจเซ เชฎเซเชเซเชฏ เชถเชพเชเชพเชฎเชพเช เชกเชพเชฏเชเซเชธเซเช เชเชฎเชพเชตเช เชเซเช เชตเซเชถเซเช.
เชตเชฟเชเชพเชฐ เชธเชฐเชณ เชเซ: เชนเชตเซ เช เชฎเชพเชฐเซ เชเชฌเซ เชตเซเชฌเชธเชพเชเช เชเซเชฏเชพเชฐเซ เชชเชฃ เชคเชฎเซ เชฆเชฌเชพเชฃ เชเชฐเชถเซ เชคเซเชฏเชพเชฐเซ เชซเชฐเซเชฅเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ เชฎเชพเชธเซเชเชฐ, เช เชจเซ เชชเชเซ เชเชชเชฎเซเชณเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชเชฎเชพเชตเช เชเชฐเซ.
เชเชพเชฒเซ เชเชชเชฃเชพเชฎเชพเช เช เชฌเซ เชจเซเชเชฐเซเช เช เชชเชกเซเช เชเชฐเซเช .gitlab-ci.yml:
build_website:
extends: .build_docker_image
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- mkdir -p $CI_PROJECT_DIR/artifacts
- /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
artifacts:
paths:
- artifacts/
only:
refs:
- master
- tags
deploy_website:
extends: .deploy_qbec_app
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"
เชฎเชนเซเชฐเชฌเชพเชจเซ เชเชฐเซเชจเซ เชจเซเชเชง เชเชฐเซ เชเซ เช เชฎเซ เชเช เชฅเซเชฐเซเชก เชเชฎเซเชฐเซเชฏเซ เชเซ เชฎเชพเชธเซเชเชฐ ะบ ref. เชจเซเชเชฐเซเช เชฎเชพเชเซ เชฌเชฟเชฒเซเชก_เชตเซเชฌเชธเชพเชเช เช เชจเซ เช เชฎเซ เชนเชตเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช $CI_COMMIT_REF_NAME ะฒะผะตััะพ $CI_COMMIT_TAG, เชเชเชฒเซ เชเซ, เช เชฎเซ Git เชฎเชพเช เชเซ เชเซเชธเชฅเซ เชเซเชเซ เชเชฏเชพ เชเซเช เช เชจเซ เชนเชตเซ เช เชฎเซ เชเชฎเชฟเช เชฌเซเชฐเชพเชจเซเชเชจเชพ เชจเชพเชฎ เชธเชพเชฅเซ เชเช เชเชฎเซเชเชจเซ เชฆเชฌเชพเชฃ เชเชฐเซเชถเซเช เชเซเชฃเซ เชชเชพเชเชชเชฒเชพเชเชจ เชถเชฐเซ เชเชฐเซ เชเซ. เชคเซ เชจเซเชเชงเชตเซเช เชฏเซเชเซเชฏ เชเซ เชเซ เช เชเซ เชเซเชธ เชธเชพเชฅเซ เชชเชฃ เชเชพเชฎ เชเชฐเชถเซ, เชเซ เช เชฎเชจเซ เชกเซเชเชฐ-เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเช เชเซเชเซเชเชธ เชธเชเชธเซเชเชฐเชฃ เชธเชพเชฅเซ เชธเชพเชเชเชจเชพ เชธเซเชจเซเชชเชถเซเชเชจเซ เชธเชพเชเชตเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ.
เชเซเชฏเชพเชฐเซ เชธเชพเชเชเชจเชพ เชจเชตเชพ เชธเชเชธเซเชเชฐเชฃ เชฎเชพเชเซ เชกเซเชเชฐ เชเซเชเชจเซเช เชจเชพเชฎ เช เชชเชฐเชฟเชตเชฐเซเชคเชฟเชค เชฅเช เชถเชเซ เชเซ, เชคเซเชฏเชพเชฐเซ เช เชฎเชพเชฐเซ เชนเชเซ เชชเชฃ เชเซเชฌเชฐเชจเซเชเซเชธเชฎเชพเช เชซเซเชฐเชซเชพเชฐเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเซเช เชชเชกเชถเซ, เช เชจเซเชฏเชฅเชพ เชคเซ เชซเชเซเชค เชจเชตเซ เชเชฌเซเชฎเชพเชเชฅเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชซเชฐเซเชฅเซ เชเซเช เชตเชถเซ เชจเชนเซเช, เชเชพเชฐเชฃ เชเซ เชคเซ เชเซเชเชชเชฃ เชซเซเชฐเชซเชพเชฐเซเชจเซ เชจเซเชเชง เชฒเซเชถเซ เชจเชนเซเช. เชเชฎเชพเชตเช เชฎเซเชจเชฟเชซเซเชธเซเช.
เชตเชฟเชเชฒเซเชช โvm:ext-str digest="$DIGEST" qbec เชฎเชพเชเซ - เชคเชฎเชจเซ jsonnet เชฎเชพเช เชฌเชพเชนเซเชฏ เชเชฒ เชชเชธเชพเชฐ เชเชฐเชตเชพเชจเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ. เช เชฎเซ เชเชเซเชเซเช เชเซเช เชเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชฆเชฐเซเช เชชเซเชฐเชเชพเชถเชจ เชธเชพเชฅเซ เชคเซเชจเซ เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชซเชฐเซเชฅเซ เชเซเช เชตเชตเชพเชฎเชพเช เชเชตเซ. เช เชฎเซ เชนเชตเซ เชเซ เช เชจเชพเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ, เชเซ เชนเชตเซ เชฌเชฆเชฒเซ เชจ เชถเชเชพเชฏ เชคเซเชตเซเช เชนเซเช เชถเชเซ เชเซ, เชเชพเชฐเชฃ เชเซ เช เชฎเชพเชฐเซ เชเชฎเซเชเชจเชพ เชเซเชเซเชเชธ เชธเชเชธเซเชเชฐเชฃ เชธเชพเชฅเซ เชเซเชกเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชเซเชฏเชพเชฐเซ เชคเซ เชฌเชฆเชฒเชพเชฏ เชเซ เชคเซเชฏเชพเชฐเซ เชเชฎเชพเชตเชเชจเซ เชเซเชฐเชฟเชเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เช
เชนเซเช เช
เชฎเชจเซ เชซเชพเชเชฒเชฎเชพเช เชกเชพเชฏเชเซเชธเซเช เชเชฎเซเช เชธเชพเชเชตเชตเชพเชจเซ เชเชจเชฟเชเซเชจเซ เชเซเชทเชฎเชคเชพ เชฆเซเชตเชพเชฐเชพ เชฎเชฆเชฆ เชฎเชณเชถเซ (เชตเชฟเชเชฒเซเชช --เชกเชพเชเชเซเชธเซเช-เชซเชพเชเชฒ)
เชชเชเซ เช
เชฎเซ เช เชซเชพเชเชฒเชจเซ เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเซเชถเซเช เช
เชจเซ เชเชฎเชพเชตเช เชธเชฎเชฏเซ เชคเซเชจเซ เชตเชพเชเชเซเชถเซเช.
เชเชพเชฒเซ เชเชชเชฃเชพ เชฎเชพเชเซเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซเชจเซ เช เชชเชกเซเช เชเชฐเซเช deploy/website/environments/base.libsonnet เชเซ เชนเชตเซ เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเชถเซ:
{
components: {
website: {
name: 'example-docs',
image: 'registry.gitlab.com/kvaps/docs.example.org/website@' + std.extVar('digest'),
replicas: 1,
containerPort: 80,
servicePort: 80,
nodeSelector: {},
tolerations: [],
ingressClass: 'nginx',
domain: 'docs.example.org',
},
},
}
เชฅเช เชเชฏเซเช, เชนเชตเซ เชเซเชเชชเชฃ เชเชฎเชฟเช เชเชจ เชเชฐเซ เชฎเชพเชธเซเชเชฐ เชฎเชพเชเซ เชกเซเชเชฐ เชเชฎเซเชเชจเซเช เชฌเชฟเชฒเซเชก เชเชฐเชเชญ เชเชฐเซ เชเซ เชตเซเชฌเชธเชพเชเช, เช เชจเซ เชชเชเซ เชคเซเชจเซ เชเซเชฌเชฐเชจเซเชเซเชธ เชชเชฐ เชเชฎเชพเชตเซ.
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add .
git commit -m "Configure dynamic build"
เช เชฎเซ เชชเชเซเชฅเซ เชคเชชเชพเชธ เชเชฐเซเชถเซเช เชเซเช เชฆเชฌเชพเชฃ เชเชชเชฃเซ เชเชจเชพ เชเซเชตเซเช เชเชเชเช เชเซเชตเซเช เชเซเชเช:
เชฎเชพเชธเซเชเชฐ เชฎเชพเชเซ เชชเชพเชเชชเชฒเชพเชเชจเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
เชธเซเชฆเซเชงเชพเชเชคเชฟเช เชฐเซเชคเซ, เชเชชเชฃเซ เชฆเชฐเซเช เชชเซเชถ เชธเชพเชฅเซ เชเชฟเชเชฒเซเชฌ-เชฐเชจเชฐเชจเซ เชซเชฐเซเชฅเซ เชเซเช เชตเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ, เชธเชฟเชตเชพเชฏ เชเซ, เช เชฒเชฌเชคเซเชค, เชคเซเชจเชพ เชฐเซเชชเชฐเซเชเชพเชเชเชจเชฎเชพเช เชเชเช เชฌเชฆเชฒเชพเชฏเซเช เชจเชฅเซ, เชเชพเชฒเซ เชคเซเชจเซ เช เซเช เชเชฐเซเช. .gitlab-ci.yml:
deploy_gitlab_runner:
extends: .deploy_qbec_app
variables:
GIT_SUBMODULE_STRATEGY: normal
before_script:
- base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
script:
- qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes
only:
changes:
- deploy/gitlab-runner/**/*
เชซเซเชฐเชซเชพเชฐเซ เชฎเชพเช เชซเซเชฐเชซเชพเชฐเซเชจเซเช เชจเชฟเชฐเซเชเซเชทเชฃ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ เชเชฎเชพเชตเช/gitlab-runner/ เช เชจเซ เชเซ เชเซเช เชนเซเชฏ เชคเซ เช เช เชฎเชพเชฐเซ เชจเซเชเชฐเซเชจเซ เชเซเชฐเชฟเชเชฐ เชเชฐเชถเซ
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add .gitlab-ci.yml
git commit -m "Reduce gitlab-runner deploy"
เชเซเช เชฆเชฌเชพเชฃ, เชธเชฐเชธ:
เช เชชเชกเซเช เชเชฐเซเชฒ เชชเชพเชเชชเชฒเชพเชเชจเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
12. เชเชคเชฟเชถเซเชฒ เชตเชพเชคเชพเชตเชฐเชฃ
เชเชคเชฟเชถเซเชฒ เชตเชพเชคเชพเชตเชฐเชฃ เชธเชพเชฅเซ เช เชฎเชพเชฐเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เชตเชฟเชตเชฟเชงเชคเชพ เชฒเชพเชตเชตเชพเชจเซ เช เชธเชฎเชฏ เชเซ.
เชชเซเชฐเชฅเชฎ, เชเชพเชฒเซ เชเซเชฌ เช เชชเชกเซเช เชเชฐเซเช เชฌเชฟเชฒเซเชก_เชตเซเชฌเชธเชพเชเช เช เชฎเชพเชฐเชพ เชฎเชพเช .gitlab-ci.yml, เชคเซเชฎเชพเชเชฅเซ เชฌเซเชฒเซเช เชฆเซเชฐ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช เชฎเชพเชคเซเชฐ, เชเซ เชเชฟเชเชฒเซเชฌเชจเซ เชเซเชเชชเชฃ เชถเชพเชเชพเชฎเชพเช เชเซเชเชชเชฃ เชชเซเชฐเชคเชฟเชฌเชฆเซเชงเชคเชพ เชชเชฐ เชคเซเชจเซ เชเซเชฐเชฟเชเชฐ เชเชฐเชตเชพ เชฆเชฌเชพเชฃ เชเชฐเชถเซ:
build_website:
extends: .build_docker_image
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- mkdir -p $CI_PROJECT_DIR/artifacts
- /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
artifacts:
paths:
- artifacts/
เชชเชเซ เชเซเชฌ เช เชชเชกเซเช เชเชฐเซ เชกเชฟเชชเซเชฒเซเชฏ_เชตเซเชฌเชธเชพเชเช, เชคเซเชฏเชพเช เชเช เชฌเซเชฒเซเช เชเชฎเซเชฐเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ:
deploy_website:
extends: .deploy_qbec_app
environment:
name: prod
url: https://docs.example.org
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"
เช Gitlab เชจเซ เชเซเชฌ เชธเชพเชฅเซ เชธเชพเชเชเชณเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ เชชเซเชฐเซเชช เชชเชฐเซเชฏเชพเชตเชฐเชฃ เช เชจเซ เชคเซเชจเซ เชธเชพเชเซ เชฒเชฟเชเช เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเซ.
เชเชพเชฒเซ เชนเชตเซ เชตเชงเซ เชฌเซ เชเซเชฌ เชเชฎเซเชฐเซเช:
deploy_website:
extends: .deploy_qbec_app
environment:
name: prod
url: https://docs.example.org
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"
deploy_review:
extends: .deploy_qbec_app
environment:
name: review/$CI_COMMIT_REF_NAME
url: http://$CI_ENVIRONMENT_SLUG.docs.example.org
on_stop: stop_review
script:
- DIGEST="$(cat artifacts/website.digest)"
- qbec apply review --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
only:
refs:
- branches
except:
refs:
- master
stop_review:
extends: .deploy_qbec_app
environment:
name: review/$CI_COMMIT_REF_NAME
action: stop
stage: deploy
before_script:
- git clone "$CI_REPOSITORY_URL" master
- cd master
script:
- qbec delete review --root deploy/website --force:k8s-context __incluster__ --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
variables:
GIT_STRATEGY: none
only:
refs:
- branches
except:
refs:
- master
when: manual
เชคเซเช เชฎเชพเชธเซเชเชฐ เชธเชฟเชตเชพเชฏเชจเซ เชเซเชเชชเชฃ เชถเชพเชเชพเชเชฎเชพเช เชงเชเซเชฒเชตเชพ เชชเชฐ เชฒเซเชจเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ เช เชจเซ เชธเชพเชเชเชจเชพ เชชเซเชฐเซเชตเชพเชตเชฒเซเชเชจ เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชฎเชพเชตเชถเซ.
เช
เชฎเซ qbec เชฎเชพเชเซ เชจเชตเซ เชตเชฟเชเชฒเซเชช เชเซเชเช เชเซเช: --เชเชช-เชเซเช โ เชคเซ เชคเชฎเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชคเซเชจเชพเชค เชตเชฐเซเชเชจเชจเซ เชเซเช เชเชฐเชตเชพเชจเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ เช
เชจเซ เชซเชเซเชค เช เชเซเชเชจเซ เช
เชเชฆเชฐ เช เชเชพเชฎ เชเชฐเซ เชเซ; เชเซเชฏเชพเชฐเซ เชเซเชฌเชฐเชจเซเชเซเชธเชฎเชพเช เชธเชเชธเชพเชงเชจเซ เชฌเชจเชพเชตเชคเซ เช
เชจเซ เชจเชพเชถ เชเชฐเชคเซ เชตเชเชคเซ, qbec เชคเซเชฎเชจเซ เชธเชพเชฅเซ เช เชเชพเชฐเซเชฏ เชเชฐเชถเซ.
เช เชฐเซเชคเซ เช
เชฎเซ เชฆเชฐเซเช เชธเชฎเซเชเซเชทเชพ เชฎเชพเชเซ เช
เชฒเช เชตเชพเชคเชพเชตเชฐเชฃ เชฌเชจเชพเชตเซ เชถเชเชคเชพ เชจเชฅเซ, เชชเชฐเชเชคเซ เชคเซ เช เชเชเชจเซ เชซเชฐเซเชฅเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซเช เชเซเช.
เช เชนเซเช เชเชชเชฃเซ เชชเชฃ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช qbec เชธเชฎเซเชเซเชทเชพ เชฒเชพเชเซ เชเชฐเซ, เชจเซ เชฌเชฆเชฒเซ qbec เชกเชฟเชซเซเชฒเซเช เชฒเชพเชเซ เชเชฐเซ - เช เชคเซ เช เชเซเชทเชฃ เชเซ เชเซเชฏเชพเชฐเซ เชเชชเชฃเซ เชเชชเชฃเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃเซ (เชธเชฎเซเชเซเชทเชพ เช เชจเซ เชกเชฟเชซเซเชฒเซเช) เชฎเชพเชเซเชจเชพ เชคเชซเชพเชตเชคเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเชถเซเช:
เชเชพเชฒเซ เชเชฎเซเชฐเซเช เชธเชฎเซเชเซเชทเชพ เชฎเชพเช เชชเชฐเซเชฏเชพเชตเชฐเชฃ deploy/website/qbec.yaml
spec:
environments:
review:
defaultNamespace: docs
server: https://kubernetes.example.org:8443
เชชเชเซ เช เชฎเซ เชคเซเชจเซ เชเชพเชนเซเชฐ เชเชฐเซเชถเซเช deploy/website/params.libsonnet:
local env = std.extVar('qbec.io/env');
local paramsMap = {
_: import './environments/base.libsonnet',
default: import './environments/default.libsonnet',
review: import './environments/review.libsonnet',
};
if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile
เช เชจเซ เชคเซเชฎเชพเช เชคเซเชจเชพ เชฎเชพเชเซเชจเชพ เชเชธเซเชเชฎ เชชเซเชฐเชพเชฎเซเชเชฐเซเชธ เชฒเชเซ deploy/website/environments/review.libsonnet:
// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');
base {
components+: {
website+: {
name: 'example-docs-' + slug,
domain: subdomain + '.docs.example.org',
},
},
}
เชเชพเชฒเซ เชเซเชฌเซเชฏเซ เชชเชฐ เชชเชฃ เชจเชเซเชเชฅเซ เชจเชเชฐ เชเชฐเซเช เชฐเซเชเซ_เชธเชฎเซเชเซเชทเชพ, เชเซเชฏเชพเชฐเซ เชถเชพเชเชพ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเชถเซ เชคเซเชฏเชพเชฐเซ เชคเซ เชเซเชฐเชฟเชเชฐ เชฅเชถเซ เช
เชจเซ เชเซเชฅเซ เชเชฟเชเชฒเซเชฌ เชเซเชเชเชเช เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชจ เชเชฐเซ เชคเซ เชฎเชพเชเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ GIT_STRATEGY: เชเซเช เชจเชนเซเช, เชชเชเซเชฅเซ เช
เชฎเซ เชเซเชฒเซเชจ เชเชฐเซเช เชเซเช เชฎเชพเชธเซเชเชฐ- เชคเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชฐเชฟเชตเซเชฏเซเชจเซ เชถเชพเชเชพ เช
เชจเซ เชเชพเชขเซ เชจเชพเชเซ.
เชคเซ เชฅเซเชกเซเช เชเซเชเชเชตเชฃเชญเชฐเซเชฏเซเช เชเซ, เชชเชฐเชเชคเซ เชฎเชจเซ เชนเชเซ เชธเซเชงเซ เชตเชงเซ เชธเซเชเชฆเชฐ เชฐเชธเซเชคเซ เชฎเชณเซเชฏเซ เชจเชฅเซ.
เชเช เชตเซเชเชฒเซเชชเชฟเช เชตเชฟเชเชฒเซเชช เชฆเชฐเซเช เชธเชฎเซเชเซเชทเชพเชจเซ เชนเซเชเซเชฒ เชจเซเชฎเชธเซเชชเซเชธเชฎเชพเช เชเชฎเชพเชตเชตเชพเชจเซ เชนเชถเซ, เชเซ เชนเชเชฎเซเชถเชพ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชคเซเชกเซ เชถเชเชพเชฏ เชเซ.
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add .
git commit -m "Enable automatic review"
เชเซเช เชฆเชฌเชพเชฃ, git Checkout -b เชเซเชธเซเช, git เชชเซเชถ เชเชฐเชฟเชเชฟเชจ เชเซเชธเซเช, เชคเชชเชพเชธเซ:
เชเชฟเชเชฒเซเชฌเชฎเชพเช เชฌเชจเชพเชตเซเชฒเชพ เชตเชพเชคเชพเชตเชฐเชฃเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
เชฌเชงเซเช เชเชพเชฎ เชเชฐเซ เชเซ? - เชธเชฐเชธ, เช เชฎเชพเชฐเซ เชชเชฐเซเชเซเชทเชฃ เชถเชพเชเชพ เชเชพเชขเซ เชจเชพเชเซ: เชเซเช เชเซเชเชเชเช เชฎเชพเชธเซเชเชฐ, git เชชเซเชถ เชฎเซเชณ: เชชเชฐเซเชเซเชทเชฃ, เช เชฎเซ เชคเชชเชพเชธเซเช เชเซเช เชเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชพเชขเซ เชจเชพเชเชตเชพเชจเซ เชเซเชฌเซเชธ เชญเซเชฒเซ เชตเชฟเชจเชพ เชเชพเชฎ เชเชฐเซ เชเซ.
เช เชนเซเช เชนเซเช เชคเชฐเชค เช เชธเซเชชเชทเซเช เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เชเซเชเชชเชฃ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชถเชพเชเชพเช เชฌเชจเชพเชตเซ เชถเชเซ เชเซ, เชคเซ เชฌเชฆเชฒเซ เชชเชฃ เชถเชเซ เชเซ .gitlab-ci.yml เชซเชพเชเชฒ เช เชจเซ เชเชเซเชธเซเชธ เชเซเชชเซเชค เชเชฒเซ.
เชคเซเชฅเซ, เชซเชเซเชค เชธเชเชฐเชเซเชทเชฟเชค เชถเชพเชเชพเช เชฎเชพเชเซ เช เชคเซเชฎเชจเชพ เชเชชเชฏเซเชเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชตเชพเชจเซ เชญเชพเชฐเชชเซเชฐเซเชตเช เชญเชฒเชพเชฎเชฃ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ เชฎเชพเช เชฎเชพเชธเซเชเชฐ, เช เชฅเชตเชพ เชฆเชฐเซเช เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชฎเชพเชเซ เชเชฒเซเชจเซ เชเช เช เชฒเช เชธเซเช เชฌเชจเชพเชตเซ.
13. เชเชชเซเชธเชจเซ เชธเชฎเซเชเซเชทเชพ เชเชฐเซ
เช เชฌเชเชจเซ เชฆเซเชเชพเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชซเชพเชเชฒ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ .gitlab/route-map.yml เช เชจเซ เชคเซเชฎเชพเชเชจเชพ เชคเชฎเชพเชฎ เชชเชพเชฅ เชชเชฐเชฟเชตเชฐเซเชคเชจเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซ; เช เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช เชคเซ เชเซเชฌ เช เชธเชฐเชณ เชนเชถเซ:
# Indices
- source: /content/(.+?)_index.(md|html)/
public: '1'
# Pages
- source: /content/(.+?).(md|html)/
public: '1/'
เช เชฎเชพเชฐเชพ เชซเซเชฐเชซเชพเชฐเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช:
git add .gitlab/
git commit -m "Enable review apps"
เชเซเช เชฆเชฌเชพเชฃ, เช เชจเซ เชคเชชเชพเชธเซ:
เชธเชฎเซเชเซเชทเชพ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชเชจเชจเซ เชธเซเชเซเชฐเซเชจเชถเซเช
เชเชพเชฎ เชฅเช เชเชฏเซเช!
เชชเซเชฐเซเชเซเชเซเช เชธเซเชคเซเชฐเซเชคเซ:
- เชเชฟเชเชฒเซเชฌ เชชเชฐ:
https://gitlab.com/kvaps/docs.example.org - GitHub เชชเชฐ:
https://github.com/kvaps/docs.example.org
เชคเชฎเชพเชฐเชพ เชงเซเชฏเชพเชจ เชฌเชฆเชฒ เชเชญเชพเชฐ, เชฎเชจเซ เชเชถเชพ เชเซ เชเซ เชคเชฎเชจเซ เชคเซ เชเชฎเซเชฏเซเช เชนเชถเซ
เชธเซเชฐเซเชธ: www.habr.com