แแแแแแ แแแแแ แแแแขแแแขแแก แกแแ แแแแแแแแแชแแ แกแแกแขแแแ, แ แแแแแแแช แฉแแแ แแแฃแจแแแแ, แแ แแก แแแฎแฃแ แฃแแ แแแแแ แชแแฃแแ แแแแแแแแ แแแ แแ แขแแฅแแแแฃแ แแ แแ แแก แกแแแฃแแ แแแแก แแ แฆแแ แแแแแก แแแแแแแแแขแแแแก แแ แแแแแแแแแแแแแขแแแแ แแแแกแขแแ แ. แแ แกแขแแขแแแก แแแฌแแ แแก แแแแแแแ แแฆแฌแแ แแก แแแแแ แแ แฏแแฃแคแแก แแแแกแขแแ แฃแแ แกแแกแขแแแแก แแแแแ แแแ แแแแแแแก แแแแแแแกแแแแก แฉแแแแ แแ แแชแแกแแแแก แแแแแแแแแ แกแแแฃแจแแ แแ แแชแแกแแก แจแแแฆแฃแแฃแ แแ แแจแ แจแแคแแ แฎแแแแก แแแ แแจแ. แแฅแแแแก แงแฃแ แแแฆแแแแก แฌแแ แแแแแแแแแ แแแ แแขแแแ แแ แแแฌแแแแ แแงแแคแ. แแแ แแแแ แแแฌแแแ แแฆแฌแแ แก CI/CD-แก แแแแแ แกแแ แแแก แแแแแงแแแแแแแแ, แฎแแแ แแแแ แแจแ แแฆแฌแแ แแแแ แแแกแ แแแแฎแแ แชแแแแแแแก แแ แแชแแกแ. แแแกแแช แแ แแแแขแแ แแกแแแก แแแ แแแแ แแแฌแแแแก แแแแฎแแ, แจแแฃแซแแแ แฃแกแแคแ แแฎแแ แแแแแแแแแก แแแแ แแแ.
I แแแฌแแแ
แฏแแ แแแแแ แจแแ แแฃแ, แจแแ แแฃแ แฌแแแก, แแฃแชแแแแแแแ แแงแ CI / CD แแ แแชแแกแแก แ แแช แจแแแซแแแแ แกแฌแ แแคแแ แแแงแแแแแ. แแ แ-แแ แแ แแแ แแแ แแงแ Docker-แแก แแ แแแแแงแแแแแ แแแแแแแแแแกแแแแก แจแแแฃแจแแแแแฃแแ แแแแแแแแแขแแแ แ แแแแแแแแ แแแแแแแก แแแแ:
- แแแแแแแแแขแแแแก แฃแคแ แ แกแแแแแแ แแ แกแขแแแแแฃแ แ แแฃแจแแแแแกแแแแก แฌแแ แแแแแแจแ (แแก แแ แแก, แคแแฅแขแแแ แแแแ, แแแ แขแฃแแแแแแชแแแก แแ แแแแแงแแแแแแก แแแแฎแแแแ)
- แฌแแแงแแแ แแแแแแแแแ แแแก แแ แกแฃแ แแแ Docker-แแแ แแฃแจแแแแ (แฃแชแแแฃแ แแ, แแแแ แแ แแกแ แแงแ)
- R&D แแแแแฏแแแแขแแก แแแแแแแแแฃแ แกแแคแฃแซแแแแแแ
แแแคแ แแกแขแ แฃแฅแขแฃแ แ, แแแกแขแ แแ MVP-แแก แกแแแแ แแฃแแ แกแแฌแงแแกแ แแแแฎแแแแแแ แฌแแ แแแแแแแแแ แแงแ แจแแแแแแแแแ แแ:
- 4 Intelยฎ X5650 แกแแ แแแ แ Debian-แแ (แแแแแ แแ แแ แซแแแแ แ แแแแฅแแแ แกแ แฃแแแ แแ แแก แแแแแแแแ แแแฃแแ)
- แกแแแฃแแแ แ แแแ แกแแแแแฃแ แ แแแแแแแแแขแแแแก แจแแแฃแจแแแแแ แฎแแ แชแแแแแแแ C ++, Python3-แจแ
- แแแแแงแแแแแฃแแ แซแแ แแแแแ แแแกแแแ แแฎแแ แแก แแแกแขแ แฃแแแแขแแแ: Kafka, Clickhouse, Airflow, Redis, Grafana, Postgresql, Mysql,โฆ
- แแแแกแแแแแแแ แแแแแแแแแขแแแแก แแจแแแแแแแแแกแ แแ แขแแกแขแแ แแแแกแแแแก แชแแแแ แแแแแ แแแแกแ แแ แแแแแจแแแแแกแแแแก
แแ แ-แแ แแ แแแ แแแแ แแแแฎแแ, แ แแแแแแช แฃแแแ แแแแแฎแแแแแแแแก แกแแฌแงแแก แแขแแแแ, แแ แแก แแก, แแฃ แ แแแแ แแแแแแแแแแ แกแแแแแ แแแแแแแแแขแแแ แแแแแกแแแแ แแแ แแแแจแ (CI / CD).
แฉแแแ แแแแแแฌแงแแแขแแ แแแกแแแ แแฎแแ แแก แแแแแแแแแขแแแแก แกแแกแขแแแฃแ แแ แแแงแแแแแ แแ แแแแ แกแแกแขแแแฃแ แ แแแแแฎแแแแ. C++ แแ Python-แจแ แจแแแฃแจแแแแแฃแแ แแแ แกแแแแแฃแ แ แแแแแแแชแแแแ แจแแแซแแแแ แแแแแแแกแแแก แ แแแแแแแแ แแแแ. แแแ แจแแ แแก, แแแแแแแแแ: แกแแกแขแแแฃแ แ แแแแแขแแแแก แจแแฅแแแ, แฉแแจแแแแแฃแแ แกแฃแ แแแแแแก แกแแชแแแจแ แแแแแแแแ แแ แจแแแแแ แกแแ แแแ แแแแ แแแกแขแแแแชแแ. แแแฃแ แแแแแแแ แแแแแแแก แแแแ, แแ แฉแแฃแแ แแฅแแ แกแฎแแ แแแแแแ, แแแ แซแแ: CI-แก แแแแแงแแแแแแ, แแแแแแแชแแแก แจแแกแ แฃแแแแแแ แคแแแแแแแก แจแแแแแแ, แแแ แขแฃแแแฃแ แ แแ แแแฅแขแแก แแแ แแแแก แจแแฅแแแ, py แแแแฃแแแแแก แแแกแขแแแแชแแ แแแแแกแขแแแแ แแแฃแแแ แแแแฎแแแแแแ.txt-แแแ แแ แงแแแแ แแก แแ แขแแคแแฅแขแ แแแแแแแแแ แแแแคแแแฃแ แแแแแ, แกแแ แแแขแแแแแ แแ แกแแ แแแ แแแแก แแแแแฎแแแแ แแแแแแแชแแแก แแแ แแแ. แจแแแแแแ, แแแแแแแชแแแแ แแฎแกแแแแ แ แแแแ แช แแแ แขแฃแแแฃแ แ แแแแฎแแแ แแแแแ แแแแแแแกแขแ แแขแแ แแก แฃแคแแแแแแแก แแแ แแจแ.
Gitlab-CI แแแ แฉแแแก CI/CD แกแแกแขแแแแ. แจแแแแแแ แแแฆแแแฃแแ แแแแกแแแแแ แแกแ แแแแแแงแฃแ แแแแแ:
แกแขแ แฃแฅแขแฃแ แฃแแแ, gitlab-ci.yml แแกแ แแแแแแงแฃแ แแแแแ
---
variables:
# ะผะธะฝะธะผะฐะปัะฝะฐั ะฒะตััะธั ะฆะะฃ ะฝะฐ ัะตัะฒะตัะฐั
, ะณะดะต ัะฐะทะฒะพัะฐัะธะฒะฐะตััั ะบะปะฐััะตั
CMAKE_CPUTYPE: "westmere"
DEBIAN: "MYREGISTRY:5000/debian:latest"
before_script:
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh && echo -e "Host *ntStrictHostKeyChecking nonn" > ~/.ssh/config
stages:
- build
- testing
- deploy
debug.debian:
stage: build
image: $DEBIAN
script:
- cd builds/release && ./build.sh
paths:
- bin/
- builds/release/bin/
when: always
release.debian:
stage: build
image: $DEBIAN
script:
- cd builds/release && ./build.sh
paths:
- bin/
- builds/release/bin/
when: always
## testing stage
tests.codestyle:
stage: testing
image: $DEBIAN
dependencies:
- release.debian
script:
- /bin/bash run_tests.sh -t codestyle -b "${CI_COMMIT_REF_NAME}_codestyle"
tests.debug.debian:
stage: testing
image: $DEBIAN
dependencies:
- debug.debian
script:
- /bin/bash run_tests.sh -e codestyle/test_pylint.py -b "${CI_COMMIT_REF_NAME}_debian_debug"
artifacts:
paths:
- run_tests/username/
when: always
expire_in: 1 week
tests.release.debian:
stage: testing
image: $DEBIAN
dependencies:
- release.debian
script:
- /bin/bash run_tests.sh -e codestyle/test_pylint.py -b "${CI_COMMIT_REF_NAME}_debian_release"
artifacts:
paths:
- run_tests/username/
when: always
expire_in: 1 week
## staging stage
deploy_staging:
stage: deploy
environment: staging
image: $DEBIAN
dependencies:
- release.debian
script:
- cd scripts/deploy/ &&
python3 createconfig.py -s $CI_ENVIRONMENT_NAME &&
/bin/bash install_venv.sh -d -r ../../requirements.txt &&
python3 prepare_init.d.py &&
python3 deploy.py -s $CI_ENVIRONMENT_NAME
when: manual
แแฆแกแแแแจแแแแแ, แ แแ แแฌแงแแแ แแ แขแแกแขแแ แแแ แขแแ แแแแ แกแแแฃแแแ แแแแฏแแ, แกแแแแช แฃแแแ แแแแแกแขแแแแ แแแฃแแแ แงแแแแ แกแแญแแ แ แกแแกแขแแแแก แแแแแขแ แแ แแแแแแแ แกแฎแแ แแแ แแแแขแ แแแ.
แแแ แแแแแ แกแแแฃแจแแแแแจแ แแแแแแฃแแ แแก แกแแ แแแขแ แแแแแกแแแฃแ แแ แกแแแแขแแ แแกแแ, แแแแ แแ แ แ แแฅแแ แฃแแแ แแแแแ แแ แแแกแแฃแแ แแ, แแแแแแฃแแ แแแแแแแแก แแฆแฌแแ แแก แแแแ แแ แ แแแกแญแแ แแแแ แแ แแก แแ แแ แแก แกแขแแขแแแก แแแแแแ. แแ แแฎแแแแ แแฅแแแแก แงแฃแ แแแฆแแแแก แแแแแแแฎแแแแแ แแ แคแแฅแขแแ, แ แแ แแแแแแแแแแก แแขแแแ แจแแแแแแ แแแแแซแแฎแแแแก แกแแ แแแขแแแแก แแแแแแแแแแ แแแแกแแแ:
- createconfig.py - แฅแแแแก settings.ini แคแแแแก แแแแแแแแแขแแก แแแ แแแแขแ แแแแ แกแฎแแแแแกแฎแแ แแแ แแแแจแ แจแแแแแแแ แแแแแแแกแแแแกแแแแก (แฌแแแแกแฌแแ แ แฌแแ แแแแแ, แฌแแ แแแแแ, แขแแกแขแแ แแแ, ...)
- install_venv.sh - แฅแแแแก แแแ แขแฃแแแฃแ แแแ แแแแก py แแแแแแแแแขแแแแกแแแแก แแแแแ แแขแฃแ แแแ แแฅแขแแ แแแจแ แแ แแแแแแ แแแก แแแก แแแกแขแแแชแแฃแ แกแแ แแแ แแแแ
- แแแแแแแแแ_init.d.py โ แแแแแแแแก start-stop แกแแ แแแขแแแก แแแแแแแแแขแแกแแแแก แจแแแแแแแ แแแงแ แแแแแแ
- deploy.py - แแจแแแแ แแ แแแแแแฎแแแแก แแฎแแ แแแแแแแแแขแแแก
แฒแ แ แแแแแแ. แแแแแแแก แแขแแแ แจแแแชแแแแ แฌแแแแกแฌแแ แ แฌแแ แแแแแแแ แแ แฌแแ แแแแแแ. แแแแแขแแแฃแแแ แแ แแแฃแฅแขแแก แแฎแแ แแแญแแ แ แกแฎแแ แแแกแขแ แแแฃแชแแแแ (CentOS). แแแแแขแแแฃแแแ แแแแแ 5 แซแแแแ แ แคแแแแแฃแ แ แกแแ แแแ แ แแ แแแแฃแแ แแแ แขแฃแแแฃแ แ. แแ แแแแแแแแแ แแแแกแแแแก แแ แขแแกแขแแ แแแแกแแแแก แฃแคแ แ แแ แฃแคแ แ แ แแฃแแ แแแฎแแ แแแแ แแแแชแแแแแแก แขแแกแขแแ แแแ แกแแแฃแจแแ แแแแแแแ แแแแแกแแแ แแแข-แแแแแแแแ แแแแฎแแแแแฃแ แแแ แแแแจแ. แแ แแ แแก แแแแ แแแ, แ แแ แแแก แแแ แแจแ แจแแฃแซแแแแแแ แแงแ ...
แแแฌแแแ II
แแกแ แ แแ, แฉแแแแ แแแแกแขแแ แ แแ แแก แ แแแแแแแแ แแแแฃแแ แชแแแแแฃแแ แแแแแแแแแขแแก แกแแแแฎแแแแ แแแ แกแแกแขแแแ, แ แแแแแแแช แแ แแ แแก แแฆแฌแแ แแแ Dockerfiles-แแก แแแแ . แแฅแแแ แจแแแแซแแแแ แแแแแแแคแแแฃแ แแ แแ แแฎแแแแ แแแแแแแ แแแแแ แแขแฃแ แแแ แแแแจแ แแแแแแแแแแกแแแแก. แฉแแแแ แแแแชแแแแ แแแแแแแแแกแแ แแแแกแขแแ แ แแแแแแฃแ แแแ แแแแจแ, แ แแแ แแแแแแชแแแแ แแแ แฌแแแแกแฌแแ แแแแแจแแแแแแแ แขแแกแขแแ แแแแแแ.
แแแแ แแฃแแแ, แจแแแซแแแแ แแ แกแแแแแแแก แ แแแแแแแแ แแแแกแขแแ แ แแ แแแ แแฃแแแ: แแแแแแ, แ แแแแแแแช แแ แแก แแแแแแแแ แแแกแ แฃแแแแฃแ แแแแแแแ แแแแแจแ แแ แแแกแ แฃแแแแแแแ. แฉแแแแก แฎแแแ แแ แกแแแฃแแ แกแแ แแแ แแแแก แจแแกแแซแแแแแแแแแ แกแแจแฃแแแแแแก แแแแซแแแแก แแแแฃแจแแแ แ แแแแแแแแ แแแแกแขแแ แ แแแแแแฃแ แกแแ แแแ แแ. แแแแแแฃแแ แแแแแแแก แแแแกแขแแ แ แฃแแแ แแงแแก แแแแแแ แแแฃแแ (แแ แฃแแแ แแงแแก แแแแแ แแแ แขแแแจแ, แแแ แแฅแขแแ แแแจแ แแ แ.แจ.).
แฉแแแแ แงแแแแแแ แซแแแ แคแแกแ แ แแกแฃแ แกแ แแ แแก แฉแแแแ แแ แ แแ แแแแ แ แแ แแแฅแแแแ.
แฃแคแ แ แกแฌแ แแคแ แแแฌแงแแแแกแแแแก, แฉแแแ แแแแ แฉแแแ Docker Swarm แแแกแ แกแแแแ แขแแแแกแ แแ แแ แฅแแขแแฅแขแฃแ แฃแแ แแแฅแแแแแแแก แแแแ. แแแ แแแแ แ แแช แแแแแแแแแ แแงแ แแแแแฏแแ แแก แแ แ แแแแแแแแ แแแแแซแแก แจแแฅแแแ แแแกแขแแแชแแฃแ แกแแ แแแ แแแแ:
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
kilqc94pi2upzvabttikrfr5d nop-test-1 Ready Active 19.03.2
jilwe56pl2zvabupryuosdj78 nop-test-2 Ready Active 19.03.2
j5a4yz1kr2xke6b1ohoqlnbq5 * nop-test-3 Ready Active Leader 19.03.2
แจแแแแแแ, แจแแฅแแแแแ แฅแกแแแ:
$ docker network create --driver overlay --subnet 10.10.10.0/24 nw_swarm
แจแแแแแแ, แฉแแแ แแแแแแแแจแแ แแ Gitlab-CI แแ Swarm แแแแแซแแแ CI-แแแ แแแแแซแแแแก แแแกแขแแแชแแฃแ แ แแแ แแแแก แแแแแกแแแ แแกแแ: แกแแ แแแคแแแแขแแแแก แแแงแแแแแ, แกแแแแฃแแแ แชแแแแแแแแก แแแงแแแแแ แแ Docker แกแแ แแแกแแก แแแงแแแแแ แกแแแแแขแ แแแ แกแแ แแแ แแ. แแก แแ แแ
แจแแแแแ แแแแแแแขแแ แกแขแแแแก แจแแฅแแแแกแ แแ แแแแแแแฃแ แแแแก แกแแแฃแจแแแแแ .gitlab-ci .yml-แก.
แแแแแ แ แแแแแแแแ แแแแแแกแแ แแแแแแขแ .gitlab-ci .yml
## staging stage
deploy_staging:
stage: testing
before_script:
- echo "override global 'before_script'"
image: "REGISTRY:5000/docker:latest"
environment: staging
dependencies: []
variables:
DOCKER_CERT_PATH: "/certs"
DOCKER_HOST: tcp://10.50.173.107:2376
DOCKER_TLS_VERIFY: 1
CI_BIN_DEPENDENCIES_JOB: "release.centos.7"
script:
- mkdir -p $DOCKER_CERT_PATH
- echo "$TLSCACERT" > $DOCKER_CERT_PATH/ca.pem
- echo "$TLSCERT" > $DOCKER_CERT_PATH/cert.pem
- echo "$TLSKEY" > $DOCKER_CERT_PATH/key.pem
- docker stack deploy -c docker-compose.yml ${CI_ENVIRONMENT_NAME}_${CI_COMMIT_REF_NAME} --with-registry-auth
- rm -rf $DOCKER_CERT_PATH
when: manual
## stop staging stage
stop_staging:
stage: testing
before_script:
- echo "override global 'before_script'"
image: "REGISTRY:5000/docker:latest"
environment: staging
dependencies: []
variables:
DOCKER_CERT_PATH: "/certs"
DOCKER_HOST: tcp://10.50.173.107:2376
DOCKER_TLS_VERIFY: 1
script:
- mkdir -p $DOCKER_CERT_PATH
- echo "$TLSCACERT" > $DOCKER_CERT_PATH/ca.pem
- echo "$TLSCERT" > $DOCKER_CERT_PATH/cert.pem
- echo "$TLSKEY" > $DOCKER_CERT_PATH/key.pem
- docker stack rm ${CI_ENVIRONMENT_NAME}_${CI_COMMIT_REF_NAME}
# TODO: need check that stopped
when: manual
แแแแแ แแแชแแแฃแแ แแแแแก แคแ แแแแแแขแแแแ แฎแแแแแ, แ แแ แแ แ แฆแแแแแ (deploy_staging, stop_staging) แแแแแแขแ Pipelines-แก, แ แแแแแแแช แกแแญแแ แแแแแ แฎแแแแ แแแฅแแแแแแแก.
แกแขแแแแก แกแแฎแแแ แแแแฎแแแแ แคแแแแแแแก แกแแฎแแแก แแ แแก แฃแแแแแแฃแ แแแ แกแแแแแ แแกแ แฃแแแ แแงแแก. แแแกแขแแจแ แแ แกแแแฃแแ แกแแ แแแกแแแ แแฆแแแแ แฃแแแแแแฃแ ip แแแกแแแแ แแแแก แแ แแแ แขแแแก, แแแ แแฅแขแแ แแแแก แแ แ.แจ. แแฅแแแแ แแแแแแ แแแฃแแ, แแแแ แแ แแแแแ แแแกแขแแแแ แกแขแแแแแแ (แ แแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแ แงแแแแ แกแขแแแแกแแแแก แแ แแแแแ แแ) - แ แแช แแแแแแแแ. แฉแแแ แแแงแแแแแ แกแขแแแแก (แแแแกแขแแ แก) แแแแแงแแแแแแ docker-compose.yml, แ แแแแแแช แแฆแฌแแ แก แฉแแแแก แแแแกแขแแ แก.
docker-compose.yml
---
version: '3'
services:
userprop:
image: redis:alpine
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
celery_bcd:
image: redis:alpine
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
schedulerdb:
image: mariadb:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: schedulerdb
MYSQL_USER: ****
MYSQL_PASSWORD: ****
command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--explicit_defaults_for_timestamp=1']
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
celerydb:
image: mariadb:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: celerydb
MYSQL_USER: ****
MYSQL_PASSWORD: ****
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
cluster:
image: $CENTOS7
environment:
- CENTOS
- CI_ENVIRONMENT_NAME
- CI_API_V4_URL
- CI_REPOSITORY_URL
- CI_PROJECT_ID
- CI_PROJECT_URL
- CI_PROJECT_PATH
- CI_PROJECT_NAME
- CI_COMMIT_REF_NAME
- CI_BIN_DEPENDENCIES_JOB
command: >
sudo -u myusername -H /bin/bash -c ". /etc/profile &&
mkdir -p /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME &&
cd /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME &&
git clone -b $CI_COMMIT_REF_NAME $CI_REPOSITORY_URL . &&
curl $CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=$CI_BIN_DEPENDENCIES_JOB -o artifacts.zip &&
unzip artifacts.zip ;
cd /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME/scripts/deploy/ &&
python3 createconfig.py -s $CI_ENVIRONMENT_NAME &&
/bin/bash install_venv.sh -d -r ../../requirements.txt &&
python3 prepare_init.d.py &&
python3 deploy.py -s $CI_ENVIRONMENT_NAME"
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
tty: true
stdin_open: true
networks:
nw_swarm:
networks:
nw_swarm:
external: true
แแฅ แฎแแแแแ, แ แแ แแแแแแแแแขแแแ แแแแแแจแแ แแแฃแแแ แแ แแ แฅแกแแแแ (nw_swarm) แแ แฎแแแแแกแแฌแแแแแแ แแ แแแแแแแแกแแแแก.
แกแแกแขแแแแก แแแแแแแแแขแแแ (แ แแแแก, mysql-แแ แแแคแฃแซแแแแฃแแ) แแแแแงแแคแแแแ แกแแแแแ แแแแแแแแแขแแแแก แกแแแ แแ แแฃแแแแแ (แแแแแแแจแ แแ แฉแแแฃแแแแ แแงแแคแ แกแแ แแแกแแแแ). แฉแแแแ แแแแกแขแแ แแก แแแแแแแแแแก แแขแแแ แฐแแแแก CMD-แแก แแแแแชแแแแก แฉแแแแก แแ แ แแแ แแแแคแแแฃแ แแ แแแฃแ แกแฃแ แแแแ แแ, แแแแแแแ, แแ แแฅแขแแแฃแแแ แแ แแแแกแฎแแแแแแแ I แแแฌแแแจแ แแฆแฌแแ แแแ แแแแแแแแแแกแแแ. แแ แฎแแแก แแฃแกแแแ แแแแกแฎแแแแแแแแก:
- แแแขแแก แแแแแ... - แแแแฆแแ แแแแกแแแแแกแแแแแ แกแแญแแ แ แคแแแแแแ (createconfig.py, install_venv.sh แแ แ.แจ.)
- แแแฎแแแแ... && แแแฎแกแแ... - แฉแแแแขแแแ แแแ แแ แแแฎแกแแแแ build artifacts (แจแแแแแแแแ แฃแขแแแแขแแแ)
แแ แกแแแแแก แแฎแแแแ แแ แแ แแ แแแแแแ, แ แแแแแแช แฏแแ แแแแแ แแ แแ แแก แแฆแฌแแ แแแ: แแแแแแแแแขแแแ, แ แแแแแแกแแช แแฅแแ แแแ แแแขแแ แคแแแกแ, แแแฃแฌแแแแแแแแ แแแแแแแแแ แแแแก แแ แแฃแแแ แแแแแแ. แฉแแแ แแ แแ แแแแแแแก แแฎแกแแแ แกแแแแ แแกแแแ แ แแ แแฅแกแแก แแแแแงแแแแแแ, แแแแแแ แแ:
.gitlab-ci.yml-แจแ, แแแแกแขแแ แฃแแ แกแขแแแแก แแแแแแแแแแก แจแแแแแ, แฉแแแ แแแแแขแแแ แแแแแแกแแ แแก แแแแแแแแแแก แฎแแแก (แ แแแแแแช แฉแแแแแแก แแ แแก แแฎแแแแ แแแแแแฎแแแแก แแแก แแแแคแแแฃแ แแชแแแก (แฅแแแแก แแฎแแ nginx แแแแคแแแฃแ แแชแแแก แคแแแแแแก แจแแแแแแแก แแแฎแแแแแ: /etc/nginx/conf. d/${CI_COMMIT_REF_NAME}.conf) - แแฎแแแแ docker-compose-nginx.yml แแแแ)
- docker stack deploy -c docker-compose-nginx.yml ${CI_ENVIRONMENT_NAME} --with-registry-auth
docker-compose-nginx.yml
---
version: '3'
services:
nginx:
image: nginx:latest
environment:
CI_COMMIT_REF_NAME: ${CI_COMMIT_REF_NAME}
NGINX_CONFIG: |-
server {
listen 8080;
server_name staging_${CI_COMMIT_REF_NAME}_cluster.dev;
location / {
proxy_pass http://staging_${CI_COMMIT_REF_NAME}_cluster:8080;
}
}
server {
listen 5555;
server_name staging_${CI_COMMIT_REF_NAME}_cluster.dev;
location / {
proxy_pass http://staging_${CI_COMMIT_REF_NAME}_cluster:5555;
}
}
volumes:
- /tmp/staging/nginx:/etc/nginx/conf.d
command:
/bin/bash -c "echo -e "$$NGINX_CONFIG" > /etc/nginx/conf.d/${CI_COMMIT_REF_NAME}.conf;
nginx -g "daemon off;";
/etc/init.d/nginx reload"
ports:
- 8080:8080
- 5555:5555
- 3000:3000
- 443:443
- 80:80
deploy:
replicas: 1
placement:
constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
restart_policy:
condition: none
networks:
nw_swarm:
networks:
nw_swarm:
external: true
แแแแแแแแแ แฃแ แแแแแแฃแขแแ แแแแ แแแแแแฎแแแ /etc/hosts; แแแฌแแ แแ url nginx-แแ:
10.50.173.106 staging_BRANCH-1831_cluster.dev
แแกแ แ แแ, แแแแฎแแ แชแแแแแ แแแแแแ แแแฃแแ แแแแแแแก แแแแกแขแแ แแแแก แแแแแแแแแ แแ แแแแแแแแแ แแแก แแฎแแ แจแแฃแซแแแแ แแแแ แแแจแแแแ แแแแแกแแแแ แ แ แแแแแแแแแ, แ แแแแแแช แกแแแแแ แแกแแ แแแแ แแแแชแแแแแแก แจแแกแแแแฌแแแแแแ.
แฒแแแแแแแก แแแแแแแ:
- แแแแแงแแแแ แฉแแแแ แแแแแแแแแขแแแ, แ แแแแ แช แกแแ แแแกแแแ
- แแฅแแก แแแแแแฃแแ Dockerfile
- แแแขแแแแขแฃแ แแ แแฆแแแแฉแแแแก แแแแแแแแ แแแขแแแ แแฃแแ แแแแแซแแแ แแแกแขแแจแ
- แแแฃแแแแแ แแแแแซแแแ แกแแฎแแแแก แแแแฃแจแแก แแแฎแแแแแ (แแแแ แ แกแขแแขแแแจแ ID-แแก แแแแแงแแแแแแ)
- แแแแแแขแแ แจแแแแฌแแแแ, แ แแ แแแกแขแ แแแแแแแฃแ แแแฃแแแ
- ...
แแแแกแแแฃแแ แแแฃแแ แแแแแแแ
แฌแงแแ แ: www.habr.com