เดจเดฟเดเตเดเดณเตเดเต เดธเตเดซเตโเดฑเตเดฑเตโเดตเตเดฏเตผ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเดคเต เดชเตเดฐเดงเดพเดจเดตเตเด เดเดตเดถเตเดฏเดตเตเดฎเดพเดฃเตเดจเตเดจเต เดเดฒเตเดฒเดพเดตเตผเดเตเดเตเด เดจเดจเตเดจเดพเดฏเดฟ เด เดฑเดฟเดฏเดพเดฎเตเดเตเดเดฟเดฒเตเด, เดชเดฒเดฐเตเด เดเดคเต เดตเดณเดฐเตเดเตเดเดพเดฒเดฎเดพเดฏเดฟ เดฏเดพเดจเตเดคเตเดฐเดฟเดเดฎเดพเดฏเดฟ เดเตเดฏเตเดฏเตเดจเตเดจเตเดฃเตเดเตเดเตเดเดฟเดฒเตเด, เดนเดฌเดฑเดฟเดจเตเดฑเต เดตเดฟเดถเดพเดฒเดคเดฏเดฟเตฝ เด เดคเตเดคเดฐเด เดเดจเดชเตเดฐเดฟเดฏ เดเตฝเดชเตเดชเดจเตเดจเดเตเดเดณเตเดเต เดธเดเดฏเตเดเดจเด เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดฐเต เดชเดพเดเดเดเตเดเตเดฑเดฟเดชเตเดชเตเด เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ. เดเดคเต (เดเดเตเดเดณเตเดเต เดชเตเดฐเดฟเดฏเดชเตเดชเตเดเตเด) GitLab เดเด JUnit เดเด เดชเตเดฒเตเดฏเดพเดฃเต. เดจเดฎเตเดเตเดเต เด เดตเดฟเดเดตเต เดจเดฟเดเดคเตเดคเดพเด!
เดเดฎเตเดเด
เดเดฆเตเดฏเด, เดเดพเตป เดเตเดฑเดเตเดเต เดธเดจเตเดฆเตผเดญเด เดจเตฝเดเดเตเดเต:
- เดเดเตเดเดณเตเดเต เดเดฒเตเดฒเดพ เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเดณเตเด เดเตเดฌเตเตผเดจเตเดฑเตเดฑเดธเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดเดเดฟเดคเดฎเดพเดฏ เด เดเดฟเดธเตเดฅเดพเดจ เดธเตเดเดฐเตเดฏเดเตเดเดณเดฟเตฝ เดชเดฐเตเดเตเดทเดฃเดเตเดเตพ เดจเดเดคเตเดคเตเดจเตเดจเดคเต เดเดเตเดเตพ เดชเดฐเดฟเดเดฃเดฟเดเตเดเตเด.
- เด
เดธเดเดฌเตเดฒเดฟเดเตเดเตเด เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเตเด เดเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต
เดตเตเตผเดซเต (เดเตปเดซเตเดฐเดพเดธเตเดเตเดฐเดเตเดเตผ เดเดเดเดเตเดเดณเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเดคเต เดธเตเดตเดฏเดฎเตเดต เด เตผเดคเตเดฅเดฎเดพเดเตเดเตเดจเตเดจเดคเต เดนเตเตฝเด เดเตพเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต เดเดจเตเดจเดพเดฃเต). - เดเตเดธเตเดฑเตเดฑเตเดเดณเตเดเต เดฏเดฅเดพเตผเดคเตเดฅ เดธเตเดทเตเดเดฟเดฏเตเดเต เดตเดฟเดถเดฆเดพเดเดถเดเตเดเดณเดฟเดฒเตเดเตเดเต เดเดพเตป เดชเตเดเดฟเดฒเตเดฒ: เดเดเตเดเดณเตเดเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดเตเดฒเดฏเดจเตเดฑเต เดธเตเดตเดฏเด เดเตเดธเตเดฑเตเดฑเตเดเตพ เดเดดเตเดคเตเดจเตเดจเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดเดเตเดเตพ เด เดตเดฏเตเดเต เดธเดฎเดพเดฐเดเดญเด เดฎเดพเดคเตเดฐเดฎเต เดเดฑเดชเตเดชเดพเดเตเดเต (เดเตเดเดพเดคเต เดฒเดฏเดจ เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เด เดจเตเดฌเดจเตเดง เดฑเดฟเดชเตเดชเตเตผเดเตเดเดฟเดจเตเดฑเต เดธเดพเดจเตเดจเดฟเดงเตเดฏเด).
เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเดเต เดชเตเดคเตเดตเดพเดฏ เดเตเดฐเดฎเด เดเดเตเดเดจเตเดฏเดฟเดฐเดฟเดเตเดเตเด?
- เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเต - เด เดเดเตเดเดคเตเดคเดฟเดจเตเดฑเต เดตเดฟเดตเดฐเดฃเด เดเดเตเดเตพ เดเดดเดฟเดตเดพเดเตเดเตเด.
- เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดเตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดจเตเดฏเดฟเดเดธเตเดชเตเดธเดฟเดฒเตเดเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเต เดเตเดธเตเดฑเตเดฑเดฟเดเดเต เดเดฐเดเดญเดฟเดเตเดเตเด.
- GitLab เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดพเดตเดธเตเดคเตเดเตเดเตพเดเตเดเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดเดฏเตเด เดเตเดฃเดฟเดฑเตเดฑเต เดฑเดฟเดชเตเดชเตเตผเดเตเดเตเดเตพ เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต.
- เดฎเตเดฎเตเดชเต เดธเตเดทเตเดเดฟเดเตเด เดเดฐเต เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดจเตเดจเต.
เดเดชเตเดชเตเตพ - เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเดพเตป!
เดเดฎเดชเตเดชเตเดเตเดคเตเดคเดฒเต
เดเดฟเดฑเตเดฑเตโเดฒเดพเดฌเต เดธเดฟ.เด
เดจเดฎเตเดเตเดเต เดเดฐเต เดถเดเดฒเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฐเดเดญเดฟเดเตเดเดพเด .gitlab-ci.yaml
, เดเดคเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดจเตเดจเดคเตเด เดเตเดธเตเดฑเตเดฑเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเตเด เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเต. เดฒเดฟเดธเตเดฑเตเดฑเดฟเดเดเต เดตเดณเดฐเต เดตเดฒเตเดคเดพเดฏเดฟ เดฎเดพเดฑเดฟ, เด
เดคเดฟเดจเดพเตฝ เดเดคเต เด
เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเตพเดเตเดเตเดชเตเดชเด เดจเดจเตเดจเดพเดฏเดฟ เด
เดจเตเดฌเดจเตเดงเดฎเดพเดฏเดฟ:
variables:
# ะพะฑััะฒะปัะตะผ ะฒะตััะธั werf, ะบะพัะพััั ัะพะฑะธัะฐะตะผัั ะธัะฟะพะปัะทะพะฒะฐัั
WERF_VERSION: "1.0 beta"
.base_deploy: &base_deploy
script:
# ัะพะทะดะฐะตะผ namespace ะฒ K8s, ะตัะปะธ ะตะณะพ ะฝะตั
- kubectl --context="${WERF_KUBE_CONTEXT}" get ns ${CI_ENVIRONMENT_SLUG} || kubectl create ns ${CI_ENVIRONMENT_SLUG}
# ะทะฐะณััะถะฐะตะผ werf ะธ ะดะตะฟะปะพะธะผ โ ะฟะพะดัะพะฑะฝะตะต ะพะฑ ััะพะผ ัะผ. ะฒ ะดะพะบัะผะตะฝัะฐัะธะธ
# (https://werf.io/how_to/gitlab_ci_cd_integration.html#deploy-stage)
- type multiwerf && source <(multiwerf use ${WERF_VERSION})
- werf version
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- werf deploy --stages-storage :local
--namespace ${CI_ENVIRONMENT_SLUG}
--set "global.commit_ref_slug=${CI_COMMIT_REF_SLUG:-''}"
# ะฟะตัะตะดะฐะตะผ ะฟะตัะตะผะตะฝะฝัั `run_tests`
# ะพะฝะฐ ะฑัะดะตั ะธัะฟะพะปัะทะพะฒะฐัััั ะฒ ัะตะฝะดะตัะต Helm-ัะตะปะธะทะฐ
--set "global.run_tests=${RUN_TESTS:-no}"
--set "global.env=${CI_ENVIRONMENT_SLUG}"
# ะธะทะผะตะฝัะตะผ timeout (ะฑัะฒะฐัั ะดะพะปะณะธะต ัะตััั) ะธ ะฟะตัะตะดะฐะตะผ ะตะณะพ ะฒ ัะตะปะธะท
--set "global.ci_timeout=${CI_TIMEOUT:-900}"
--timeout ${CI_TIMEOUT:-900}
dependencies:
- Build
.test-base: &test-base
extends: .base_deploy
before_script:
# ัะพะทะดะฐะตะผ ะดะธัะตะบัะพัะธั ะดะปั ะฑัะดััะตะณะพ ะพััะตัะฐ, ะธัั
ะพะดั ะธะท $CI_COMMIT_REF_SLUG
- mkdir /mnt/tests/${CI_COMMIT_REF_SLUG} || true
# ะฒัะฝัะถะดะตะฝะฝัะน ะบะพัััะปั, ั.ะบ. GitLab ั
ะพัะตั ะฟะพะปััะธัั ะฐััะตัะฐะบัั ะฒ ัะฒะพะตะผ build-dirโะต
- mkdir ./tests || true
- ln -s /mnt/tests/${CI_COMMIT_REF_SLUG} ./tests/${CI_COMMIT_REF_SLUG}
after_script:
# ะฟะพัะปะต ะพะบะพะฝัะฐะฝะธั ัะตััะพะฒ ัะดะฐะปัะตะผ ัะตะปะธะท ะฒะผะตััะต ั Jobโะพะผ
# (ะธ, ะฒะพะทะผะพะถะฝะพ, ะตะณะพ ะธะฝััะฐััััะบัััะพะน)
- type multiwerf && source <(multiwerf use ${WERF_VERSION})
- werf version
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- werf dismiss --namespace ${CI_ENVIRONMENT_SLUG} --with-namespace
# ะผั ัะฐะทัะตัะฐะตะผ ะฟะฐะดะตะฝะธั, ะฝะพ ะฒั ะผะพะถะตัะต ัะดะตะปะฐัั ะธะฝะฐัะต
allow_failure: true
variables:
RUN_TESTS: 'yes'
# ะทะฐะดะฐะตะผ ะบะพะฝัะตะบัั ะฒ werf
# (https://werf.io/how_to/gitlab_ci_cd_integration.html#infrastructure)
WERF_KUBE_CONTEXT: 'admin@stage-cluster'
tags:
# ะธัะฟะพะปัะทัะตะผ ัะฐะฝะฝะตั ั ัะตะณะพะผ `werf-runner`
- werf-runner
artifacts:
# ััะตะฑัะตััั ัะพะฑัะฐัั ะฐััะตัะฐะบั ะดะปั ัะพะณะพ, ััะพะฑั ะตะณะพ ะผะพะถะฝะพ ะฑัะปะพ ัะฒะธะดะตัั
# ะฒ ะฟะฐะนะฟะปะฐะนะฝะต ะธ ัะบะฐัะฐัั โ ะฝะฐะฟัะธะผะตั, ะดะปั ะฑะพะปะตะต ะฒะดัะผัะธะฒะพะณะพ ะธะทััะตะฝะธั
paths:
- ./tests/${CI_COMMIT_REF_SLUG}/*
# ะฐััะตัะฐะบัั ััะฐััะต ะฝะตะดะตะปะธ ะฑัะดัั ัะดะฐะปะตะฝั
expire_in: 7 day
# ะฒะฐะถะฝะพ: ััะธ ัััะพะบะธ ะพัะฒะตัะฐัั ะทะฐ ะฟะฐััะธะฝะณ ะพััะตัะฐ GitLabโะพะผ
reports:
junit: ./tests/${CI_COMMIT_REF_SLUG}/report.xml
# ะดะปั ัะฟัะพัะตะฝะธั ะทะดะตัั ะฟะพะบะฐะทะฐะฝั ะฒัะตะณะพ ะดะฒะต ััะฐะดะธะธ
# ะฒ ัะตะฐะปัะฝะพััะธ ะถะต ั ะฒะฐั ะธั
ะฑัะดะตั ะฑะพะปััะต โ ะบะฐะบ ะผะธะฝะธะผัะผ ะธะท-ะทะฐ ะดะตะฟะปะพั
stages:
- build
- tests
build:
stage: build
script:
# ัะฑะพัะบะฐ โ ัะฝะพะฒะฐ ะฟะพ ะดะพะบัะผะตะฝัะฐัะธะธ ะฟะพ werf
# (https://werf.io/how_to/gitlab_ci_cd_integration.html#build-stage)
- type multiwerf && source <(multiwerf use ${WERF_VERSION})
- werf version
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- werf build-and-publish --stages-storage :local
tags:
- werf-runner
except:
- schedules
run tests:
<<: *test-base
environment:
# "ัะฐะผะฐ ัะพะปั" ะธะผะตะฝะพะฒะฐะฝะธั namespaceโะฐ
# (https://docs.gitlab.com/ce/ci/variables/predefined_variables.html)
name: tests-${CI_COMMIT_REF_SLUG}
stage: tests
except:
- schedules
เดเตเดฌเตเตผเดจเตเดฑเตเดฑเต
เดเดชเตเดชเตเตพ เดกเดฏเดฑเดเตเดเดฑเดฟเดฏเดฟเตฝ .helm/templates
เดเตเดฌเต เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฎเตเดเตเดเต YAML เดธเตเดทเตเดเดฟเดเตเดเดพเด - tests-job.yaml
- เดเตเดธเตเดฑเตเดฑเตเดเดณเตเด เด
เดคเดฟเดจเต เดเดตเดถเตเดฏเดฎเดพเดฏ เดเตเดฌเตผเดจเตเดฑเตเดฑเดธเต เดตเดฟเดญเดตเดเตเดเดณเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต. เดฒเดฟเดธเตเดฑเตเดฑเต เดเตเดฏเตเดคเดคเดฟเดจเต เดถเตเดทเด เดตเดฟเดถเดฆเตเดเดฐเดฃเดเตเดเตพ เดเดพเดฃเตเด:
{{- if eq .Values.global.run_tests "yes" }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: tests-script
data:
tests.sh: |
echo "======================"
echo "${APP_NAME} TESTS"
echo "======================"
cd /app
npm run test:ci
cp report.xml /app/test_results/${CI_COMMIT_REF_SLUG}/
echo ""
echo ""
echo ""
chown -R 999:999 /app/test_results/${CI_COMMIT_REF_SLUG}
---
apiVersion: batch/v1
kind: Job
metadata:
name: {{ .Chart.Name }}-test
annotations:
"helm.sh/hook": post-install,post-upgrade
"helm.sh/hook-weight": "2"
"werf/watch-logs": "true"
spec:
activeDeadlineSeconds: {{ .Values.global.ci_timeout }}
backoffLimit: 1
template:
metadata:
name: {{ .Chart.Name }}-test
spec:
containers:
- name: test
command: ['bash', '-c', '/app/tests.sh']
{{ tuple "application" . | include "werf_container_image" | indent 8 }}
env:
- name: env
value: {{ .Values.global.env }}
- name: CI_COMMIT_REF_SLUG
value: {{ .Values.global.commit_ref_slug }}
- name: APP_NAME
value: {{ .Chart.Name }}
{{ tuple "application" . | include "werf_container_env" | indent 8 }}
volumeMounts:
- mountPath: /app/test_results/
name: data
- mountPath: /app/tests.sh
name: tests-script
subPath: tests.sh
tolerations:
- key: dedicated
operator: Exists
- key: node-role.kubernetes.io/master
operator: Exists
restartPolicy: OnFailure
volumes:
- name: data
persistentVolumeClaim:
claimName: {{ .Chart.Name }}-pvc
- name: tests-script
configMap:
name: tests-script
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Chart.Name }}-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
storageClassName: {{ .Chart.Name }}-{{ .Values.global.commit_ref_slug }}
volumeName: {{ .Values.global.commit_ref_slug }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: {{ .Values.global.commit_ref_slug }}
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Mi
local:
path: /mnt/tests/
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- kube-master
persistentVolumeReclaimPolicy: Delete
storageClassName: {{ .Chart.Name }}-{{ .Values.global.commit_ref_slug }}
{{- end }}
เดเดคเตเดคเดฐเด เดตเดฟเดญเดตเดเตเดเตพ เด เดเตเตบเดซเดฟเดเดฑเตเดทเดจเดฟเตฝ เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเต? เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เดเดเตเดเตพ เดเดฐเต เด
เดฆเตเดตเดฟเดคเตเดฏ เดจเตเดฏเดฟเดเดธเตเดชเตเดธเต เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต (เดเดคเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต .gitlab-ci.yaml
- tests-${CI_COMMIT_REF_SLUG}
) เดเตเดเดพเดคเต เด
เดคเต เดเดฐเตเดเตเดเตเด:
- เดเตเตบเดซเดฟเดเตผเดฎเดพเดชเตเดชเต เดเตเดธเตเดฑเตเดฑเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเดชเดฏเตเดเดฟเดเตเดเต;
- เดเดฏเตเดฏเตเดพเดฌเต เดชเตเดกเดฟเดจเตเดฑเต เดตเดฟเดตเดฐเดฃเดตเตเด เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดจเดฟเตผเดฆเตเดฆเตเดถเดตเตเด เดธเดนเดฟเดคเด
command
, เดตเตเดฑเตเด เดเตเดธเตเดฑเตเดฑเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจ; - เดชเดฟ.เดตเดฟ.เดฏเตเด เดชเดฟ.เดตเดฟ.เดธเดฟ, เดเดคเต เดเตเดธเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เดธเดเดญเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต.
เดเตเดเต เดเดฎเตเด เดตเตเดฏเดตเดธเตเดฅ เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเด if
เดฎเดพเดจเดฟเดซเตเดธเตเดฑเตเดฑเดฟเดจเตเดฑเต เดคเตเดเดเตเดเดคเตเดคเดฟเตฝ - เด
เดคเดจเตเดธเดฐเดฟเดเตเดเต, เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดณเตเดณ เดนเตเตฝเด เดเดพเตผเดเตเดเดฟเดจเตเดฑเต เดฎเดฑเตเดฑเต YAML เดซเดฏเดฒเตเดเตพ เดชเตเดคเดฟเดเตเดเดฟเดฐเดฟเดเตเดเดฃเด เดตเดฟเดชเดฐเตเดคเด เดชเดฐเดฟเดถเตเดงเดจเดฏเตเดเตเดเดฟเดเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเดชเตเดชเตเดเดพเดคเดฟเดฐเดฟเดเตเดเดพเตป เดฐเตเดชเดเตฝเดชเตเดชเดจ เดเตเดฏเตเดฏเตเด. เด
เดคเดพเดฃเต:
{{- if ne .Values.global.run_tests "yes" }}
---
ั ะดััะณะพะน ัะผะปะธะบ
{{- end }}
เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดชเดฐเดฟเดถเตเดงเดจเดเตพ เดเดฃเตเดเตเดเดฟเตฝ เดเดฟเดฒ เด เดเดฟเดธเตเดฅเดพเดจ เดธเตเดเดฐเตเดฏเดเตเดเตพ เดเดตเดถเตเดฏเดฎเดพเดฃเต (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, Redis, RabbitMQ, Mongo, PostgreSQL...) - เด เดตเดฐเตเดเต YAML-เดเตพ เดเดเดพเด เด เดฒเตเดฒ เดเดซเต เดเตเดฏเตเดฏเตเด. เดเดฐเต เดชเดฐเตเดเตเดทเดฃ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเดฒเตเดเตเดเต เด เดตเดฐเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเด... เดจเดฟเดเตเดเตพเดเตเดเต เด เดจเตเดฏเตเดเตเดฏเดฎเตเดจเตเดจเต เดคเตเดจเตเดจเตเดจเตเดจ เดฐเตเดคเดฟเดฏเดฟเตฝ เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเตเด, เดคเตเตผเดเตเดเดฏเดพเดฏเตเด.
เด เดจเตเดคเดฟเดฎ เดธเตโเดชเตผเดถเดจเด
เดเดพเดฐเดฃเด เดเดชเตเดชเตเตพ เดตเตเตผเดซเต เดตเตผเดเตเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เด
เดธเดเดฌเตเดฒเดฟเดฏเตเด เดตเดฟเดจเตเดฏเดพเดธเดตเตเด เดฎเดพเดคเตเดฐเด เดฌเดฟเตฝเดกเต เดธเตเตผเดตเดฑเดฟเตฝ (เดเดฟเดฑเตเดฑเตโเดฒเดพเดฌเต-เดฑเดฃเตเดฃเดฑเดฟเดจเตเดชเตเดชเด), เดเตเดเดพเดคเต เดเตเดธเตเดฑเตเดฑเตเดเดณเตเดณเตเดณ เดชเตเดกเต เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเตฝ เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดจเดฟเดเตเดเตพ เดเดฐเต เดกเดฏเดฑเดเตโเดเดฑเดฟ เดธเตเดทเตโเดเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต /mnt/tests
เดฏเดเดฎเดพเดจเดจเตเดฑเต เดฎเตเตฝ เด
เดคเต เดเดเตเดเดเตเดเดพเดฐเดจเต เดเตเดเตเดเตเดเตเด เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, NFS เดตเดดเดฟ. เดตเดฟเดถเดฆเตเดเดฐเดฃเดเตเดเดณเตเดณเตเดณ เดเดฐเต เดตเดฟเดถเดฆเดฎเดพเดฏ เดเดฆเดพเดนเดฐเดฃเด เดเดคเดฟเตฝ เดเดพเดฃเดพเด
เดซเดฒเด เดเดคเดพเดฏเดฟเดฐเดฟเดเตเดเตเด:
user@kube-master:~$ cat /etc/exports | grep tests
/mnt/tests IP_gitlab-builder/32(rw,nohide,insecure,no_subtree_check,sync,all_squash,anonuid=999,anongid=998)
user@gitlab-runner:~$ cat /etc/fstab | grep tests
IP_kube-master:/mnt/tests /mnt/tests nfs4 _netdev,auto 0 0
เดเดฟเดฑเตเดฑเตโเดฒเดพเดฌเต-เดฑเดฃเตเดฃเดฑเดฟเตฝ เดจเตเดฐเดฟเดเตเดเต NFS เดทเตเดฏเตผ เดเดฃเตเดเดพเดเตเดเตเดจเตเดจเดคเตเด เดชเดฟเดจเตเดจเตเดเต เดชเตเดกเตเดเดณเดฟเตฝ เดฎเตเดฃเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเตเด เดเดฐเตเด เดตเดฟเดฒเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ.
เด เดญเดฟเดชเดพเดฏเดชเตเดชเตเดเตเด
เดทเตเตฝ เดฑเดฃเตเดฃเดฑเดฟเตฝ เดจเตเดฐเดฟเดเตเดเต เดเตเดธเตเดฑเตเดฑเตเดเดณเตเดณเตเดณ เดเดฐเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเดฎเตเดเตเดเดฟเตฝ, เดเดฐเต เดเตเดฒเดฟ เดธเตเดทเตเดเดฟเดเตเดเต เดเดฒเตเดฒเดพเด เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดเตเดเตเดจเตเดจเดคเต เดเดจเตเดคเดฟเดจเดพเดฃเตเดจเตเดจเต เดจเดฟเดเตเดเตพ เดเตเดฆเดฟเดเตเดเตเดจเตเดจเตเดฃเตเดเดพเดเดพเด? เดเดคเตเดคเดฐเด เดตเดณเดฐเต เดจเดฟเดธเตเดธเดพเดฐเดฎเดพเดฃเต...
เดเดฟเดฒ เดชเดฐเดฟเดถเตเดงเดจเดเตพเดเตเดเต เด เดต เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดฃเตเดเตเดจเตเดจเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดพเตป เดเตปเดซเตเดฐเดพเดธเตเดเตเดฐเดเตเดเดฑเดฟเดฒเตเดเตเดเต (MongoDB, RabbitMQ, PostgreSQL, เดฎเตเดคเดฒเดพเดฏเดต) เดเดเตโเดธเดธเต เดเดตเดถเตเดฏเดฎเดพเดฃเต. เดเดเตเดเตพ เดเตเดธเตเดฑเตเดฑเดฟเดเดเต เดเดเตเดเตเดคเดฎเดพเดเตเดเตเดจเตเดจเต - เด เดธเดฎเตเดชเดจเดคเตเดคเดฟเดฒเตเดเต, เด เดคเตเดคเดฐเด เด เดงเดฟเด เดเดจเตเดฑเดฟเดฑเตเดฑเดฟเดเตพ เดเตพเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเดคเต เดเดณเตเดชเตเดชเดฎเดพเดเตเด. เดเดคเตเดเตเดเดพเดคเต, เดจเดฎเตเดเตเดเต เดฒเดญเดฟเดเตเดเตเดจเตเดจเต เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต เดตเดฟเดจเตเดฏเดพเดธ เดธเดฎเตเดชเดจเด (NFS เดเดชเดฏเตเดเดฟเดเตเดเดพเดฒเตเด, เดกเดฏเดฑเดเตเดเดฑเดฟเดเดณเตเดเต เด เดงเดฟเด เดฎเตเดฃเตเดเดฟเดเดเต).
เดซเดฒเด
เดคเดฏเตเดฏเดพเดฑเดพเดเตเดเดฟเดฏ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดชเตเดฐเดฏเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ เดจเดฎเตเดฎเตพ เดเดจเตเดคเต เดเดพเดฃเตเด?
เดฒเดฏเดจ เด เดญเตเดฏเตผเดคเตเดฅเดจ เด เดคเดฟเดจเตเดฑเต เดเดฑเตเดฑเดตเตเด เดชเตเดคเดฟเดฏ เดชเตเดชเตเดชเตโเดฒเตเดจเดฟเตฝ เดจเดเดคเตเดคเตเดจเตเดจ เดเตเดธเตเดฑเตเดฑเตเดเดณเตเดเต เดธเดเดเตเดฐเดน เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเดเตเดเดฃเดเตเดเตเดเตพ เดเดพเดฃเดฟเดเตเดเตเด:
เดเดฐเต เดชเดฟเดถเดเตเด เดตเดฟเดถเดฆเดพเดเดถเดเตเดเตพเดเตเดเดพเดฏเดฟ เดเดตเดฟเดเต เดเตเดฒเดฟเดเตเดเต เดเตเดฏเตเดฏเดพเด:
NB: เดเดเตเดเตพ เดเดฐเต NodeJS เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดชเดฐเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเดคเตเด เดธเตเดเตเดฐเตเตปเดทเตเดเตเดเตเดเดณเดฟเตฝ - .NET... เดเดถเตเดเดฐเตเดฏเดชเตเดชเตเดเตเดฃเตเด: เดฒเตเดเดจเด เดคเดฏเตเดฏเดพเดฑเดพเดเตเดเตเดฎเตเดชเตเตพ, เดเดฆเตเดฏ เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดชเดฐเตเดเตเดทเดฟเดเตเดเตเดจเตเดจเดคเดฟเตฝ เดชเดฟเดถเดเตเดเดณเตเดจเตเดจเตเด เดเดฃเตเดเตเดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ เดเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดจเตเดจ เดตเดพเดฏเดจเดเตเดเดพเดฐเตป เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเด, เดชเดเตเดทเต เด
เดต เดฎเดฑเตเดฑเตเดจเตเดจเดฟเตฝ เดเดฃเตเดเตเดคเตเดคเดฟ.
เดคเตเดฐเตเดฎเดพเดจเด
เดจเดฟเดเตเดเตพเดเตเดเต เดเดพเดฃเดพเดจเดพเดเตเดจเตเดจเดคเตเดชเตเดฒเต, เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดจเตเดจเตเด เดคเดจเตเดจเตเดฏเดฟเดฒเตเดฒ!
เดคเดคเตเดตเดคเตเดคเดฟเตฝ, เดจเดฟเดเตเดเตพเดเตเดเต เดเดคเดฟเดจเดเด เดเดฐเต เดทเตเตฝ เดเดณเดเตเดเตผ เดเดฃเตเดเตเดเตเดเดฟเตฝ เด
เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต, เดเดจเตเดจเดพเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดเตเดฌเตเตผเดจเตเดฑเตเดฑเดธเต เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เด
เดคเดฟเดฒเตเดเตเดเต เดเตเดธเตเดฑเตเดฑเดฟเดเดเต เด
เดฑเตเดฑเดพเดเตเดเตเดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดเดตเดฟเดเต เดตเดฟเดตเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดเตเดเดพเตพ เดฒเดณเดฟเดคเดฎเดพเดฏ เดเดฐเต เดเตเดฒเดฟเดฏเดพเดฏเดฟเดฐเดฟเดเตเดเตเด. เดเดชเตเดชเด เด
เดเดคเตเดคเตเด
เดชเดฟ.เดเดธเต
เดเดเตเดเดณเตเดเต เดฌเตเดฒเตเดเดฟเดฒเตเด เดตเดพเดฏเดฟเดเตเดเตเด:
- ยซ
Kubernetes, GitLab เดเดจเตเดจเดฟเดตเดฏเตโเดเตเดเตเดชเตเดชเดฎเตเดณเตเดณ เดฎเดฟเดเดเตเด CI/CD เดชเดฐเดฟเดถเตเดฒเดจเดเตเดเตพ (เด เดตเดฒเตเดเดจเดตเตเด เดตเตเดกเดฟเดฏเต เดฑเดฟเดชเตเดชเตเตผเดเตเดเตเด) "; - ยซ
GitLab CI-เตฝ เดเดทเตโเดเดพเดจเตเดธเตเดค เดตเตผเดเตเดเตเดซเตเดฒเตเดเตพ เดธเตเดทเตโเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเตเดฑเตเดเตเดเตเดเตพ "; - ยซ
เดเตฝเดชเตเดชเดพเดฆเดจเดคเตเดคเดฟเตฝ เดคเตเดเตผเดเตเดเดฏเดพเดฏ เดธเดเดฏเตเดเดจเดคเตเดคเดฟเดจเตเด เดตเดฟเดคเดฐเดฃเดคเตเดคเดฟเดจเตเดฎเดพเดฏเดฟ GitLab CI ".
เด เดตเดฒเดเดฌเด: www.habr.com