เบชเบฐเบเบฒเบเบเบต! เบเปเปเบเบปเบเบกเบฒเบเบตเป, เปเบเบทเปเบญเบเบกเบทเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบตเปเปเบขเบฑเบเบซเบผเบฒเบเปเบเปเบเบทเบเบเปเบญเบเบญเบญเบเบกเบฒเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบ Docker เปเบฅเบฐเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบเบฑเบ Kubernetes. เปเบเปเบฅเบทเปเบญเบเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเบซเบฅเบดเปเบเบเบฑเบ GitLab, เบชเบถเบเบชเบฒเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบเบกเบฑเบเบขเปเบฒเบเบฅเบฐเบญเบฝเบเปเบฅเบฐ, เปเบเปเบเบญเบ, เบชเปเบฒเบเบเบฑเปเบเบเปเป.
เบงเบฝเบเบเบฒเบเบเบตเปเปเบเปเบฎเบฑเบเบเบฒเบเบเบปเบเปเบเบเบฒเบเปเบงเบฑเบเปเบเบเป
เบเปเบญเบเบเบฐเบเบฒเบเบฒเบกเบชเปเบฒเบเบเบฐเบเบงเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเปเบเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ, เปเบเปเบเปเปเบชเปเบฒเบเบเบฑเบเบซเบกเบปเบเปเบ Gitlab CI เปเบฅเบฐเปเบเบทเปเบญเบเบกเบทเบเบฃเบตเบเบตเปเบเปเบญเบเปเบเบตเบเปเบเปเปเบเบทเปเบญเบเปเบฒเปเบเปเบเปเบเบฑเบ Kubernetes. เบกเบทเปเบเบตเปเปเบเบเบตเปเบชเบธเบเบเปเบญเบเบเบฐเบเบญเบเปเบเบปเปเบฒเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบเบงเบเบกเบฑเบ.
เบเบปเบเบเบงเบฒเบกเบเบฐเบชเบปเบเบเบฐเบเบฒเบเปเบฝเบงเบเบฑเบเปเบเบทเปเบญเบเบกเบทเปเบเบฑเปเบ:
Hugo, qbec, เบเบฒเบเบดเปเบ, git-crypt ะธ GitLab CI เบเบฑเบเบเบฒเบเบชเปเบฒเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบเปเบเบทเปเบญเบเปเบซเบง.
เปเบเบทเปเบญเปเบ
เบเบปเบเบเบฑเบ Hugo เบเบณเบฅเบฑเบเบเบฐเบเบฝเบก Dockerfile เบฎเบนเปเบเบฑเบเบเบฑเบ kaniko เบฎเบนเปเบเบฑเบเบเบฑเบ qbec เบเบฐเบเบฒเบเบฒเบก Gitlab-runner เบเบฑเบ Kubernetes-executor เบเบณเปเบเปเบเบฒเบเบฐเบฅเบฒเบ Helm เบเบฑเบ qbec เปเบเบฐเบเบณ git-crypt เบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบเบเปเบญเบเปเบเบทเปเบญเบเบกเบท เบเปเปเบเปเบฒเบญเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบฅเบฐเบเบฒเบเบเบฐเบเบญเบเบฎเบนเบเบเบฒเบเปเบเบ tags เบเบฒเบเบเบณเปเบเปเบญเบฑเบเบเบฐเปเบเบกเบฑเบ เบเบญเบกเปเบฅเบฐเบเบฒเบเบเบฐเบเบญเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบธเบเบเบนเปเปเบซเปเปเบกเปเบเบปเบ เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบเปเบเบทเปเบญเบเปเบซเบง เบเบงเบเปเบเบดเปเบเปเบญเบฑเบ
1. เบฎเบนเปเบเบฑเบเบเบฑเบ Hugo
เปเบเบฑเบเบเบปเบงเบขเปเบฒเบเบเบญเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฐเบเบฒเบเบฒเบกเบชเปเบฒเบเบชเบฐเบเบฒเบเบเบตเปเปเบเบตเบเปเบเปเปเบญเบเบฐเบชเบฒเบเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบ Hugo. Hugo เปเบกเปเบเบเบนเปเบชเปเบฒเบเปเบเบทเปเบญเบซเบฒเบเบปเบเบเบตเป.
เบชเปเบฒเบฅเบฑเบเบเบนเปเบเบตเปเบเปเปเบเบธเปเบเปเบเบตเบเบเบฑเบเปเบเบทเปเบญเบเบเปเบฒเปเบเบตเบเปเบเบเปเบฒเบชเบฐเบเบดเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบญเบเบเปเบฒเบเบเบทเปเบกเบญเบตเบเปเบฅเบฑเบเบเปเบญเบเบเปเบฝเบงเบเบฑเบเบเบงเบเบกเบฑเบ. เบเปเปเปเบซเบกเบทเบญเบเบเบฑเบเปเบเบทเปเบญเบเบเบฑเบเปเบงเบฑเบเปเบเบเปเบเปเบฒเบกเบฐเบเบฒเบเบตเปเบกเบตเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเบเบฒเบ PHP, เปเบเบดเปเบ, เปเบกเบทเปเบญเบเบทเบเบฎเปเบญเบเบเปเปเบเบเบเบนเปเปเบเป, เบเบฒเบเบชเปเบฒเบเบซเบเปเบฒเปเบงเบฑเบเบเปเบฒเบเป, เปเบเบทเปเบญเบเบชเปเบฒเบเปเบเบเบเบปเบเบเบตเปเปเบเปเบเบทเบเบญเบญเบเปเบเบเปเบเบเบเปเบฒเบเบเบฑเบเปเบฅเบฑเบเบเปเบญเบ. เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเปเบญเบปเบฒเปเบซเบผเปเบเบเปเปเบกเบนเบ, เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเบธเบเบเบญเบเปเบเบฅเปเปเบ Markdown markup เปเบฅเบฐเบฎเบนเบเปเบเบเบซเบปเบงเบเปเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบฅเบงเบเบฅเบงเบกเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒเปเบเบปเปเบฒเปเบเปเบเปเบงเบฑเบเปเบเบเปเบชเปเบฒเปเบฅเบฑเบเบชเบปเบกเบเบนเบ.
เบเบฑเปเบเปเบกเปเบ, เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบเบฐเปเบเปเบฎเบฑเบเปเบเบเบชเปเบฒเบเปเบเปเบฅเบเบฐเบเปเบฅเบตเปเบฅเบฐเบเบธเบเบเบญเบเปเบเบฅเป HTML เบเบตเปเบชเปเบฒเบเบเบถเปเบ, เปเบเบดเปเบเบเปเบฒเบเบเบฝเบเปเบเปเบชเบฒเบกเบฒเบเบญเบฑเบเปเบซเบฅเบเปเบเบเบฑเบเปเบฎเบเบเบดเปเบเบเบตเปเบกเบตเบฅเบฒเบเบฒเบเบทเบเปเบฅเบฐเปเบเปเบฎเบฑเบเปเบงเบฑเบเปเบเบเปเบเบตเปเปเบฎเบฑเบเบงเบฝเบ.
เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบดเบเบเบฑเปเบ Hugo เบขเบนเปเปเบเบเปเบญเบเบเบดเปเบเปเบฅเบฐเบฅเบญเบเบกเบฑเบเบญเบญเบ:
เบเบณเบฅเบฑเบเปเบฅเบตเปเบกเบเบปเปเบเปเบงเบฑเบเปเบเปเปเป:
hugo new site docs.example.org
เปเบฅเบฐเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ git repository:
cd docs.example.org
git init
เบกเบฒเบฎเบญเบเบเบฐเบเบธ, เปเบงเบฑเบเปเบเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบ pristine เปเบฅเบฐเปเบเบทเปเบญเปเบซเปเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเบฒเบเบปเบเบขเบนเปเปเบเบกเบฑเบ, เบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบทเปเบญเบกเบเปเปเบซเบปเบงเบเปเปเปเบเบซเบเบถเปเบ; เบซเบปเบงเบเปเปเปเบกเปเบเบเบฝเบเปเบเปเบเบธเบเบเบญเบเปเบกเปเปเบเบเปเบฅเบฐเบเบปเบเบฅเบฐเบเบฝเบเบเบตเปเบเปเบฒเบเบปเบเปเบเบเปเบงเบฑเบเปเบเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบทเบเบชเปเบฒเบเบเบถเปเบ.
เบชเปเบฒเบฅเบฑเบเบซเบปเบงเบเปเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเป
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเบเบฐเปเบญเบปเบฒเปเบเปเบชเปเปเบเบฑเบเบเบดเปเบชเบเบเปเปเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฑเบเบเบถเบเปเบเบฅเปเบซเบปเบงเบเปเปเปเบ repository เปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ; เปเบเบเบเบตเปเบเบฐ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเบทเปเบญเบกเบเปเปเบกเบฑเบเปเบเบเปเบเป. git เปเบกเบเบนเบเบเปเบญเบ:
git submodule add https://github.com/matcornic/hugo-theme-learn themes/learn
เบเบฑเปเบเบเบฑเปเบ, repository เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบกเบตเบเบฝเบเปเบเปเปเบเบฅเปเบเบตเปเบเปเบฝเบงเบเปเบญเบเปเบเบเบเบปเบเบเบฑเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เปเบฅเบฐเบซเบปเบงเบเปเปเบเบตเปเปเบเบทเปเบญเบกเบเปเปเบเบฐเบเบฑเบเบเบปเบเปเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบ repository เบชเบฐเปเบเบฒเบฐเปเบฅเบฐเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเปเบเบกเบฑเบ, เบเบฑเปเบเปเบกเปเบ, เบกเบฑเบเบชเบฐเปเบซเบกเบตเบชเบฒเบกเบฒเบเบเบถเบเบเบฒเบเปเบซเบผเปเบเบเบปเปเบเบชเบฐเบเบฑเบเปเบฅเบฐเบเปเปเบเปเบญเบเบขเปเบฒเบ. เบเบฒเบเบเปเบฝเบเปเบเบเบเบตเปเบเปเปเปเบเบปเปเบฒเบเบฑเบเปเบเป.
เปเบซเปเปเบเปเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒ config.toml:
baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"
เปเบฅเปเบงเปเบเบเบฑเปเบเบเบญเบเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ:
hugo server
เปเบฅเบฐเบเบตเปเบขเบนเป
เปเบซเปเบเบฐเบเบฒเบเบฒเบกเบชเปเบฒเบเบซเบเปเบฒเบเบปเบเปเบ เปเบเบทเปเบญเปเบ/_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. เบเบฒเบเบเบฐเบเบฝเบก Dockerfile
เบกเบฑเบเปเบเบฑเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบเปเบฒเบเบปเบเปเบเบเบชเปเบฒเบเบเบญเบ repository เบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเปเบญเบเบกเบฑเบเบเบฐเปเบเปเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบ:
.
โโโ deploy
โ โโโ app1
โ โโโ app2
โโโ dockerfiles
โโโ image1
โโโ image2
- dockerfiles/ โ เบกเบตเบฅเบฒเบเบเบฒเบเบเบตเปเบกเบต Dockerfiles เปเบฅเบฐเบเบธเบเบขเปเบฒเบเบเบตเปเบเบณเปเบเบฑเบเบชเบณเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบ Docker เบเบญเบเบเบงเบเปเบฎเบปเบฒ.
- เบเบณเปเบเป/ โ เบเบฐโเบเบญเบโเบเปเบงเบโเบเบฑเบโเบเบตโเบฅเบฒเบโเบเบฒเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเปเบฒโเปเบเปโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเบเบฑเบ Kubernetesโ
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบชเปเบฒเบ Dockerfile เบเปเบฒเบญเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฒเบกเปเบชเบฑเปเบเบเบฒเบ dockerfiles/เปเบงเบฑเบเปเบเบเป/Dockerfile
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" ]
เบเบฑเปเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเป, Dockerfile เบกเบตเบชเบญเบเบญเบฑเบ เบเบฒเบ, เบเบธเบเบเบฐเบชเบปเบกเบเบฑเบเบเบตเปเปเบญเบตเปเบเบงเปเบฒ
เบเบฑเปเบเบเบฑเปเบ, เบฎเบนเบเบเบฒเบเบชเบธเบเบเปเบฒเบเบเบฐเบกเบตเบเบฝเบเปเบเป darkhttpd (เปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ HTTP เบเปเปเบฒเบซเบเบฑเบเปเบเบปเบฒ) เปเบฅเบฐ เบชเบฒเบเบฒเบฅเบฐเบเบฐ/ โ เปเบเบทเปเบญเปเบเบเบญเบเปเบงเบฑเบเปเบเบเปเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบเบเบชเบฐเบเบดเบเบดเบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. เบฎเบนเปเบเบฑเบเบเบฑเบ kaniko
เปเบเบเบฒเบเบฐเปเบเบฑเบเบเบนเปเบชเปเบฒเบเบฎเบนเบเบเบฒเบ docker, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเปเบเป
เปเบเบทเปเบญเบชเปเบฒเบเบฎเบนเบเบเบฒเบ, เบเบฝเบเปเบเปเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบเบธเบเบฑเบ kaniko เบเบฐเบเบดเบเบฑเบ เปเบฅเบฐเบเปเบฒเบเบกเบฑเบเปเบเบชเบฐเบเบฒเบเบเบฒเบเบเปเปเบชเปเบฒเบเปเบเบเบฐเบเบธเบเบฑเบ; เบเบตเปเบเบฑเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเปเบญเบเบเบดเปเบ, เบเปเบฒเบ docker:
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 โ เบเบทเปโเบเบญเบโเบฎเบนเบ docker เบเบญเบโเบเปเบฒเบโ; เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเบเปเปโเบชเปเบฒเบโ, เบกเบฑเบโเบเบฐโเบเบทเบโเปเบเบตเบโเบญเบฑเบโเบเบฐโเปเบโเบกเบฑเบโเปเบเบปเปเบฒโเปเบโเปเบโเบเบฒเบโเบเบปเบโเบเบฐโเบเบฝเบ dockerโ.
Parameter --cache เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบ cache เบเบฑเปเบเปเบ docker registry; เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เปเบเบปเบฒเปเบเบปเปเบฒเบเบฐเบเบทเบเบเบฑเบเบเบถเบเปเบงเปเปเบ registry.gitlab.com/kvaps/docs.example.org/website/cache, เปเบเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบฅเบฐเบเบธเปเบชเบฑเปเบเบเบฒเบเบญเบทเปเบเปเบเบเปเบเปเบเบฒเบฅเบฒเบกเบดเปเบเบต --cache-repo.
เบเบฒเบเบซเบเปเบฒเบเปเบเบญเบ docker-registry
4. เบฎเบนเปเบเบฑเบ qbec
เบเบตเปเบชเบฒเบกเบฒเบเปเบเบฑเบเบเบงเบฒเบกเบเบดเบเปเบเบเบชเบฐเปเบเบฒเบฐเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบซเปเบเบฑเบเบซเบผเบฒเบเปเบเบธเปเบกเบเบตเปเบกเบตเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเปเบฅเบฐเบเปเบญเบเบเบฒเบเบญเบฐเบเบดเบเบฒเบเบขเปเบฒเบเบเบฐเปเบเปเบเปเบ Git.
Qbec เบเบฑเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบฐเปเบเบเบเบฒเบเบฐเบฅเบฒเบ Helm เปเบเบเบเบฒเบเบเปเบฒเบเบเบญเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒเบกเบตเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเบเปเบฒเปเบเบฑเบเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฝเบงเบเบฑเบเบเบฑเบ manifests เบเบปเบเบเบฐเบเบด, เบฅเบงเบกเบเบฑเบเบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบฐเบซเบกเบฑเบเบเปเปเบญเบปเบฒเบเบฒเบเบเบฒเบเบเบฑเบเบเปเบฒเบเปเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒ, เปเบฅเบฐเบเบตเป, เปเบฅเบฐเปเบฎเบฑเบเปเบซเปเบเบฒเบ, เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบ. เปเบเป ChartMuseum. เบเบฑเปเบเปเบกเปเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเปเบฅเบฐเบชเบฐเปเบเบเบเบฒเบเบฐเบฅเบฒเบเปเบเบเบเบปเบเบเบฒเบ git, เบเปเบญเบเบเบตเปเบเบงเบเปเบเบปเบฒเปเบเบฑเบ.
เบเบฑเปเบเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบงเบปเปเบฒเบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฒเบเบเปเบฒเปเบเปเบเบฑเบเบซเบกเบปเบเปเบงเปเปเบเปเบเปเบฅเบเบฐเบเปเบฅเบต เบเบณเปเบเป/:
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. เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก, qbec เปเบเปเบชเปเบฒเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบฅเบตเปเบกเบเบปเปเบเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบฎเบปเบฒเปเบฅเปเบงเปเบฅเบฐเปเบญเบปเบฒเบเบตเปเบขเบนเปเบเบญเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบ namespace เบเบฒเบ kubeconfig เปเบเบเบฑเบเบเบธเบเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เปเบเบเบฑเบเบเบธเบเบฑเบเปเบเปเบงเบฅเบฒเบเบตเป deploy เบเบฑเบ Default เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก, qbec เบชเบฐเปเบซเบกเบตเบเบฐเบเบฐเบเบดเบเบฑเบเบเบฝเบเปเบเปเบเบฑเบเบเบธเปเบก Kubernetes เบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบฅเบฐเบเบฑเบ namespace เบเบตเปเบฅเบฐเบเบธ, เบเบฑเปเบเปเบกเปเบ, เบเปเบฒเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฝเบเบฅเบฐเบซเบงเปเบฒเบเบเปเบฅเบดเบเบปเบเปเบฅเบฐ namespaces เปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบฒเปเบเป.
เบเปเบฒเบเปเบฒเปเบเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเบฑเบเปเบเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบเบฅเปเบเบตเปเปเบเปเบเบฐเบซเบผเบญเบเปเบงเบฅเบฒ.
เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฑเบเปเบปเบเบเบญเบเปเบเบปเปเบฒเบเบทเบเบญเบฐเบเบดเบเบฒเบเปเบงเปเปเบ qbec.yaml, เปเบฅเบฐเปเบเปเบเบฅเป params.libsonnet, เบเปเบญเบเบเบตเปเบกเบฑเบเบเบญเบเบงเปเบฒเบเปเบญเบเปเบเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบเบปเบฒ.
เบเปเปเปเบเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบเบชเบญเบเปเบเปเบฅเบเบฐเบเปเบฅเบต:
- เบญเบปเบเบเบฐเบเบญเบ/ โ manifests เบเบฑเบโเบซเบกเบปเบโเบชเปเบฒโเบฅเบฑเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเปเบเบฑเบโเบฎเบฑเบโเบชเบฒโเปเบงเปโเบขเบนเปโเบเบตเปโเบเบตเปโ; เบเบงเบโเปเบเบปเบฒโเปเบเบปเปเบฒโเบชเบฒโเบกเบฒเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบญเบฐโเบเบดโเบเบฒเบโเบเบฑเบโเปเบโเปเบเบฅโเป jsonnet เปเบฅเบฐ yaml เบเบปเบโเบเบฐโเบเบด
- เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก/ โ เปเบโเบเบตเปโเบเบตเปโเบเบงเบโเปเบฎเบปเบฒโเบเบฐโเบญเบฐโเบเบดโเบเบฒเบโเบเบปเบงโเปเบโเบเบฑเบโเบซเบกเบปเบ (เบเบปเบงโเบเปเบฒโเบเบปเบโ) เบชเปเบฒโเบฅเบฑเบโเบชเบฐโเบเบฒเบโเปเบงเบโเบฅเปเบญเบกโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโ.
เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบงเบเปเบฎเบปเบฒเบกเบตเบชเบญเบเปเบเบฅเป:
- เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก/base.libsonnet - เบกเบฑเบเบเบฐเบกเบตเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบปเปเบงเปเบเบชเปเบฒเบฅเบฑเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฑเบเบซเบกเบปเบ
- เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก/default.libsonnet โ เบเบฐโเบเบญเบโเบเปเบงเบโเบเบปเบงโเบเปเบฒโเบเบปเบโเบเบฒเบ overridden เบชเปเบฒโเบฅเบฑเบโเบชเบดเปเบโเปเบงเบโเบฅเปเบญเบกโ Default
เปเบเบตเบเปเบซเป เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก/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,
},
},
],
},
},
],
},
},
]
เปเบเปเบเบฅเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบญเบฐเบเบดเบเบฒเบเบชเบฒเบกเบซเบเปเบงเบ Kubernetes เปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบ: เบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบเบฒเบเบเปเบฅเบดเบเบฒเบ ะธ Ingress. เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบเบงเบเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ, เปเบเปเปเบเบเบฑเปเบเบเบญเบเบเบตเปเบซเบเบถเปเบเบเบฐเบเบฝเบเบเปเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบฎเบปเบฒ.
syntax jsonnet เปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบ json เบเบปเบเบเบฐเบเบด, เปเบเบซเบผเบฑเบเบเบฒเบ, json เบเบปเบเบเบฐเบเบดเปเบกเปเบ jsonnet เบเบตเปเบเบทเบเบเปเบญเบเปเบฅเปเบง, เบเบฑเปเบเบเบฑเปเบเปเบเบเบญเบเบเปเบฒเบญเบดเบเบกเบฑเบเบญเบฒเบเบเบฐเบเปเบฒเบเบเบถเปเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบเบเบตเปเบเบฐเปเบเปเบเปเบฅเบดเบเบฒเบเบญเบญเบเปเบฅเบเปเปเบเบฑเปเบ: yaml2json เปเบเบทเปเบญเบเปเบฝเบ yaml เบเบปเบเบเบฐเบเบดเบเบญเบเบเปเบฒเบเปเบเบฑเบ json, เบซเบผเบท, เบเปเบฒเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบเปเบฒเบเบเปเปเบกเบตเบเบปเบงเปเบเปเบเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเบกเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเบญเบฐเบเบดเบเบฒเบเปเบเบฎเบนเบเปเบเบเบเบญเบ yaml เบเบปเบเบเบฐเบเบด.
เปเบกเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ jsonnet เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบเบฐเบเปเบฒเปเบซเปเบเบดเบเบเบฑเปเบ plugin เบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฒเบเบดเบเบฒเบเบเบญเบเบเปเบฒเบ
เบเบปเบงเบขเปเบฒเบ, เบกเบต plugin เบชเปเบฒเบฅเบฑเบ vim vim-jsonnet, เปเบเบดเปเบเปเบเบตเบเบเบฒเบเปเบเบฑเปเบเปเบงเบเบฐเบเบญเบเปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ jsonnet fmt เบเบธเบเปเบเบฑเปเบเบเบตเปเบเปเบฒเบเบเบฑเบเบเบถเบ (เบเปเบญเบเบเบดเบเบเบฑเปเบ jsonnet).
เบเบธเบเบขเปเบฒเบเบเปเบญเบกเปเบฅเปเบง, เบเบฝเบงเบเบตเปเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบณเปเบเปเปเบเป:
เปเบเบทเปเบญเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบ, เปเบซเปเบเปเบฒเปเบเบตเบเบเบฒเบ:
qbec show default
เบขเบนเปเบเบตเปเบเบปเบเบเบฐเบฅเบดเบ, เบเปเบฒเบเบเบฐเปเบซเบฑเบ yaml manifests เบเบตเปเบชเบฐเปเบเบเบเบปเบเบเบตเปเบเบฐเบเบทเบเบเปเบฒเปเบเปเบเบฑเบเบเบธเปเบกเปเบฅเบตเปเบกเบเบปเปเบ.
เบเบตเบซเบผเบฒเบ, เบเบฝเบงเบเบตเปเบเบณเปเบเป:
qbec apply default
เบขเบนเปเบเบตเปเบเบปเบเบเบฐเบฅเบดเบเบเปเบฒเบเบเบฐเปเบซเบฑเบเบชเบดเปเบเบเบตเปเบเบฐเปเบฎเบฑเบเบขเบนเปเปเบเบเบธเปเบกเบเบญเบเบเปเบฒเบ, qbec เบเบฐเบเปเปเบซเปเบเปเบฒเบเบเบปเบเบฅเบปเบเบเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเบเบฒเบเบเบดเบก. y เบเปเบฒเบเบเบฐเบชเบฒเบกเบฒเบเบขเบทเบเบขเบฑเบเบเบงเบฒเบกเบเบฑเปเบเปเบเบเบญเบเบเปเบฒเบ.
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเปเบเบเบฝเบกเบเปเบญเบกเปเบฅเบฐเบเปเบฒเปเบเป!
เบเปเบฒเบเปเบฒเบเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเบเบฐเบซเบผเบญเบเปเบงเบฅเบฒ:
qbec diff default
เปเบเบทเปเบญเปเบเบดเปเบเบงเปเบฒเบเบฒเบเบเปเบฝเบเปเบเบเปเบซเบผเบปเปเบฒเบเบตเปเบเบฐเบกเบตเบเบปเบเบเบฐเบเบปเบเปเบเบงเปเบเบเปเปเบเบฒเบเบเปเบฒเปเบเปเปเบเบเบฐเบเบธเบเบฑเบ
เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. เบฅเบญเบเปเบเป Gitlab-runner เบเบฑเบ Kubernetes-executor
เบเบปเบเบเปเบงเบฒเบเปเปเบเบปเบเบกเบฒเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฝเบเปเบเปเปเบเปเบเบปเบเบเบฐเบเบด gitlab-runner เปเบเปเบเบทเปเบญเบเบเบตเปเบเบฝเบกเปเบงเปเบเปเบญเบ (LXC container) เบเบตเปเบกเบต shell เบซเบผเบท docker-executor. เปเบเปเบเบทเปเบญเบเบเบปเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฑเบเปเบฅเปเบเบเบฐเปเบเบเบเบตเปเบเปเบฒเบเบงเบเบซเบเบถเปเบเบเบตเปเบเปเบฒเบเบปเบเปเบเบเบปเปเบงเปเบฅเบเบขเบนเปเปเบ gitlab เบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบเบฑเบเบเปเบฒเบฎเบนเบเบเบฒเบ docker เบชเปเบฒเบฅเบฑเบเปเบเบเบเบฒเบเบเบฑเบเบซเบกเบปเบ.
เปเบเปเปเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเปเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบ, เบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเปเปเปเบกเปเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบตเปเบชเบธเบ, เบเบฑเบเปเบเปเบเปเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบฅเบฐเบเบงเบฒเบกเบเบญเบเปเบ. เบกเบฑเบเปเบเบฑเบเบเบฒเบเบเบตเบเบงเปเบฒเปเบฅเบฐเบกเบตเบญเบธเบเบปเบกเบเบฒเบเบเบตเปเบเบทเบเบเปเบญเบเบเบงเปเบฒเบเบตเปเบเบฐเบกเบตเบเบฑเบเปเบฅเปเบเปเบเบเบเปเบฒเบเบซเบฒเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเปเบเบเบเบฒเบ, เบซเบผเบทเปเบกเปเบเบฐเบเบฑเปเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก.
เปเบเบเบเบต, เบเบตเปเบเปเปเปเบกเปเบเบเบฑเบเบซเบฒเบเบฑเบเบซเบกเบปเบ, เบเบฑเบเบเบฑเปเบเปเบเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบฒเปเบเป gitlab-runner เปเบเบฑเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบเบเบปเบเปเบ Kubernetes.
Gitlab เบชเบฐเบซเบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบซเบกเบงเบเบเบฑเบเบเบฐเบเบปเบเบเบตเปเบเบฝเบกเบเปเบญเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเป gitlab-runner เบเบฑเบ Kubernetes. เบเบฑเปเบเบเบฑเปเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฎเบฑเบเปเบกเปเบเบเบญเบเบซเบฒ token เบฅเบปเบเบเบฐเบเบฝเบ เบชเปเบฒเบฅเบฑเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบ เบเบฒเบเบเบฑเปเบเบเปเบฒ -> CI / CD -> Runners เปเบฅเบฐโเบเปเบฒเบโเบกเบฑเบโเปเบเบฑเบโเบเบนเปโเบเบปเบโเบเบญเบโ:
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 โ เบเบตเปโเบขเบนเปโเบเบญเบโเปเบเบทเปเบญเบโเปเบกเปโเบเปเบฒเบ Gitlab เบเบญเบโเบเปเบฒเบโ.- yga8y-jdCusVDn_t4Wxc - เปเบเบทเปเบญเบเปเบฒเบเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเบชเบณเบฅเบฑเบเปเบเบเบเบฒเบเบเบญเบเบเปเบฒเบ.
- rbac.create=เบเบดเบ โ เปเบซเปเบเบฑเบเปเบฅเปเบเบเปเบฒเบเบงเบเบชเบดเบเบเบดเบเบดเปเบชเบเบเบตเปเบเปเบฒเปเบเบฑเบเปเบเบทเปเบญเบชเบฒเบกเบฒเบเบชเปเบฒเบเบเบฑเบเปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบงเบฝเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบเปเบเป kubernetes-executor.
เบเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบทเบเปเบฎเบฑเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ, เบเปเบฒเบเบเบงเบเปเบซเบฑเบเบเบฑเบเปเบฅเปเบเบเบตเปเบฅเบปเบเบเบฐเบเบฝเบเบขเบนเปเปเบเบเบฒเบ Runners, เปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบเบเบฒเบเบเบญเบเบเปเบฒเบ.
เบเบฒเบเปเปเบฒเบเปเบเบญเบเบเบฑเบเปเบฅเปเบเบเบตเปเปเบเบตเปเบกเปเบเบปเปเบฒเบกเบฒ
เบกเบฑเบเบเปเบฒเบเบเบฒเบเบเป? - เปเบกเปเบโเปเบฅเปเบงโ, เบกเบฑเบโเบเปเบฒเบโเบเบฒเบโเบเบตเปโ! เบเปเปเบซเบเบธเปเบเบเบฒเบเบเบฑเบเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเบเบฑเบเปเบฅเปเบเบเปเบงเบเบเบปเบเปเบญเบ, เบเบฒเบเบเบตเปเปเบเบเบฑเบเปเบฅเปเบเบเบฐเบเบทเบเบชเปเบฒเบ เปเบฅเบฐเบเปเบฒเบฅเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
6. เบเบณเปเบเปเบเบฒเบเบฐเบฅเบฒเบ Helm เบเบฑเบ QBEC
เบเบฑเบเบเบฑเปเบเปเบเปเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบชเบดเบเปเบเบเบดเบเบฒเบฅเบฐเบเบฒ gitlab-runner เบชเปเบงเบเบซเบเบถเปเบเบเบญเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบกเบฑเบเปเบเบฑเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบญเบฐเบเบดเบเบฒเบเบกเบฑเบเบขเบนเปเปเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบ Git เบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบญเบฐเบเบดเบเบฒเบเบกเบฑเบเปเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเปเบเบเบเปเบฒเบเบซเบฒเบ เปเบงเบฑเบเปเบเบเป, เปเบเปเปเบเบญเบฐเบเบฒเบเบปเบเบเบงเบเปเบฎเบปเบฒเบงเบฒเบเปเบเบเบเบตเปเบเบฐเบเปเบฒเปเบเปเบชเปเบฒเปเบเบปเบฒเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ เปเบงเบฑเบเปเบเบเป เบกเบฑเบเบซเบผเบฒเบ, เบเปเปเปเบซเบกเบทเบญเบเบเบฑเบ gitlab-runner, เปเบเบดเปเบเบเบฐเบเบทเบเบเบณเปเบเปเบเบฝเบเบเบฑเปเบเบเบฝเบงเบเปเปเบเบธเปเบก Kubernetes. เบเบฑเปเบเบเบฑเปเบ, เปเบซเปเปเบฅเบตเปเบกเบเบปเปเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเบกเบฑเบ:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
เปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเปเปเบเปเบญเบฐเบเบดเบเบฒเบเปเบเบดเบเบซเบเปเบงเบเบเบฒเบ Kubernetes เบเปเบงเบเบเบปเบเปเบญเบ, เปเบเปเบเบฐเปเบญเบปเบฒเบเบฒเบเบฐเบฅเบฒเบ Helm เบเบตเปเบเบฝเบกเบเปเบญเบก. เบซเบเบถเปเบเปเบเบเปเปเปเบเปเบเบฝเบเบเบญเบ qbec เปเบกเปเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบชเบฐเปเบเบเบเบฒเบเบฐเบฅเบฒเบ Helm เปเบเบเบเบปเบเบเบฒเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบ Git.
เปเบซเปเปเบเบทเปเบญเบกเบเปเปเบกเบฑเบเปเบเบเปเบเป git submodule:
git submodule add https://gitlab.com/gitlab-org/charts/gitlab-runner vendor/gitlab-runner
เปเบเบเบฑเบเบเบธเบเบฑเบเปเบเปเบฅเบเบฐเบเปเบฅเบต เบเบนเปเบเบฒเบ/gitlab-runner เบเบงเบเปเบฎเบปเบฒเบกเบตเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบตเปเบกเบตเบเบฒเบเบฐเบฅเบฒเบเบชเปเบฒเบฅเบฑเบ gitlab-runner.
เปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบทเปเบญเบกเบเปเป repositories เบญเบทเปเบเป, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, repository เบเบฑเบเบซเบกเบปเบเบเบตเปเบกเบตเบเบฒเบเบฐเบฅเบฒเบเบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบ.
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,
}
)
เบเบฒเบเปเบเปเบเบฝเบเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบฑเบ เบเบฐเบซเบเบฒเบHelmTemplate เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเปเบชเบฑเปเบเบเบฒเบเปเบเบชเบนเปเบเบฒเบเบฐเบฅเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ params.values, เบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบกเบฒเบเบฒเบเบเบปเบงเบเปเบฒเบเบปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบกเบฒเบเบฑเบเบงเบฑเบเบเบธ
- เบเบทเปเปเบกเปเปเบเบ - เบเบทเปโเบเปเบญเบโ
- namespace โ namespace เบเบทเบโเบเบปเบโเบเปเบฒเบโเปเบโเบซเบกเบงเบโ
- เปเบเบฅเปเบเบตเป โ เบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบตเปเบเปเบฒเปเบเบฑเบเบเบตเปเบเปเบฒเบเปเบชเบฑเปเบเบเบฒเบเปเบเบซเบฒเปเบเบฅเปเบเบฐเบเบธเบเบฑเบ
- เบเบณเปเบงเบปเปเบฒ - เบชเบฐโเปเบเบโเปเบซเปโเปเบซเบฑเบโเบเปเบฒโเบชเบฑเปเบโ เปเบกเปเปเบเบเบซเบกเบงเบเบเบฑเบเบเบฐเบเบปเบ เบเบฑเบเบเบฒเบเปเบเปเบเบฝเบเบเบฑเบเบซเบกเบปเบเปเบเปเบงเบฅเบฒเบเบตเปเบชเบฐเปเบเบเบเบฒเบเบฐเบฅเบฒเบ
เบเบญเบเบเบตเปเปเบซเปเบเบงเบเปเบฎเบปเบฒเบญเบฐเบเบดเบเบฒเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบญเบปเบเบเบฐเบเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบ เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก/base.libsonnet:
local secrets = import '../secrets/base.libsonnet';
{
components: {
gitlabRunner: {
name: 'gitlab-runner',
values: {
gitlabUrl: 'https://gitlab.com/',
rbac: {
create: true,
},
runnerRegistrationToken: secrets.runnerRegistrationToken,
},
},
},
}
เบเปเบฒเบเปเบญเบปเบฒเปเบเปเบชเป runnerRegistrationToken เบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเบฒเบเปเบเบฅเปเบเบฒเบเบเบญเบ เบเบงเบฒเบกเบฅเบฑเบ/base.libsonnet, เปเบซเปโเปเบฎเบปเบฒโเบชเปเบฒเบโเบกเบฑเบโ:
{
runnerRegistrationToken: 'yga8y-jdCusVDn_t4Wxc',
}
เปเบซเปเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบ:
qbec show default
เบเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบขเบนเปเปเบเบฅเปเบฒเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบฅเบถเบเบเบฒเบเบเปเบญเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเบเปเบฒเบเบกเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบ Helm:
helm uninstall gitlab-runner
เปเบฅเบฐ เบเบณ เปเบเปเบกเบฑเบเบเปเบงเบเบงเบดเบเบตเบเบฝเบงเบเบฑเบ, เปเบเปเบเปเบฒเบ qbec:
qbec apply default
7. เบเบฒเบเปเบเบฐเบเปเบฒเบเปเบฝเบงเบเบฑเบ git-crypt
เปเบเบเบฑเบเบเบธเบเบฑเบ, เปเบเบเบชเปเบฒเบเปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบฅเบฑเบ gitlab-runner เปเบเบดเปเบเบเบทเบงเปเบฒเบเบตเป:
.
โโโ components
โ โโโ gitlab-runner.jsonnet
โโโ environments
โ โโโ base.libsonnet
โ โโโ default.libsonnet
โโโ params.libsonnet
โโโ qbec.yaml
โโโ secrets
โ โโโ base.libsonnet
โโโ vendor
โโโ gitlab-runner (submodule)
เปเบเปเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบงเบฒเบกเบฅเบฑเบเปเบ Git เปเบกเปเบเบเปเปเบเบญเบเปเบ, เปเบกเปเบเบเป? เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒเบขเปเบฒเบเบเบทเบเบเปเบญเบ.
เปเบเบเบเบปเบเบเบฐเบเบดเปเบฅเปเบง, เบชเปเบฒเบฅเบฑเบเบเบปเบงเปเบเบซเบเบถเปเบ, เบเบตเปเบเปเปเบกเบตเบเบงเบฒเบกเบซเบกเบฒเบเบชเบฐเปเบซเบกเบต. เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบญเบเบเบงเบฒเบกเบฅเบฑเบเปเบ qbec เปเบฅเบฐเบเปเบฒเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบญเบเบฅเบฐเบเบปเบ CI เบเบญเบเบเปเบฒเบ.
เปเบเปเบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบชเบฑเบเปเบเบเบงเปเบฒเบเบฑเบเบกเบตเปเบเบเบเบฒเบเบเบตเปเบชเบฑเบเบชเบปเบเบซเบผเบฒเบเบเบตเปเบชเบฒเบกเบฒเบเบกเบตเบเบงเบฒเบกเบฅเบฑเบเบซเบผเบฒเบ; เบเบฒเบเปเบญเบเบเบงเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบเบเปเบฒเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฐเปเบเบฑเบเปเบฅเบทเปเบญเบเบเบฒเบเบเบตเปเบชเบธเบ.เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เปเบเบเปเบฅเบฐเบเบตเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเปเปเบชเบฒเบกเบฒเบเบเบญเบเบเปเบฒเบเบเปเบฝเบงเบเบฑเบเปเบเบทเปเบญเบเบกเบทเบเบตเปเบเบฐเปเบชเบตเบเปเบเบฑเปเบ git-crypt.
git-crypt เบกเบฑเบเบเบฑเบเบชเบฐเบเบงเบเปเบเบเบฒเบเบเบตเปเบกเบฑเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบถเบเบเบฐเบซเบงเบฑเบเบชเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบเบงเบฒเบกเบฅเบฑเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฒเบเบเบฝเบเบเบฝเบ, เบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเปเบฅเบฐเปเบเปเปเบเบเปเปเบเบฑเบเปเบเปเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฝเบงเบเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเบตเบเปเบฎเบฑเบเปเบเบเปเบฅเบฐเบเบตเบเบญเบ Git.
เบชเบดเปเบเบเปเบฒเบญเบดเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบดเบเบเบฑเปเบ git-crypt เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเปเบฒเบเบฅเบฐเบซเบฑเบเบชเปเบฒเบฅเบฑเบ repository เบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git crypt init
เบเปเบฒเบเปเบฒเบเบกเบตเบเบฐเปเบ PGP, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบปเบงเบเปเบฒเบเปเบญเบเปเบเบฑเบเบเบนเปเบฎเปเบงเบกเบกเบทเบชเปเบฒเบฅเบฑเบเปเบเบเบเบฒเบเบเบตเป:
git-crypt add-gpg-user [email protected]
เบเปเบงเบเบงเบดเบเบตเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบเปเบญเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบตเปเปเบเบเปเบเปเบเบฐเปเบเบชเปเบงเบเบเบปเบงเบเบญเบเบเปเบฒเบเปเบเปเบเบฐเบซเบผเบญเบเปเบงเบฅเบฒ.
เบเปเบฒเบเปเบฒเบเบเปเปเบกเบตเบเบฐเปเบ PGP เปเบฅเบฐเบเปเปเปเบเปเบเบฒเบเบซเบงเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบญเบทเปเบเปเบฅเบฐเบชเบปเปเบเบญเบญเบเบเบฐเปเบเปเบเบเบเบฒเบ:
git crypt export-key /path/to/keyfile
เบเบฑเปเบเบเบฑเปเบ, เปเบเบเปเปเบเบฒเบกเบเบตเปเบกเบตเบเบฒเบเบชเบปเปเบเบญเบญเบ เปเบเบฅเปเบเบต เบเบฐเบชเบฒเบกเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบ repository เบเบญเบเบเปเบฒเบเปเบเป.
เบกเบฑเบเปเบเบดเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบเบฑเปเบเบเบงเบฒเบกเบฅเบฑเบเบเปเบฒเบญเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบเบทเบญเบเบเปเบฒเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบขเบนเปเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบฒเบ deploy/gitlab-runner/, เบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบกเบตเปเบเปเบฅเบเบฐเบเปเบฅเบต เบเบงเบฒเบกเบฅเบฑเบ/, เปเบซเปเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเปเบเบฅเปเบเบฑเบเบซเบกเบปเบเปเบเบกเบฑเบ, เบชเปเบฒเบฅเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบชเปเบฒเบเปเบเบฅเป เบเบงเบฒเบกเบฅเบฑเบ/.gitattributes เปเบเบโเบกเบตโเปเบเบทเปเบญโเปเบโเบเบฑเปเบโเบเปเปโเปเบโเบเบตเปโ:
* filter=git-crypt diff=git-crypt
.gitattributes !filter !diff
เบเบฑเปเบเบเบตเปเปเบซเบฑเบเปเบเปเบเบฒเบเปเบเบทเปเบญเบซเบฒ, เปเบเบฅเปเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบซเบเปเบฒเบเบฒเบ * เบเบฐเบเบทเบเบเบฑเบเบเปเบฒเบ git-crypt, เบเบปเบเปเบงเบฑเปเบเบซเบผเบฒเบเบเบตเปเบชเบธเบ .gitattributes
เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเบงเบเบชเบญเบเบเบตเปเปเบเบเบเบฒเบเปเบฅเปเบ:
git crypt status -e
เบเบปเบเปเบเปเบฎเบฑเบเบเบฐเปเบเบฑเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบฅเปเบเบฑเบเบซเบกเบปเบเปเบ repository เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเบทเบเปเบเบตเบเปเบเป
เบเบฑเปเบเปเบกเปเบเบเบฑเบเปเบปเบ, เบเบฝเบงเบเบตเปเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบขเปเบฒเบเบเบญเบเปเบ:
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
เปเบเบทเปเบญเบเบฅเบฑเบญเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบ, เบเบฝเบเปเบเปเบเปเบฒเปเบเบตเบเบเบฒเบ:
git crypt lock
เปเบฅเบฐเบเบฑเบเบเบตเบเบธเบเปเบเบฅเปเบเบตเปเบเบทเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเบฐเบเปเบฝเบเปเบเบฑเบเบชเบญเบเบญเบฑเบ, เบกเบฑเบเบเบฐเปเบเบฑเบเปเบเบเปเปเปเบเปเบเบตเปเบเบฐเบญเปเบฒเบเบเบงเบเบกเบฑเบ.
เปเบเบทเปเบญเบเบญเบเบฅเบฐเบซเบฑเบ repository, เบเปเบฒเปเบเบตเบเบเบฒเบ:
git crypt unlock
8. เบชเปเบฒเบเบฎเบนเบเบเบฒเบเบเปเบญเบเปเบเบทเปเบญเบเบกเบท
เบฎเบนเบเบเปเบญเบเปเบเบทเปเบญเบเบกเบทเปเบกเปเบเบฎเบนเบเบเบฒเบเบเบตเปเบกเบตเปเบเบทเปเบญเบเบกเบทเบเบฑเบเปเบปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเปเบเบทเปเบญเบเบณเปเบเปเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบกเบฑเบเบเบฐเบเบทเบเปเบเปเปเบเบเบเบฑเบเปเบฅเปเบ Gitlab เปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบงเบฝเบเบเบฒเบเบเบฒเบเปเบเปเบเบฒเบเปเบเบเบเบปเบเบเบฐเบเบด.
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเปเบฒเบเบเบฒเบเบขเบนเปเบเบตเปเบเบตเป, เปเบซเปเบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบญเบฑเบเปเบซเบกเป dockerfiles/toolbox/Dockerfile เปเบเบโเบกเบตโเปเบเบทเปเบญโเปเบโเบเบฑเปเบโเบเปเปโเปเบโเบเบตเปโ:
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, เปเบเปเบเปเบฒเบเบญเบฒเบเบเบฐเบเปเบญเบเบเบฒเบเบซเบผเบดเปเบเบเบฑเบเบกเบฑเบเปเบเบฅเบฐเบซเบงเปเบฒเบเปเบฅเบเบฐเบเบฒเบเบเบดเบเบเบฑเปเบเบเปเป.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบเบทเปเบญเปเบซเปเบชเบฒเบกเบฒเบเบชเบทเปเบชเบฒเบเบเบฑเบ Kubernetes เปเบฅเบฐเบเปเบฒเปเบเปเบเบฑเบเบกเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเปเบฒเบเบปเบเบเบปเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ pods เบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบเบ gitlab-runner.
เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เปเบซเปเปเบเบเบตเปเปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบฑเบ gitlab-runner:
cd deploy/gitlab-runner
เปเบฅเบฐเปเบเบตเปเบกเบญเบปเบเบเบฐเบเบญเบเปเบซเบกเป components/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,
},
],
},
]
เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฐเบญเบฐเบเบดเบเบฒเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบซเบกเปเปเบ เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก/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 เบซเบกเบฒเบเปเบเบดเบ เบเบทเป เบชเปเบฒโเบฅเบฑเบโเบญเบปเบโเบเบฐโเบเบญเบโ rbac
เปเบซเปเบเบงเบเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบ:
qbec diff default
เปเบฅเบฐเบเปเบฒเปเบเปเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฑเบ Kubernetes:
qbec apply default
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฑเบ git:
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. เบเปเปเบเปเบฒเบญเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบฅเบฐเบเบฐเบเบญเบเบฎเบนเบเบเบฒเบเปเบเบ tags
เบขเบนเปเบฎเบฒเบเบเบญเบเปเบเบเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบชเปเบฒเบ .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: เบเบปเบเบเบฐเบเบด เบชเปเบฒเบฅเบฑเบเบงเบฝเบเปเบซเบผเบปเปเบฒเบเบฑเปเบเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบตเปเบกเบเบปเปเบ submodules เบขเปเบฒเบเบเบฑเบเปเบเบเบเปเบญเบเบเบตเปเบเบฐเบเบฐเบเบดเบเบฑเบ.
เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git add .gitlab-ci.yml
git commit -m "Automate docker build"
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบดเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเบซเบฒเบชเบฐเบเบฑเบเบเบตเปเบขเปเบฒเบเบเบญเบเปเบ v0.0.1 เปเบฅเบฐเปเบเบตเปเบกเปเบเบฑเบ:
git tag v0.0.1
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเปเบกเปเบเบฑเบเบเบธเบเบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบญเบญเบเปเบงเบตเบเบฑเบเปเปเป. เปเบเบฑเบเปเบเบฎเบนเบเบเบฒเบ Docker เบเบฐเบเบทเบเบเบนเบเบกเบฑเบเบเบฑเบเปเบเบฑเบ Git. เปเบเปเบฅเบฐเบเบฒเบเบเบธเบเบเบนเปเบเบตเปเบกเบตเปเบเบฑเบเปเบซเบกเปเบเบฐเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบเบเบตเปเบกเบตเปเบเบฑเบเบเบตเป.
เปเบซเปเปเบฎเบฑเบเบกเบฑเบ git push --tags, เปเบฅเบฐเปเบซเปเปเบเบดเปเบเบเปเปเบเปเบฒเบญเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
เบเบฒเบเบซเบเปเบฒเบเปเบเบญเบเบเปเปเบเปเบฒเบญเบดเบ
เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบฐเบเบถเบเบเบนเบเบเบงเบฒเบกเบชเบปเบเปเบเบเบญเบเบเปเบฒเบเบเปเปเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบฒเบเบเบฐเบเบญเบเปเบเบ tags เปเบกเปเบเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบ docker, เปเบเปเบเปเปเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฑเบ Kubernetes. เปเบเบทเปเบญเบเบเบฒเบเปเบเปเบเปเบซเบกเปเบชเบฒเบกเบฒเบเบเบทเบเบกเบญเบเบซเบกเบฒเบเปเบซเปเบเบฑเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเปเบเบปเปเบฒ, เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเปเบชเปเบฒเบฅเบฑเบเบเบงเบเบกเบฑเบเบเบฐเบเปเบฒเปเบเบชเบนเปเบเบฒเบเบเปเบฒเปเบเปเบชเบฐเบเบฑเบเปเบเบปเปเบฒ.
เปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป, เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบ docker เปเบกเปเบเบเบนเบเบกเบฑเบเบเบฑเบ tags, เปเบฅเบฐเบเบฒเบเบเปเบฒเปเบเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฑเบเบชเบฒเบเบฒ. เบเบปเปเบเบชเบฐเบเบฑเบ, เปเบเบชเบฐเบเบฑเบเบเบญเบเบฎเบนเบเบเบฒเบเบเบตเปเปเบเบฑเบเบเปเบฒเปเบกเปเบ hardcoded. เบเบตเปเปเบกเปเบเบเปเบญเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบเบฑเบเบเบทเบเบเปเบงเบเบเบฒเบเบเบฑเบเบเบทเบเปเบเบเบเปเบฒเบเบเบฒเบ เบเบปเปเบเบชเบฐเบเบฑเบ- เบชเบฒเบเบฒ.
10. เบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ
เปเบเบทเปเบญเปเบซเป Gitlab-runner เบเบญเบเบฅเบฐเบซเบฑเบเบเบงเบฒเบกเบฅเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบญเบเบชเบปเปเบเบญเบญเบเบฅเบฐเบซเบฑเบ repository เปเบฅเบฐเปเบเบตเปเบกเบกเบฑเบเปเบชเปเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก CI เบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git crypt export-key /tmp/docs-repo.key
base64 -w0 /tmp/docs-repo.key; echo
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฑเบเบเบถเบเปเบชเบฑเปเบเบเบปเบเปเบเปเบฎเบฑเบเปเบ Gitlab; เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เปเบซเปเปเบเบเบตเปเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
เบเบฒเบเบเบฑเปเบเบเปเบฒ -> CI / CD -> เบเบปเบงเปเบ
เปเบฅเบฐเบเปเปเบซเปเบชเปเบฒเบเบเบปเบงเปเบเปเบซเบกเป:
เบเบฐเปเบเบ
เบเบตเปเบชเปเบฒเบเบฑเบ
เบกเบนเบเบเปเบฒ
เบเบปเบเบเปเบญเบ
Masked
เบเบญเบเปเบเบ
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 เบเบฒเบ / app โ เบญเบฐโเบเบธโเบเบฒเบโเปเบซเปโเบเปเบฒเบโเปเบเบทเปเบญโเบเปเบฒโเบเบปเบโเบฅเบฐโเบเบปเบโเบเบญเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบชเบฐโเปเบเบฒเบฐโเปเบโเบซเบเบถเปเบโ
- --force:k8s-context __incluster__ - เบเบตเปเปเบกเปเบเบเบปเบงเปเบ magic เบเบตเปเบเบญเบเบงเปเบฒ deployment เบเบฐเปเบเบตเบเบเบถเปเบเปเบ cluster เบเบฝเบงเบเบฑเบเบเบตเป gtilab-runner เปเบฅเปเบเบขเบนเป. เบเบตเปเปเบกเปเบเบชเบดเปเบเบเปเบฒเปเบเบฑเบเปเบเบฒเบฐเบงเปเบฒเบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบ qbec เบเบฐเบเบฐเบเบฒเบเบฒเบกเบเบญเบเบซเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ Kubernetes เบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเปเบ kubeconfig เบเบญเบเบเปเบฒเบ
- --เบฅเปเบเปเบฒ โ เบเบฑเบเบเบฑเบ qbec เปเบซเปเบฅเปเบเปเบฒเบเบปเบเบเปเบงเบฒเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเบกเบฑเบเบชเปเบฒเบเปเบเบปเปเบฒเปเบเปเบเบชเบฐเบเบฒเบเบฐ Ready เปเบฅเบฐเบเบฝเบเปเบเปเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบญเบญเบเบเปเบงเบ exit-code เบชเปเบฒเปเบฅเบฑเบ.
- โ เปเบกเปเบโเปเบฅเปเบง - เบเบฝเบเปเบเปเบเบดเบเบเบฒเบเบเปเบฒเบเบฒเบเบเบญเบเปเบเบฐเบเบฒเบเปเบเปเบเบญเบ เปเบเบปเปเบฒโเปเบเปโเปเบโเบเปเป? เปเบกเบทเปเบญเบเบทเบเบเบณเปเบเป.
เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git add .gitlab-ci.yml
git commit -m "Automate deploy"
เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบ git เบเบธเบเบเบนเป เบเบงเบโเปเบฎเบปเบฒโเบเบฐโเปเบซเบฑเบโเบงเปเบฒโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเปเบฒโเปเบเปโ:
เบเบฒเบเบซเบเปเบฒเบเปเบเบญเบเบเปเปเบเบตเบชเบญเบ
11. เบเบญเบกเปเบฅเบฐเบเบฒเบเบเบฐเบเบญเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบธเบเบเบนเปเปเบซเปเปเบกเปเบเบปเบ
เปเบเบเบเบปเบเบเบฐเบเบด, เบเบฑเปเบเบเบญเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเบเปเบฒเบเปเบเบดเบเปเบกเปเบเบเบฝเบเบเปเบเบตเปเบเบฐเบชเปเบฒเบเปเบฅเบฐเปเบซเปเบเปเบฅเบดเบเบฒเบเบเบธเบเบฅเบฐเบเบฒเบเปเบเบทเบญเบเบเบฑเบเบซเบกเบปเบ, เปเบเปเบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเปเบเบตเปเบกเปเบเบฑเบเบเบธเบเบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบฑเบเบเบธเบเปเบงเบฑเบเปเบเบเป. เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบกเบตเบเบฒเบเปเบเบทเปเบญเบเปเบซเบงเบซเบผเบฒเบเบเบงเปเบฒเปเบเบปเปเบฒเปเบฅเบฐเบเปเบฒเบเบปเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบญเบเบชเบฐเบซเบผเบฒเบเปเบเบชเบฒเบเบฒเปเบกเปเบเบปเบ.
เปเบเบงเบเบงเบฒเบกเบเบดเบเปเบกเปเบเบเปเบฒเบเบเบฒเบ: เปเบเบเบฑเบเบเบธเบเบฑเบเบฎเบนเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ เปเบงเบฑเบเปเบเบเป เบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบชเปเบฒเบโเบเบทเบโเปเบซเบกเปโเบเบธเบโเบเบฑเปเบโเบเบตเปโเบเปเบฒเบโเบเบธเบโเบเบนเปโเปเบเบปเปเบฒโเปเบโเปเบโ เบเบปเปเบเบชเบฐเบเบฑเบ, เปเบฅเบฐเบเบฒเบเบเบฑเปเบ เบเบณเปเบเปเบเบฑเบ Kubernetes เปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
เบเปเปเบซเปเบญเบฑเบเปเบเบเบชเบญเบเบงเบฝเบเบเบตเปเบขเบนเปเปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ .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"
เบเบฐเบฅเบธเบเบฒเบฎเบฑเบเบเบฒเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบตเปเบกเบซเบปเบงเบเปเป เบเบปเปเบเบชเบฐเบเบฑเบ ะบ เบเบฒเบเบญเปเบฒเบเบญเบตเบ เบชเปเบฒเบฅเบฑเบเบงเบฝเบ build_website เปเบฅเบฐเบเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเป $CI_COMMIT_REF_NAME เปเบเบเบเบตเปเบเบฐ $CI_COMMIT_TAG, เบเบฑเปเบเปเบกเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบทเบ untied เบเบฒเบ tags เปเบ Git เปเบฅเบฐเปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบนเปเบฎเบนเบเบเบฒเบเบเบตเปเบกเบตเบเบทเปเบเบญเบเบชเบฒเบเบฒเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเบเบตเปเปเบฅเบตเปเบกเบเบปเปเบเบเปเป. เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบชเบฑเบเปเบเบเบงเปเบฒเบเบตเปเบเบฑเบเบเบฐเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ tags, เปเบเบดเปเบเบเบฐเบเปเบงเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเบฑเบเบเบถเบเบเบฒเบเบฅเบงเบกเบเบญเบเปเบงเบฑเบเปเบเบเปเบเบตเปเบกเบตเบชเบฐเบเบฑเบเบชเบฐเปเบเบฒเบฐเปเบ docker-registry.
เปเบกเบทเปเบญเบเบทเปเบเบญเบเปเบเปเบ docker เบชเปเบฒเบฅเบฑเบเปเบงเบฑเบเปเบเบเปเบฎเบธเปเบเปเบซเบกเปเบเปเปเบชเบฒเบกเบฒเบเบเปเบฝเบเปเบเบเปเบเป, เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเปเบญเบเบญเบฐเบเบดเบเบฒเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบ Kubernetes, เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบเบกเบฑเบเบเบฐเบเปเปเบเปเบฒเปเบเปเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบทเบเปเบซเบกเปเบเบฒเบเบฎเบนเบเบเบฒเบเปเบซเบกเป, เปเบเบฒเบฐเบงเปเบฒเบกเบฑเบเบเบฐเบเปเปเบชเบฑเบเปเบเบเปเบซเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเปเปเบ manifest เบเบฒเบโเบเปเบฒโเปเบเปโ.
เบเบฒเบเปเบฅเบทเบญเบ โvm:ext-str digest=โ$DIGESTโ เบชเปเบฒเบฅเบฑเบ qbec - เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบเปเบฒเบเบเบปเบงเปเบเบเบฒเบเบเบญเบเปเบเบซเบฒ jsonnet. เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบซเปเบกเบฑเบเบเบทเบเบเปเบฒเบกเบฒเปเบเปเบเบทเบเปเบเบเบธเปเบกเบเบฑเบเปเบเปเบฅเบฐเบเบฒเบเบเปเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบงเบเปเบฎเบปเบฒเบเปเปเบชเบฒเบกเบฒเบเปเบเปเบเบทเปเปเบเบฑเบเปเบเปเบญเบตเบเบเปเปเปเบ, เปเบเบดเปเบเบเบญเบเบเบตเปเบเปเปเบชเบฒเบกเบฒเบเบเปเบฝเบเปเบเบเปเบเป, เปเบเบฒเบฐเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบนเบเบกเบฑเบเบเบฑเบเบฎเบนเบเบเบฒเบเบชเบฐเบเบฑเบเบชเบฐเปเบเบฒเบฐ เปเบฅเบฐ เบเบฐเบเบธเปเบเบเบฒเบเบเบณเปเบเปเปเบกเบทเปเบญเบกเบฑเบเบเปเบฝเบเปเบเบ.
เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบเปเบงเบเปเบเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบ Kaniko เปเบเบทเปเบญเบเบฑเบเบเบถเบเบฎเบนเบเบเบฒเบเบเปเบญเบเปเบเบปเปเบฒเปเบเปเบเปเบเบฅเป (เบเบฒเบเปเบฅเบทเบญเบ --digest-file)
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบญเบเปเบเบฅเปเบเบตเปเปเบฅเบฐเบญเปเบฒเบเบกเบฑเบเปเบเปเบงเบฅเบฒเบเบญเบเบเบฒเบเบเปเบฒเปเบเป.
เปเบซเปเบญเบฑเบเปเบเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ 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',
},
},
}
เบชเบณเปเบฅเบฑเบเปเบฅเปเบง, เบเบญเบเบเบตเปเปเบซเปเบเบณเปเบฑเปเบเบชเบฑเบเบเบฒเปเบเปเบเปเบเบฒเบก เบเบปเปเบเบชเบฐเบเบฑเบ เปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบ docker เบชเปเบฒเบฅเบฑเบ เปเบงเบฑเบเปเบเบเป, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบเปเบเบฑเบ Kubernetes.
เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git add .
git commit -m "Configure dynamic build"
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบงเบเบชเบญเบเบเบฒเบเบซเบผเบฑเบ git เบเบธเบเบเบนเป เบเบงเบเปเบฎเบปเบฒเบเบงเบเบเบฐเปเบซเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบเบเบตเป:
เบเบฒเบเบซเบเปเบฒเบเปเบเบญเบเบเปเปเบชเปเบฒเบฅเบฑเบเปเบกเปเบเบปเบ
เปเบเบซเบผเบฑเบเบเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเป gitlab-runner เบเปเบงเบเบเบฒเบเบเบธเบเบเบนเปเปเบเปเบฅเบฐเบเบฑเปเบ, เปเบงเบฑเปเบเปเบชเบเปเบเป, เปเบเปเบเบญเบ, เบเปเปเบกเบตเบซเบเบฑเบเบเปเบฝเบเปเบเบเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบกเบฑเบ, เปเบซเปเปเบเปเปเบเบกเบฑเบเบขเบนเปเปเบ. .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/**/*
เบเบฒเบเบเปเบฝเบเปเบเบ เบเบฐเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบดเบเบเบฒเบกเบเบฒเบเบเปเบฝเบเปเบเบเปเบ deploy/gitlab-runner/ เปเบฅเบฐโเบเบฐโเบชเบปเปเบโเบเบปเบโเบเบฐโเบเบปเบโเบงเบฝเบโเปเบฎเบฑเบโเบเบฒเบโเบเปเบฒโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเบเบฝเบโเปเบเปโเบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบกเบตโ
เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git add .gitlab-ci.yml
git commit -m "Reduce gitlab-runner deploy"
git เบเบธเบเบเบนเป, เบกเบฑเบเบเบตเบเบงเปเบฒ:
เบเบฒเบเปเปเบฒเบเปเบเบญเบเบเปเปเบเบตเปเบญเบฑเบเปเบเบเปเบฅเปเบง
12. เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบเปเบเบทเปเบญเบเปเบซเบง
เบกเบฑเบเปเบเบดเบเปเบงเบฅเบฒเปเบฅเปเบงเบเบตเปเบเบฐเบซเบผเบฒเบเบซเบผเบฒเบเบเปเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบเปเบเบทเปเบญเบเปเบซเบง.
เบเปเบญเบเบญเบทเปเบ, เปเบซเปเบญเบฑเบเปเบเบเบงเบฝเบ build_website เปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ .gitlab-ci.yml, เบเบญเบเบเบฑเบเบญเบญเบเบเบฒเบเบกเบฑเบ เบเบฝเบเปเบเป, เปเบเบดเปเบเบเบฐเบเบฑเบเบเบฑเบเปเบซเป Gitlab เบเบฐเบเบธเปเบเบกเบฑเบเบขเบนเปเปเบเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒเบเบฑเบเบชเบฒเบเบฒเปเบเบเปเปเบเบฒเบก:
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, เปเบเบตเปเบกเบเบฑเบเบขเบนเปเบเบตเปเบเบฑเปเบ เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก:
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: --app-tag โ เบกเบฑเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเปเบเบฑเบเปเบงเบตเบเบฑเบเบเบตเปเบเบณเปเบเปเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ เปเบฅเบฐเปเบฎเบฑเบเบงเบฝเบเบเบฒเบเปเบเปเบเบฑเบเบเบตเปเปเบเบปเปเบฒเบเบฑเปเบ; เปเบกเบทเปเบญเบชเปเบฒเบ เปเบฅเบฐเบเบณเบฅเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเปเบ Kubernetes, 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',
},
},
}
เบเปเปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบดเปเบเบงเบฝเบเบเบตเปเปเบเปเบเบดเบ stop_review, เบกเบฑเบเบเบฐเบเบทเบเบเบฐเบเบธเปเบเปเบกเบทเปเบญเบชเบฒเบเบฒเบเบทเบเบฅเบถเบเปเบฅเบฐเปเบเบทเปเบญเปเบซเป gitlab เบเปเปเบเบฐเบเบฒเบเบฒเบกเบเปเบฒเบเปเบเบดเบเบกเบฑเบเบเบทเบเบเปเบฒเปเบเป. GIT_STRATEGY: เบเปเปเบกเบต, เบเปเปเบกเบฒเบเบงเบเปเบฎเบปเบฒ clone เบเบปเปเบเบชเบฐเบเบฑเบ- เบชเบฒเบเบฒเปเบฅเบฐเบฅเบปเบเบเบฒเบเบเบปเบเบเบงเบเบเบทเบเปเบเบเบเปเบฒเบเบกเบฑเบ.
เบกเบฑเบเบชเบฑเบเบชเบปเบเปเบฅเบฑเบเบเปเบญเบ, เปเบเปเบเปเบญเบเบเปเปเบเบปเบเบงเบดเบเบตเบเบตเปเบชเบงเบเบเบฒเบกเบเบงเปเบฒเบเบตเป.
เบเบฒเบโเปเบฅเบทเบญเบโเบญเบทเปเบโเบเบฐโเปเบเบฑเบโเบเบฒเบโเบเบณโเปเบเปโเบเบฒเบโเบเบปเบโเบเบงเบโเบเบทเบโเปเบเปโเบฅเบฐโเบญเบฑเบโเปเบโเบซเบฒโเบเปเบญเบโเบเบฑเปเบโเบเบทเปโเบเบญเบโเปเบฎเบโเปเบฎเบก, เปเบเบดเปเบโเบชเบฒโเบกเบฒเบโเบเบทเบโเบฅเบปเบโเบฅเปเบฒเบโเบเบฑเบโเปเบปเบ.
เบขเปเบฒเบฅเบทเบกเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
git add .
git commit -m "Enable automatic review"
git เบเบธเบเบเบนเป, git checkout -b เบเบฒเบเบเบปเบเบชเบญเบ, git push เบเบฒเบเบเบปเบเบชเบญเบเบเบปเปเบเบเปเบฒเปเบเบตเบ, เบเบงเบเปเบเบดเปเบ:
เบเบฒเบเปเปเบฒเบเปเบเบญเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบ Gitlab
เบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเป? - เบเบตเบซเบผเบฒเบ, เบฅเบถเบเบชเบฒเบเบฒเบเบปเบเบชเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ: git checkout เบเบปเปเบเบชเบฐเบเบฑเบ, git push เบเบปเปเบเบเปเบฒเปเบเบตเบ: เบเบฒเบเบเบปเบเบชเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเบงเบเปเบเบดเปเบเบงเปเบฒเบงเบฝเบเบเบฒเบเบฅเบถเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบฎเบฑเบเบงเบฝเบเปเบเบเบเปเปเบกเบตเบเปเปเบเบดเบเบเบฒเบ.
เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเบเบฐเปเบซเปเบเบงเบฒเบกเบเบฐเบเปเบฒเบเปเบเปเบเบเบฑเบเบเบตเบงเปเบฒเบเบนเปเบเบฑเบเบเบฐเบเบฒเปเบเปเปเบเปเบเบเบเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเบชเบฒเบเบฒ, เบฅเบฒเบงเบเบฑเบเบชเบฒเบกเบฒเบเบเปเบฝเบเปเบเบเปเบเป .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"
git เบเบธเบเบเบนเป, เปเบฅเบฐเบเบงเบเปเบเบดเปเบ:
เบเบฒเบเปเปเบฒเบเปเบเบญเบเบเบธเปเบกเบเบปเบเบเบงเบเปเบญเบฑเบ
เบงเบฝเบเบชเบณเปเบฅเบฑเบเปเบฅเปเบง!
เปเบซเบผเปเบเปเบเบเบเบฒเบ:
- เปเบ Gitlab:
https://gitlab.com/kvaps/docs.example.org - เปเบ GitHub:
https://github.com/kvaps/docs.example.org
เบเบญเบเปเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบชเบปเบเปเบเบเบญเบเปเบเบปเปเบฒ, เบเปเบญเบเบซเบงเบฑเบเบงเปเบฒเปเบเบปเปเบฒเบเบฐเบกเบฑเบเบกเบฑเบ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com