ืื ืึธื ืืืื ืืืืืขื ืืื ืืึทืื ืจืขืงืึธืืขื ืืึทืฆืืข ืกืืกืืขื ืืืึธืก ืืืจ ืึทืจืืขืื ืืืืฃ ืืื ืึท ืคึฟืึทืจืืึทืื ืืขืฉืขืคื ืึทื ืืืืืงืืื ื ืืื ืืื ืืขืงื ืืงืื ืึท ืืืืื-ืงืึธืืคึผืึธื ืขื ื ืงื ืืื ืคืื ืคึผืจืึทืคึผืจืืืึทืืขืจื ืืื ืึธืคึฟื ืืงืืจ ืงืึทืืคึผืึธืื ืึทื ืฅ. ืืขืจ ืฆืื ืคืื ืฉืจืืืื ืืขื ืึทืจืืืงื ืืื ืฆื ืืึทืฉืจืืึทืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื ืืึธืงืงืขืจ ืกืืืึธืจื ืงืืึทืกืืขืจืื ื ืกืืกืืขื ืคึฟืึทืจ ืึท ืกืืึทืืื ื ืคึผืืึทืืคืึธืจืืข, ืึธื ืืืกืจืึทืคึผืืื ื ืื ืืขืืจืื ืืขื ืืืึธืจืงืคืืึธืื ืคืื ืืื ืืืขืจ ืคึผืจืึทืกืขืกืึทื ืืื ืืขืจ ืืืืืืขื ืฆืืื ืื ืึธืื. ืื ืืขืจืฆืืืืื ื ืืขืจืืื ืื ืฆื ืืืื ืืคืืขืจืงืืึทืืงืืึทื ืืื ืฆืขืืืืื ืืื ืฆืืืื ืืืืื. ืืขืจ ืขืจืฉืืขืจ ืืืื ืืืฉืจืืืื ืกื / ืกื ืืืืืขืจ ื ืืฆื ืืึธืงืขืจ ืกืืืึธืจื, ืืื ืืขืจ ืฆืืืืืืขืจ ืืืื ืืืฉืจืืืื ืืขื ืคึผืจืึธืฆืขืก ืคืื ืืืคึผืืึทืืขื ืื ื ืขืก. ืื ืืืืก ืืขื ืขื ื ืืฉื ืืื ืืขืจืขืกืืจื ืืื ืืืืขื ืขื ืืขื ืขืจืฉืืขืจ ืืืื ืงืขื ืขื ืืขืฉืึธืืขื ืืืื ืฆื ืื ืจืืข.
ะงะฐััั ืืื
ืึทืืึธื, ืขืก ืืื ืืขืืืขื ืึท ื ืืื ืฆื ืฉืืขืื ืึทืจืืืฃ ืึท ืกื / ืกื ืคึผืจืึธืฆืขืก ืืื ืืขืฉืืืื ื ืืื ืืขืืืขื. ืืืื ืขืจ ืคืื ืื ืืืืื ืืื ืืขื ืืื ื ืืฉื ืฆื ื ืืฆื ืืึธืงืขืจ ืคึฟืึทืจ ืืืคึผืืืืืึทื ื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืขื ืขื ืืขืืืขืืึธืคึผืขื ืคึฟืึทืจ ืขืืืขืืข ืกืืืืช:
- ืคึฟืึทืจ ืืขืจ ืคืึทืจืืึธืืืขื ืืื ืกืืึทืืื ืึธืคึผืขืจืึทืฆืืข ืคืื โโืงืึทืืคึผืึธืื ืึทื ืฅ ืืื ืคึผืจืึธืืืงืฆืืข (ื"ื, ืืื ืขืกืึทื ืก, ืื ืคืึธืืขืจืื ื ื ืืฉื ืฆื ื ืืฆื ืืืืจืืืึทืืืืึทืืืึธื)
- ืืืืื ื ืืขืืืขืืึธืคึผืขืจืก ืืึธืื ื ืืฉื ืืืขืื ืฆื ืึทืจืืขืื ืืื ืืึธืงืขืจ (ืืึธืื ืข, ืึธืืขืจ ืืึธืก ืืื ืืื ืขืก ืืื ืืขืืืขื)
- ืคึฟืึทืจ ืืืืขืืฉืข ืกืืืืช ืคืื ืจ & ืื ืคืึทืจืืืึทืืืื ื
ืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ, ืึธื ืืืืื ืืื ืืขืจื ืขื ืืขืจื ืขืจืฉื ืจืขืงืืืืจืขืืขื ืฅ ืคึฟืึทืจ ืื MVP ืืขื ืขื ืืื ืืืื:
- 4 Intelยฎ X5650 ืกืขืจืืืขืจืก ืืื ืืขืืืึทื (ืืืื ืืขืจ ืฉืืึทืจืง ืืึทืฉืื ืืึธืจ ืคึฟืึทืจ ืึทื ืืืืืงืืื ื)
- ืึทื ืืืืืงืืื ื ืคืื ืืืื ืืืืืขื ืข ืื ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืื ืืืจืืืขืงืึธืื ืืื C ++, Python3
- ืืืืคึผื 3rdparty ืืืฉืืจืื ืืขื ืืฆื: Kafka, Clickhouse, Airflow, Redis, Grafana, Postgresql, Mysql, ...
- ืคึผืืืคึผืืืื ื ืคึฟืึทืจ ืื ืื ืืื ืืขืกืืื ื ืงืึทืืคึผืึธืื ืึทื ืฅ ืกืขืคึผืขืจืึทืืื ืคึฟืึทืจ ืืืืึทื ืืื ืืขืืืื ื
ืืืื ืขืจ ืคืื ืื ืขืจืฉืืข ืคึฟืจืืื ืืืึธืก ืืึทืจืฃ ืืืื ืจืืืึทืืืื ืืื ืืขืจ ืขืจืฉื ืืื ืข ืืื ืืื ืื ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืืขื ืืืื ืืืคึผืืืื ืืื ืงืืื ืกืืืืืืข (ืกื / ืกื).
ืืืจ ืืึทืฉืืึธืกื ืฆื ืื ืกืืึทืืืจื ืืจืื-ืคึผืึทืจืืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืกืืกืืขืืืง ืืื ืืขืจืืืึทื ืืืงื ืืื ืกืืกืืขืืืง. ืื ืื ืึทืคึผืืึทืงืืืฉืึทื ื ืืขืืืขืืึธืคึผืขื ืืื C ++ ืึธืืขืจ ืคึผืืืืึธื ืงืขื ืขื ืืืื ืืืคึผืืืื ืืื ืขืืืขืืข ืืืขืื. ืฆืืืืฉื ืืื, ืคึฟืึทืจ ืืืึทืฉืคึผืื: ืงืจืืืืืื ื ืกืืกืืขื ืคึผืึทืงืึทืืืฉืึทื, ืฉืืงื ืืื ืฆื ืื ืจืืคึผืึทืืึทืืึธืจื ืคืื ืืขืืืืื ืืืืืขืจ ืืื ืืืืขืจ ืกืึทืืกืึทืงืืืึทื ื ืื ืกืืึทืืืจืื ื ืืืืฃ ืกืขืจืืืขืจืก. ืคึฟืึทืจ ืึทื ืฉืืื ืืืืืึทืงืึทื ื ืกืืื, ืื ืื ืืขืจ ืืืคึฟื ืืื ืืืืกืืขืจืืืืืื, ื ืืืืื: ื ืืฆื CI, ืึทืคึผืืึทืงืืืฉืึทื ืขืงืกืขืงืืืึทืืืข ืืขืงืขืก ืืขื ืขื ืงืึทืืคึผืืืื, ืึท ืืืืจืืืึทื ืคึผืจืืืขืงื ืกืืืืืืข ืืื ืืืฉืืคื, py ืืึทืืืฉืืื ืคึฟืื ืจืขืงืืืืจืขืืขื ืฅ.ืืงืกื ืืขื ืขื ืืื ืกืืึทืืืจื, ืืื ืึทืืข ืื ืึทืจืืึทืคืึทืงืฅ ืืขื ืขื ืืขืฉืืงื ืฆืืืืืขื ืืื ืงืึธื ืคืืืก, ืกืงืจืืคึผืก ืืื ืื ืึทืงืึทืืคึผืึทื ืืื ื ืึทืคึผืืึทืงืืืฉืึทื ืกืืืืืืข ืฆื ืื ืกืขืจืืืขืจืก. ืืขืจื ืึธื, ืึทืคึผืืึทืงืืืฉืึทื ื ืืขื ืขื ืืึธื ืืฉื ืคึฟืื ืึท ืืืืจืืืึทื ืืึทื ืืฆืขืจ ืึธื ืึทืืืื ืืกืืจืึทืืึธืจ ืจืขืื.
Gitlab-CI ืืื ืืืืกืืขืจืืืืืื ืืื ืื ืกื / ืกื ืกืืกืืขื. ืื ืจืืืึทืืืื ื ืจืขืจื - ืืื ืืข ืืขืงืืงื ืขืคึผืขืก ืืื ืืึธืก:
ืกืืจืึทืงืืฉืขืจืึทืื, 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 - ืงืจืืืืฅ ืึท ืกืขืืืื ืืก.ืื ื ืืขืงืข ืืื ืกืขืืืื ืืก ืคึฟืึทืจ ืงืึทืืคึผืึธืื ืึทื ืฅ ืืื ืคืึทืจืฉืืืขื ืข ืื ืืืืืจืึทื ืืึทื ืฅ ืคึฟืึทืจ ืกืึทืืกืึทืงืืืึทื ื ืืืคึผืืืืืึทื ื (ืคึผืจืขืคึผืจืึธืืืงืฆืืข, ืคึผืจืึธืืืงืฆืืข, ืืขืกืืื ื, ...)
- install_venv.sh - ืงืจืืืืฅ ืึท ืืืืจืืืึทื ืกืืืืืืข ืคึฟืึทืจ ืคึผื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืื ืึท ืกืคึผืขืฆืืคืืฉ ืืืขืืืืืึทืืขืจ ืืื ืงืึทืคึผืื ืขืก ืฆื ืืืืึทื ืกืขืจืืืขืจืก
- prepare_init.d.py - ืคึผืจืืคึผืขืจื ืกืงืจืืคึผืก ืคึฟืึทืจ ืึธื ืืืื-ืืึทืืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืืืืจื ืืืืฃ ืื ืืืกืืขืจ
- deploy.py - ืืืคึผืืืืื ืืื ืจืืกืืึทืจื ื ืืึท ืงืึทืืคึผืึธืื ืึทื ืฅ
ืฆืืื ืืื ืืืจืืืขืืื ืืขื. ืื ืกืืึทืืื ื ืืื ืข ืืื ืจืืคึผืืืืกื ืืืจื ืคึผืจืขืคึผืจืึธืืืงืฆืืข ืืื ืคึผืจืึธืืืงืฆืืข. ืกืืคึผืคึผืึธืจื ืคึฟืึทืจ ืืขื ืคึผืจืึธืืืงื ืืื ืฆืืืขืืืืื ืืืืฃ ืึท ืืขืจ ืคืึทืจืฉืคึผืจืืืืื ื (CentOS). ื ืึธื 5 ืฉืืึทืจืง ืืฉืืืืช ืกืขืจืืืขืจืก ืืื ืึท ืืืฅ ืืืืจืืืขื ืืขื ืขื ืฆืืืขืืขืื. ืืื ืขืก ืืื ืืขืืืืจื ืื ืงืจืืกืื ืืื ืฉืืืขืจ ืคึฟืึทืจ ืืขืืืขืืึธืคึผืขืจืก ืืื ืืขืกืืขืจืก ืฆื ืคึผืจืืืืจื ืืืืขืจ ืืึทืกืงืก ืืื ืึท ืกืืืืืืข ืืขืจ ืึธืืขืจ ืืืืื ืืงืขืจ ื ืึธืขื ื ืฆื ืื ืึทืจืืขื ืฉืืึทื. ืืื ืืขืจ ืฆืฒึทื ืืื ืงืืึธืจ ืืขืืืึธืจื, ืึทื ืึธื ืืื ืืื ืืืืืขืืืขื ืฆื ืืึธื...
ืืืื ืื
ืึทืืื, ืืื ืืืขืจ ืงื ืืื ืืื ืึท ืกืคึผืขืงืืึทืงืืึทืืขืจ ืกืืกืืขื ืคืื ืึท ืคึผืึธืจ ืคืื ืืืฅ ืืืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืืึธืก ืืขื ืขื ื ืืฉื ืืืกืงืจืืืื ืืืจื 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: ืื ืกืืึธืืื ื ืกืขืจืืืคืืงืึทืฅ, ืืึทืฉืืขืืืงื ืกืื ืืืขืจืืึทืืึทืื ืืื ืืืื ืืึทืฉืืขืืืงื ืื ืืึธืงืงืขืจ ืืื ืกื ืืืืฃ ืื ืงืึธื ืืจืึธื ืกืขืจืืืขืจ. ืืขื ืืืื ืขืจ
ืืืืึทืืขืจ, ืืืจ ืฆืืืขืืขืื ืืืฉืึธืืก ืคึฟืึทืจ ืงืจืืืืืื ื ืืื ืืืกืืจืืืื ื ืื ืึธื ืืืืื ืืื .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
ืคึฟืื ืื ืืืืื ืงืึธื ืคืจืึทืืืขื ื ืขืก ืืื ืงืืึธืจ ืึทื ืฆืืืื ืงื ืขืคึผืืขื ืืขื ืขื ืฆืืืขืืขืื ืฆื ืคึผืืืคึผืืืื ื (ืืืคึผืืื_ืกืืึทืืื ื, ืกืืึธืคึผ_ืกืืึทืืื ื) ืืืึธืก ืืึทืจืคื ืืึทื ืืึทื ืงืึทืืฃ.
ืืขืจ ืึธื ืืืืื ื ืึธืืขื ืฉืืืขืืขืืขื ืื ืฆืืืืึทื ื ืึธืืขื ืืื ืื ืืืืื ืืจืืืงืืื ืืึธื ืืืื ืืขื ืื. ืกืขืจืืืืกืขืก ืืื ืืขื ืึธื ืืืืื ืืึทืงืืืขื ืืื ืฆืืง IP ืึทืืจืขืกืขืก ืืื ืคึผืึธืจืฅ, ืืืืจืขืงืืขืจืื, ืขืืง. ืืืขื ืืืื ืืคืืขืืื ืืขืจื, ืึธืืขืจ ืื ืืขืืืข ืคืื โโืึธื ืืืืื ืฆื ืึธื ืืืืื (ืืื ื ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืขืงืข ืืื ืื ืืขืืืข ืคึฟืึทืจ ืึทืืข ืกืืึทืงืก) - ืืึธืก ืืื ืืืึธืก ืืืจ ืืขืืืืื. ืืืจ ืฆืขืืืืงืืขื ืืขื ืึธื ืืืืื (ืงื ืืื) ื ืืฆื ืืึธืงืงืขืจ-ืงืึธืืคึผืึธืกืข.ืืื, ืืืืก ืืืฉืจืืืื ืืื ืืืขืจ ืงื ืืื.
ืืึธืงืงืขืจ-ืงืึธืืคึผืึธืกืข.ืืื
---
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) ืืื ืืขื ืขื ืฆืืืจืืืืขื ืฆื ืืขืืขืจ ืื ืืขืจืขืจ.
ืกืืกืืขื ืงืึทืืคึผืึธืื ืึทื ืฅ (ืืืืืจื ืืืืฃ ืจืขืืืก, ืืืกืงื) ืืขื ืขื ืืคืืขืฉืืืื ืคืื ืื ืึทืืืขืืืื ืข ืืขืงื ืคืื ืื ืื ืงืึทืืคึผืึธืื ืึทื ืฅ (ืืื ืคึผืืึทื ื, ืื ืื ืงืึทืืคึผืึธืื ืึทื ืฅ ืืขื ืขื ืืืื ืฆืขืืืืื ืืื ืืึทืืื ืื ืืก). ืื ืืืคึผืืืืืึทื ื ืืื ืข ืคืื โโืืื ืืืขืจ ืงื ืืื ืงืืงื ืืื ืืจืึทื ืกืคืขืจืื ื CMD ืฆื ืืื ืืืขืจ ืืืื ืืจืืืก ืงืึทื ืคืืืืขืจื ืืืื ืืื, ืืื ืึทืืืขืืืื, ืืื ืคึผืจืึทืงืืึทืงืื ื ืื ืึทื ืืขืจืฉ ืคืื ืื ืืืคึผืืืืืึทื ื ืืืกืงืจืืืื ืืื ืืืื I. ืืื ืืืขื ืื ืืขืจืฉืืจืืึทืื ืื ืืืคืขืจืึทื ืกืื:
- ืืื ืงืืึธืื ... - ืืืจ ืืึทืงืืืขื ืื ืืขืงืขืก ื ืืืืืง ืฆื ืืืจืืคืืจื ืื ืืืคึผืืืืืึทื ื (createconfig.py, install_venv.sh, ืขืืง.)
- ืงืขืจื ... && ืึธืคึผืืจืึธืื ... - ืืจืืคืงืืคืืข ืืื ืึทื ืืืคึผ ืื ืืืืขื ืึทืจืืึทืคืึทืงืฅ (ืงืึธืืคึผืืืื ืืืืืืึทืืื)
ืขืก ืืื ืืืืื ืืืื ื ืึธื ืึทื ืืืกืงืจืืืื ืคึผืจืึธืืืขื: ืงืึทืืคึผืึธืื ืึทื ืฅ ืืืึธืก ืืึธืื ืึท ืืืขื ืฆืืืื ื ืืขื ืขื ื ืืฉื ืฆืืืจืืืืขื ืคึฟืื ืื ืืขืืืขืืึธืคึผืขืจืก ' ืืจืึทืืืขืจื. ืืืจ ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื ื ืืฆื ืคืึทืจืงืขืจื ืคึผืจืึทืงืกื, ืึทืืื:
ืืื .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 ืคึฟืึทืจ ืืขืืขืจ
- ืืืืืึธืืึทืืืฉ ืืขืืขืงื ืืืืื ืืงืขืจ ืืึธืืืื ื ืึธืืื ืืื ืืขื ืึธื ืืืืื
- ืกืคึผืขืฆืืคืืฆืืจื ื ืึธืืื ื ืืฆื ืึท ื ืึธืืขื ืืืกืืขืจ (ืืื ืืื ื ืืฆื ืฉืืึทื ืืื ืืื ืืขื ืึทืจืืืงื)
- ืืืื ืึท ืืฉืขืง ืึทื ืืขืจ ืึธื ืืืืื ืืื ืืจืืึฟ
- ...
ืกืคึผืขืฆืืขืืข ืืึทื ืงืขื ืคึฟืึทืจ
ืืงืืจ: www.habr.com