áá»áœááºá¯ááºááá¯á· áá¯ááºáá±á¬ááºáá±áá±á¬ á¡áœááºááá¯ááºáž áá®áá®ááᯠá¡ááŒá±á¬ááºážá¡áᬠá¡ááŒá¶ááŒá¯áá»áẠá
áá
áºááẠááááºáá¬ážáá±á¬ á
á®ážááœá¬ážáá±áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ ááŒá
áºááŒá®áž áááºážááá¬á¡á áá°ááá¯ááºááœáá·áºááŸáá·áº ááœáá·áºáááºáž á¡áááºážá¡ááŒá
Ạá¡á
áááºá¡ááá¯ááºážáá»á¬áž á á¡á
áááºá¡ááá¯ááºážáá»á¬ážá
áœá¬ á¡á
á¯á¡áá±áž áá
áºáᯠááŒá
áºáááºá á€áá±á¬ááºážáá«ážááᯠáá±ážáá¬ážáááŒááºážá áááºááœááºáá»ááºááŸá¬ áá»áœááºá¯ááºááá¯á·á áá¯ááºáááºážá
ááºáá»á¬ážá ááá·áºáááºáá¬ážáá±á¬ á¡áá»áááºá¡ááœááºáž áááºááá·áºááŒááºážáááŸááá² á¡ááá·áºáááºááŸááºáá¬ážáá±á¬ site áá
áºáá¯á¡ááœáẠdocker swarm clustering system ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá¡á¬áž áá±á¬áºááŒáááºááŒá
áºáááºá ááá·áºá¡á¬áá¯á¶ááá¯áááºááŒááá·áº áá¬ááºááŒá±á¬ááºážááᯠááŸá
áºááá¯ááºážááœá²áá¬ážáááºá áááá¡ááá¯ááºážááẠdocker swarm ááá¯á¡áá¯á¶ážáááŒá¯áá® CI/CD ááá¯áá±á¬áºááŒááŒá®áž áá¯áááá¡ááá¯ááºážááẠáááºážáá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá¯ááºáááºážá
ááºááᯠáá±á¬áºááŒáááºá áááááá¯ááºážááᯠá
áááºááááºá
á¬ážáá²á·áá°ááœá±á áá¯áááááá¯ááºážááᯠáá±ážáááºážá
áœá¬ áááºááœá¬ážááá¯ááºáá«áááºá
ÑаÑÑÑáá«
áá±ážááœá¬áá±á¬ááŸá áºááœáẠCI/CD áá¯ááºáááºážá ááºááᯠáááºááá¯ááºááá»áŸ ááŒááºááŒááºáááºááŸááºááẠááá¯á¡ááºáá«áááºá á¡ááŒá±á¡áá±áá»á¬ážáá²ááŸáá áºáá¯ááŸá¬ Docker ááá¯á¡áá¯á¶ážááŒá¯áááºááá¯ááºáá«á ááŒáá·áºáá»ááºááŸá¯á¡ááœáẠá¡ááŒá±á¬ááºážáááºážáá»á¬ážá áœá¬á¡ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá®ááœááºáá²á·áááºá
- áá¯ááºáá¯ááºááŸá¯ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážá ááá¯ááá¯áá¯á¶ááŒááºá áááºáá»áááŒá®áž áááºááŒáááºáá±á¬áááºáááºááŸá¯á¡ááœáẠ(ááááºáá±á¬á· virtualization ááᯠá¡áá¯á¶ážáááŒá¯ááẠááá¯á¡ááºáá»ááºááŒá áºáááº)
- ááááºáááºáž developer áá»á¬ážááẠDocker ááŸáá·áº ááœá²ááá¯ááºáá»ááºáá²á·ááŒáá« (áá°ážáááºážáá±á¬áºáááºážá ááá¯ááá¯á·áááºááŒá áºáááº)
- R&D á á®áá¶ááá·áºááœá²ááŸá¯á á¡áá°áá«áááá¯ááºáᬠááá·áºááœááºážá ááºážá á¬ážááŸá¯áá»á¬ážá¡áá
MVP á¡ááœáẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠá stack ááŸáá·áº á¡áá®ážá ááºáá¯á¶áž áááŠážááá¯á¡ááºáá»ááºáá»á¬ážááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž áááºááŒáá¬ážáá«áááºá
- Debian áá«ááŸááá±á¬ Intel® X4 áá¬áᬠ5650 áᯠ(áá±á¬ááºááẠá¡á áœááºážáááºá ááºáá áºáᯠá¡ááŒáá·áºá¡á áá®ááœááºáá¬ážáááº)
- ááá¯ááºááá¯áẠá áááºááŒáá¯ááºá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠC++á Python3 ááœáẠáá±á¬áºáá±á¬ááºáááºá
- á¡ááá ááŒááºáá¡ááœá²á·á¡á ááºážáá¯á¶ážáááááá¬áá»á¬áž- Kafkaá Clickhouseá Airflowá Redisá Grafanaá Postgresqlá Mysqlá ...
- á¡ááŸá¬ážááŸá¬ááŒááºážááŸáá·áº ááœáŸááºááŒááºážá¡ááœáẠáá®ážááŒá¬ážá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºáá±á¬ááºááŒááºážááŸáá·áº á ááºážáááºááŒááºážá¡ááœáẠááá¯ááºááá¯ááºážáá»á¬áž
áááŠážá¡ááá·áºááœáẠááá¯ááºááœááºááŒá±ááŸááºážááẠááá¯á¡ááºáá±á¬ ááááá¯á¶ážáá±ážááœááºážáá áºáá¯ááŸá¬ á áááºááŒáá¯ááºá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºááá·áºáááºáááºážáá»áẠ(CI/CD) ááœáẠáá¬ážááŸááááºáááºážá
áá»áœááºá¯ááºááá¯á·ááẠááŒááºáá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠá áá áºááá» ááá·áºááœááºážááŒá®áž áááºážááá¯á·ááᯠá áá áºááá» á¡ááºááááºáá¯ááºááẠáá¯á¶ážááŒááºáá²á·áááºá C++ ááá¯á·ááá¯áẠPython ááœáẠáá®ááœááºáá¬ážáá±á¬ á áááºááŒáá¯ááºá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááᯠáááºážáááºážáá»á¬ážá áœá¬ááŒáá·áº á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áááºážááá¯á·ááœáẠá¥ááá¬- á áá áºáááºáá±á·áá»áºáá»á¬áž áááºáá®ážááŒááºážá áááºáá±á¬ááºáá¬ážáá±á¬ áá¯á¶áá»á¬ážá ááá¯ááŸá±á¬ááºáá¬ááá¯á· ááá¯á·ááŒá®ážáá±á¬áẠáááºážááá¯á·ááᯠáá¬áá¬áá»á¬ážááœáẠááá·áºááœááºážááŒááºážá á¡áááºááá á¡ááŒá±á¬ááºážááŒáá»ááºááŒáá·áºá á¡ááŒá¬ážáááºážáááºážááᯠááœá±ážáá»ááºáá²á·áááº- CI ááᯠá¡áá¯á¶ážááŒá¯á á¡ááá®áá±ážááŸááºáž á á®á á¥áºááá¯ááºáá±á¬ ááá¯ááºáá»á¬ážááᯠá á¯á ááºážáá¬ážááŒááºážá ááá±á¬áá»ááºáááºáááºážáá»ááºááᯠáááºáá®ážáá¬ážááŒá®ážá py module áá»á¬ážááᯠrequire.txt á០ááá·áºááœááºážáá¬ážááŒá®ážá á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠconfigsá scripts áá»á¬ážááŸáá·áº á¡áá° áá±ážááá¯á·áá¬ážáá«áááºá áá¬áá¬áá»á¬ážááá¯á· á¡ááá®áá±ážááŸááºážáááºáááºážáá»ááºááŸáá·áº ááœá²áá±ážáááºá ááá¯á·áá±á¬ááºá á¡ááºááá®áá±ážááŸááºážáá»á¬ážááᯠá á®áá¶ááá·áºááœá²áá°á¡ááœáá·áºá¡áá±ážááá«áá² virtual á¡áá¯á¶ážááŒá¯áá°á¡ááŒá Ạá áááºáá±á¬ááºááœááºáá«áááºá
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
ááá¯á¡ááºáá±á¬ á áá áºáááºáá±á·áá»áºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá·áºááœááºážááŒá®áž ááŸáá·áº á¡ááŒá¬ážáááºáááºáá»á¬ážááᯠááŒá¯áá¯ááºááŒá®ážááá·áº áááºáááºááŒááºážááŸáá·áº á ááºážáááºááŒááºážááá¯á·ááᯠáááºážáááá¯ááºááá¯ááºáá¯ááºáá¯á¶áá±á«áºááœáẠáá¯ááºáá±á¬ááºááŒá±á¬ááºáž áááááŒá¯ááá·áºáááºá
á¡áá¯ááºáá»á¬ážááœáẠဠscripts áá áºáá¯á á®ááẠáá°á·áááºážáá°á·áááºááŒáá·áº á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬áºáááºážá áááºážááá¯á·á¡ááŒá±á¬ááºážááᯠáá»áœááºáá±á¬áº áááŒá±á¬áá«á áááºážááá¯á· áá áºáá¯áá»ááºážá á®á áá±á¬áºááŒáá»ááºááẠá¡áá»áááºáá»á¬ážá áœá¬ áá°ááááºááŒá áºááŒá®áž áááºážááẠáá±á¬ááºážáá«ážá áááºááœááºáá»ááºááá¯ááºáá±á ááŒáá·áºáá»ááºááŒááºáž á¡ááá·áºááœáẠáá±á«áºááá¯ááŸá¯ script áá»á¬áž á á¡á á®á¡á á¥áº áá«áááºááẠáá°áá±á¬ á¡áá»áẠááᯠááá·áº á¡á¬áá¯á¶á áá¯áẠá á±ááẠááŒá áºáá«ááẠá
- createconfig.py - áá±á¬ááºáááºááœá²á¡áá¯á¶ážááŒá¯ááŸá¯á¡ááœáẠáááºáááºážáá»ááºá¡áá»áá¯ážáá»áá¯ážááŸá á¡á áááºá¡ááá¯ááºážáááºáááºáá»á¬ážááŸáá·áºá¡áá° settings.ini ááá¯ááºááᯠáááºáá®ážááẠ(Preproductioná Productioná Testingá ...)
- install_venv.sh - áá®ážááŒá¬ážáááºážááŒá±á¬ááºážáá áºáá¯ááŸá py á¡á áááºá¡ááá¯ááºážáá»á¬ážá¡ááœáẠvirtual áááºáááºážáá»ááºááᯠáááºáá®ážááŒá®áž áááºážááᯠá¡áá±ážááááºážáá¬áá¬áá»á¬ážááá¯á· áá°ážáá°áááºá
- ááŒááºáááº_init.d.py â ááá°áá¬áá¯á¶á á¶ááá¯á¡ááŒá±áá¶á á¡á áááºá¡ááá¯ááºážá¡ááœáẠstart-stop scripts áá»á¬ážááá¯ááŒááºáááºáááºá
- deploy.py - á¡á áááºá¡ááá¯ááºážá¡áá áºáá»á¬ážááᯠááŒáá¯ááœá²á á±ááŒá®áž ááŒááºáááºá áááºáááºá
á¡áá»áááºáá¯ááºááœá¬ážáááºá áá¬ááºá ááºá¡ááá·áºááᯠááŒáá¯áááºáá¯ááºáá¯ááºááŒááºážááŸáá·áº áá¯ááºáá¯ááºááŸá¯ááŒáá·áº á¡á á¬ážááá¯ážáá²á·áááºá áá±á¬ááºáááºááŒáá·áºááŒá°ážááŸá¯áá áºáᯠ(CentOS) ááœáẠáá¯ááºáá¯ááºá¡ááœáẠáá¶á·ááá¯ážááŸá¯ áááºáá±á¬ááºážááá·áºáá¬ážáááºá ááá¯ááá¯á¡á¬ážáá±á¬ááºážáá±á¬ áá¯ááºááá¯ááºážááá¯ááºáá¬áá¬áᬠá áá¯ááŸáá·áº á¡áá¯á¡áá±á¬áẠáá áºáá«áááºááá¯á·ááᯠááá·áºááœááºážáá²á·áááºá ááá¯á·á¡ááŒáẠdeveloper ááŸáá·áº testers áá»á¬ážá¡ááœáẠáááºážááá¯á·á áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážááᯠáá¯ááºáááºážá¡ááŒá±á¡áá±ááŸáá·áº ááá¯áá®ážá ááºáá±á¬ áááºáááºážáá»ááºááœáẠá ááºážáááºááẠááá¯áááá¯ááááºáá²áá¬áááºá áá®á¡áá»áááºááŸá¬ áá°áááŸááá²áá²á· áááŒá áºááá¯ááºáá°ážááá¯áᬠáááá¬áááºááŸá¬ážáá¬áá²á·áááº..á
á¡ááá¯ááºáž á
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·áá¡á
á¯á¡ááœá²á·ááẠDockerfiles ááŸáá±á¬áºááŒáá¬ážááŒááºážáááŸááá±á¬ áá®ážááŒá¬ážá¡á
áááºá¡ááá¯ááºážá¡áá»áá¯á·á á¡á¶á·ááááºážá
áá
áºáá
áºáá¯ááŒá
áºáááºá áá±áá¯áá»á¡á¬ážááŒáá·áº áá®ážááŒá¬ážáááºáááºážáá»ááºáá
áºáá¯ááá¯á· ááŒáá·áºáá»ááºáááºá¡ááœááºáᬠáááºážááᯠááẠconfigure áá¯ááºááá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááá¬áááºááŸá¬ á¡á
á¯á¡áá±ážááᯠá¡ááŒáá¯á
ááºážáááºááŒááºážáááŒá¯áá® áááºážááᯠá
ááºážáááºáááºá¡ááœáẠá¡ááá·áºáááºááŸááºáá¬ážáá±á¬ áááºáááºážáá»ááºáá
áºáá¯ááá¯á· ááŒáá·áºáá»ááºáááºááŒá
áºáááºá
áá®á¡áá¯áá®á¡áá áá áºááŒáá¯ááºáááºáááºáž áá¯ááºáá±á¬ááºáá±ááá·áº á¡á á¯á¡áá±ážáá»á¬ážá áœá¬ ááŸáááá¯ááºáááº- ááŒá®ážá á®ážáá¯áá®ážáá«áž á¡ááŒá±á¡áá±ááœáẠáá¯ááºáá±á¬ááºá áá¬áá»á¬áž ááá¯á·ááá¯áẠááŒá®ážá á®ážáá¯áá®ážáá«áž ááŒá áºáá±áááºá áá»áœááºá¯ááºááá¯á·á¡áá±ááŒáá·áº áá¬áá¬áá»á¬ážá á áœááºážáá±á¬ááºáááºáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áá¬áá¬áá áºáá¯á á®ááœáẠá¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±áá«áááºá á¡ááá·áºáááºááŸááºáá¬ážáá±á¬ á¡á á¯á¡áá±ážáá áºáá¯á á®ááᯠáá®ážááŒá¬ážááœá²áá¬ážááá«ááẠ(ááááºáááºážáá»á¬ážá áááºážááœáŸááºáá»á¬áž á áááºááŒáá·áº) ááœáẠáááºážáá¯á¶áááŸáááá«áááºá
áá»áœááºá¯ááºááá¯á·á áááºááá¯ážá¡ááŸááá¯á¶áž á¡áááºážá¡ááŒá áºááŸá¬ áá»áœááºá¯ááºááá¯á·áá¡áá»áááºááŒá áºááŒá®áž áá»áœááºá¯ááºááá¯á·ááœáẠáá»á¬ážá áœá¬ááá«áááºáá«á
ááá¯ááá¯ááŒááºáááºá áœá¬á áááºáááºá¡ááœáẠáááºážáááá¯ážááŸááºážááŸá¯ááŸáá·áº áááºáá±á¬ááºáá¯á¶ááŒá±á¬ááºážááœááºááŸá¯áá»á¬ážááŒá±á¬áá·áº Docker Swarm ááᯠááœá±ážáá»ááºáá²á·áááºá áá»áœááºá¯ááºááá¯á· ááááá¯á¶ážáá¯ááºáááºááŸá¬ áááºáá±áá»á¬áá áºáŠážááŸáá·áº á¡áá±ážááááºážáá¬áá¬áá»á¬ážááŸá node á¡áá»á¬ážá¡ááŒá¬ážááᯠáááºáá®ážááŒááºážááŒá áºáááº-
$ 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
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠCI á០node áá»á¬ážáá¡áá±ážááááºážááá¯ááºáá»á¬ážááᯠGitlab-CI ááŸáá·áº Swarm node áá»á¬ážááᯠáá»áááºáááºáá¬ážáááº- áááºááŸááºáá»á¬ážááá·áºááœááºážááŒááºážá áá»áŸáá¯á·ááŸááºááŒá±á¬ááºážááœá²ááŸá¯áá»á¬ážááᯠáááºááŸááºááŒááºážááŸáá·áº ááááºážáá»á¯ááºáá¬áá¬áá±á«áºááœáẠDocker áááºáá±á¬ááºááŸá¯ááᯠá
áá
áºááá·áºááœááºážááŒááºážá áá®áá
áºáá¯
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠ.gitlab-ci .yml ááá¯á· stack áááºáá®ážááŒááºážááŸáá·áº áá»ááºá á®ážááŒááºážá¡áá¯ááºáá»á¬ážááᯠáá±á«ááºážááá·áºáá«áááºá
áá±á¬ááºááẠá¡áá¯ááºá¡áááºážáááºááᯠ.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) ááᯠManual action ááá¯á¡ááºáá±á¬ Pipelines ááá¯á· ááá·áºáá¬ážááŒá±á¬ááºáž áááºááœá±á·ááá¯ááºáá«áááºá
á¡á
á¯á¡á
ááºážá¡áááºááẠáá¬áááœá²á¡áááºááŸáá·áº ááá¯ááºáá®ááŒá®áž á€áá°ážááŒá¬ážááŸá¯ááŸá¬ áá¯á¶áá±á¬ááºááá·áºáááºá stack ááŸá áááºáá±á¬ááºááŸá¯áá»á¬ážááẠáá°ážááŒá¬ážáá±á¬ ip ááááºá
á¬áá»á¬ážá ááááºáááºážáá»á¬ážá áááºážááœáŸááºáá»á¬áž á
áááºááá¯á·ááᯠáááºáá¶áááŸáááẠá áá®ážááŒá¬ážááœá²áá¬ážáááºááŒá
áºáá±á¬áºáááºáž stack á០stack á០áá°áá®ááẠ(configuration file ááẠstacks á¡á¬ážáá¯á¶ážá¡ááœáẠáá°áá®áá±á¬ááŒá±á¬áá·áº) - áá»áœááºá¯ááºááá¯á· ááá¯áá»ááºáá±á¬á¡áá¬á áá»áœááºá¯ááºááá¯á·ááẠstack (cluster) ááá¯á¡áá¯á¶ážááŒá¯á ááŒáá·áºáá»ááºáááºá 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) ááŒáá·áº áá»áááºáááºáá¬ážááŒá®áž áá áºáá¯ááŸáá·áºáá áºáᯠáááá¯ááºáááºááᯠá€áá±áá¬ááœáẠáááºááœá±á·ááŒááºááá¯ááºáá«áááºá
á áá áºá¡á áááºá¡ááá¯ááºážáá»á¬áž (redisá mysql áá±á«áºá¡ááŒá±áá¶á) á áááºááŒáá¯ááºá¡á áááºá¡ááá¯ááºážáá»á¬ážá áá±áá°áá»á¡á á¯á¡áá±ážá០ááœá²ááœááºááẠ(á¡á á®á¡á á¥áºáá»á¬ážááŸáá·áº á áááºááŒáá¯ááºáá»á¬ážááᯠáááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážáá¬ážáááº)á áá»áœááºá¯ááºááá¯á·á á¡á á¯á¡áá±ážá ááŒáá·áºáá»ááºááŸá¯á¡ááá·áºááẠáá»áœááºá¯ááºááá¯á·á ááŒá®ážáá¬ážáá±á¬ááœá²á·á ááºážáá¯á¶áá áºáá¯ááá¯á· CMD ááŒááºáááºážáá¯á¶áá±á«áºááŒá®áž áá±áá¯áá»á¡á¬ážááŒáá·áºá á¡ááá¯ááºáž I ááœááºáá±á¬áºááŒáá¬ážáá±á¬ ááŒáá·áºáá»ááºáá»áá¬ážááŸá¯ááŸáá·áº áááºááœá±á·á¡á¬ážááŒáá·áº áááœá¬ááŒá¬ážáá«á ááœá²ááŒá¬ážááŸá¯áá»á¬ážááᯠáá®ážáá±á¬ááºážááá¯ážááŒáá«áááº-
- git clone... - á¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºáá±á¬ááá¯ááºáá»á¬ážááᯠááá°áá« (createconfig.pyá install_venv.sh á áááºááŒáá·áº)
- áá±á«ááºááœá²... && áá áºááŒááº... - áááºáá±á¬ááºáá¬ážáá±á¬ artifacts ááá¯áá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áá áºááœáá·áºáá« (á á¯á ááºážáá¬ážáá±á¬ á¡áá¯á¶ážá¡áá±á¬ááºáá»á¬áž)
áá±á¬áºááŒááá¬ážáá±á¬ ááŒá¿áá¬áá áºáá¯áᬠááŸááá±ážáááº- áááºá¡ááºáá¬áá±á·á áºáá«ááŸááá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážá ááá±á¬ááºáá¬áá»á¬ážá០áááºáá±á¬ááºááááá«á áá»áœááºá¯ááºááá¯á·ááẠreverse proxy ááᯠá¡áá¯á¶ážááŒá¯á á€ááŒá¿áá¬ááᯠááŒá±ááŸááºážááá¯ááºáá«áááºá
.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 ááá¯ááœááºážáá¶áá«á nginx ááá¯á· url ááá¯ááœáŸááºážáááº-
10.50.173.106 staging_BRANCH-1831_cluster.dev
ááá¯á·ááŒá±á¬áá·áºá áá®ážááŒá¬ážá¡ááá·áºáááºááŸááºáá¬ážáá±á¬á¡á
á¯á¡áá±ážáá»á¬ážááᯠááŒáá·áºáá»ááºá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž developer áá»á¬ážááẠáááºážááá¯á·ááá¯ááºáááºážáá¬áááºáá»á¬ážááá¯á
á
áºáá±ážááẠáá¯á¶áá±á¬ááºáá±á¬á¡áá±á¡ááœááºááŒáá·áº ááᯠáááºážááá¯á·ááᯠáá¯ááºáá±á¬ááºááá¯ááºááŒá®ááŒá
áºáááºá
á¡áá¬áááºá á®áá¶ááááºáž:
- áá»áœááºá¯ááºááá¯á·áá¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááŒá Ạááœá²ááŒá¬ážáá«á
- Dockerfile áá áºáá¯á á®á¡ááœááºááŸááááºá
- á¡á á¯á¡áá±ážááœáẠáááºáá±á¬ááºááŸá¯áááºážáá±á¬ áá¯ááºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬ááºááŸá¬ááœá±áá«á
- á¡áááºáá¯á¶á á¶ááŒáá·áº node ááá¯áááºááŸááºáá« (áá±á¬ááºážáá«ážááœááºáá«ááŸáááá·áºá¡ááá¯ááºáž id ááá¯áá¯á¶ážááá·áºá¡á á¬áž)
- á¡á á¯á¡á ááºáž áá»ááºááœá¬ážááŒá±á¬ááºáž á á áºáá±ážáá»ááºáá áºáᯠááá·áºáá«á
- ...
á¡ááœáẠá¡áá°ážáá»á±ážáá°ážáááºáá«áááº
source: www.habr.com