āĻ¯āĻĻāĻŋāĻ āĻ¸āĻŦāĻžāĻ āĻāĻžāĻ˛āĻāĻžāĻŦā§ āĻāĻžāĻ¨ā§ āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ, āĻāĻŦāĻ āĻ āĻ¨ā§āĻā§āĻ āĻāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻĻā§āĻ°ā§āĻāĻĻāĻŋāĻ¨ āĻ§āĻ°ā§ āĻāĻ°ā§ āĻāĻ¸āĻā§, āĻšāĻžāĻŦāĻ°ā§āĻ° āĻŦāĻŋāĻļāĻžāĻ˛āĻ¤āĻžāĻ¯āĻŧ āĻāĻ āĻāĻžāĻ¤ā§āĻ¯āĻŧ āĻāĻ¨āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻŖā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻāĻŽāĻŋāĻļā§āĻ°āĻŖ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ°ā§āĻ¸āĻŋāĻĒāĻŋ āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤ (āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻŋāĻ¯āĻŧ) GitLab āĻāĻŦāĻ JUnit āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻ āĻā§āĻ˛ā§āĻā§āĻāĻŋāĨ¤ āĻāĻ° āĻāĻ āĻļā§āĻ¨ā§āĻ¯āĻ¸ā§āĻĨāĻžāĻ¨ āĻĒā§āĻ°āĻŖ āĻāĻ°āĻž āĻ¯āĻžāĻ!
āĻĒāĻ°āĻŋāĻāĻžāĻ¯āĻŧāĻ
āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻŽāĻžāĻā§ āĻāĻŋāĻā§ āĻĒā§āĻ°āĻ¸āĻā§āĻ āĻĻāĻŋāĻ¤ā§ āĻĻāĻŋāĻ¨:
- āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻā§ āĻāĻ˛ā§, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§āĻ¤ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻĨāĻž āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻŦāĨ¤
- āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻŦāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ
werf (āĻ āĻŦāĻāĻžāĻ āĻžāĻŽā§āĻāĻ¤ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§āĻā§āĻˇāĻŋāĻ¤ā§, āĻāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻŦā§āĻāĻžāĻ¯āĻŧ āĻ¯ā§ āĻšā§āĻ˛āĻŽ āĻāĻĄāĻŧāĻŋāĻ¤)āĨ¤ - āĻāĻŽāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒā§āĻ°āĻā§āĻ¤ āĻ¸ā§āĻˇā§āĻāĻŋāĻ° āĻŦāĻŋāĻŦāĻ°āĻŖā§ āĻ¯āĻžāĻŦ āĻ¨āĻž: āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¨āĻŋāĻā§āĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋ āĻ˛ā§āĻā§āĻ¨ āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻā§āĻŦāĻ˛ āĻ¤āĻžāĻĻā§āĻ° āĻ˛āĻā§āĻ (āĻāĻŦāĻ āĻŽāĻžāĻ°ā§āĻ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨ā§āĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ) āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻŋāĨ¤
āĻāĻ°ā§āĻŽā§āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻā§āĻ°āĻŽ āĻā§āĻŽāĻ¨ āĻšāĻŦā§?
- āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž - āĻāĻŽāĻ°āĻž āĻāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§āĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻŦāĻžāĻĻ āĻĻā§āĻŦāĨ¤
- Kubernetes āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻļā§āĻ°ā§ āĻāĻ°ā§āĻ¨āĨ¤
- āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻāĻŦāĻ GitLab āĻāĻ° āĻ¸āĻžāĻĨā§ JUnit āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°āĻžāĨ¤
- āĻĒā§āĻ°ā§āĻŦā§ āĻ¤ā§āĻ°āĻŋ āĻāĻāĻāĻŋ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻž āĻšāĻā§āĻā§āĨ¤
āĻāĻāĻ¨ - āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨!
āĻ¸āĻŽāĻ¨ā§āĻŦāĻ¯āĻŧ
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ
āĻāĻāĻāĻŋ āĻāĻŖā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ .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
Kubernetes
āĻāĻāĻ¨ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ .helm/templates
āĻāĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ YAML āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯āĻžāĻ - tests-job.yaml
â āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŦāĻ Kubernetes āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻĻā§āĻā§āĻ¨:
{{- 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 āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž āĻŦāĻ¨ā§āĻ§ āĻāĻ°. āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨... āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻŽāĻ¨ā§ āĻšāĻ˛ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯ āĻāĻ°ā§āĻ¨ā§ˇ
āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ¸ā§āĻĒāĻ°ā§āĻļ
āĻāĻžāĻ°āĻŖ werf āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻŦāĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻĒāĻžāĻ¤āĻ¤ āĻāĻžāĻ āĻāĻ°ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ (āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ° āĻ¸āĻš), āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¸āĻš āĻĒāĻĄāĻāĻŋ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻžāĻ˛ā§ āĻšāĻ¯āĻŧ, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ /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... āĻ
āĻŦāĻžāĻ āĻšāĻŦā§āĻ¨ āĻ¨āĻž: āĻāĻāĻŋ āĻ āĻŋāĻ āĻ¯ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĒā§āĻ°āĻĨāĻŽ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻ¨āĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋ, āĻ¤āĻŦā§ āĻ¤āĻžāĻ°āĻž āĻ
āĻ¨ā§āĻ¯āĻāĻŋāĻ¤ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻā§āĻā§āĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻāĻĒāĻ¨āĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻŋāĻā§āĻ āĻāĻāĻŋāĻ˛!
āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§, āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻļā§āĻ˛ āĻ¸āĻāĻā§āĻ°āĻžāĻšāĻ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ, āĻāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻāĻāĻžāĻ¨ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻā§āĻ¯āĻŧā§ āĻāĻ°āĻ āĻ¸āĻšāĻ āĻāĻžāĻ āĻšāĻŦā§āĨ¤ āĻāĻŦāĻ āĻāĻŋāĻ¤āĻ°ā§
āĻĻā§āĻ°āĻˇā§āĻāĻŦā§āĻ¯
āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ˛āĻā§āĻ āĻĒāĻĄāĻŧā§āĻ¨:
- ÂĢ
āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻāĻ¸ āĻāĻŦāĻ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸ā§āĻ°āĻž āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ (āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž āĻāĻŦāĻ āĻāĻŋāĻĄāĻŋāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨) "; - ÂĢ
GitLab CI-āĻ āĻāĻžāĻ¸ā§āĻāĻŽ āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻĢā§āĻ˛ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŋāĻĒāĻ¸ "; - ÂĢ
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻāĻā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻāĻ¤ā§āĻĒāĻžāĻĻāĻ¨ā§ āĻŦāĻŋāĻ¤āĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ Âģ.
āĻāĻ¤ā§āĻ¸: www.habr.com