ProHoster > Blog > Rianachd > CI/CD ann an Gnìomhan Github airson pròiseact Flask + Angular
CI/CD ann an Gnìomhan Github airson pròiseact Flask + Angular
San artaigil seo, roinnidh mi m ’eòlas mu bhith a’ stèidheachadh CI / CD a ’cleachdadh Pannal Smachd Plesk agus Gnìomhan Github. An-diugh ionnsaichidh sinn mar a chleachdas tu pròiseact sìmplidh leis an ainm neo-fhillte "Helloworld". Tha e sgrìobhte ann am frèam Flask Python, le luchd-obrach Celery agus aghaidh Angular 8.
Anns a 'chiad phàirt den artaigil, seallaidh sinn ris a' phròiseact againn agus na pàirtean aige. Anns an dàrna fear, nì sinn a-mach mar a chuireas tu Plesk air dòigh agus stàlaich na leudachain agus na pàirtean riatanach (DB, RabbitMQ, Redis, Docker, msaa).
Anns an treas pàirt, nì sinn a-mach mu dheireadh mar a stèidhicheas sinn loidhne-phìoban airson ar pròiseact a chuir gu frithealaiche ann an àrainneachd dev agus prod. Agus an uairsin cuiridh sinn an làrach air bhog air an fhrithealaiche.
Agus tha, dhìochuimhnich mi mi fhìn a thoirt a-steach. Is e m’ ainm Oleg Borzov, tha mi nam leasaiche làn-stack anns an sgioba CRM airson manaidsearan morgaids aig Domclick.
Overview Overview
An toiseach, leig dhuinn sùil a thoirt air dà stòr pròiseict - backend agus aghaidh - agus a dhol thairis air a’ chòd.
Cùl-fhiosrachadh: Flasg + soilire
Airson a’ phàirt chùil, ghabh mi dòrlach a tha mòr-chòrdte am measg luchd-leasachaidh Python: frèam Flask (airson an API) agus Celery (airson an ciudha gnìomh). Tha SQLAchemy air a chleachdadh mar ORM. Tha Alembic air a chleachdadh airson imrich. Airson dearbhadh JSON ann an làmhan - Marshmallow.
В tasgaidh tha faidhle Readme.md ann le tuairisgeul mionaideach air an structar agus stiùireadh airson a’ phròiseact a ruith.
Web Pàirt API gu math sìmplidh, air a dhèanamh suas de 6 pinn:
/ping - gus sgrùdadh a dhèanamh air ruigsinneachd;
làmhan airson clàradh, ùghdarrachadh, dì-cheadachadh agus faighinn neach-cleachdaidh ùghdarraichte;
inneal post-d a chuireas gnìomh anns a’ chiudha Celery.
Pàirt soilire eadhon nas fhasa, chan eil ann ach aon duilgheadas send_mail_task.
docker le dà Dockerfile (base.dockerfile gus ìomhaigh bhunaiteach a tha glè ainneamh a thogail agus Dockerfile airson prìomh cho-chruinneachaidhean);
.env_files - le faidhlichean le caochladairean àrainneachd airson diofar àrainneachdan.
Tha ceithir faidhlichean dèanta docker aig cridhe a’ phròiseict:
docker-compose.local.db.yml gus stòr-dàta ionadail a thogail airson leasachadh;
docker-compose.local.workers.yml airson àrdachadh ionadail den neach-obrach, stòr-dàta, Redis agus RabbitMQ;
docker-compose.test.yml deuchainnean a dhèanamh aig àm cleachdadh;
docker-compose.yml airson cleachdadh.
Agus am pasgan mu dheireadh anns a bheil ùidh againn - .ci-cd. Tha sgriobtaichean shligean ann airson an cleachdadh:
deploy.sh - imrich agus cleachdadh a chuir air bhog. A 'ruith air an fhrithealaiche an dèidh a bhith a' togail agus a 'ruith dheuchainnean ann an Gnìomhan Github;
rollback.sh - cuir air ais soithichean chun dreach roimhe den cho-chruinneachadh;
curl_tg.sh - a’ cur fiosan cleachdadh gu Telegram.
Aghaidh air Angular
Stòr-tasgaidh le aghaidh tòrr nas sìmplidh na Beck. Tha an aghaidh air a dhèanamh suas de thrì duilleagan:
Prìomh dhuilleag le foirm airson post-d a chuir agus putan fàgail.
Duilleag logadh a-steach.
Duilleag clàraidh.
Tha coltas ascetic air a’ phrìomh dhuilleag:
Tha dà fhaidhle aig a' bhonn Dockerfile и docker-compose.yml, a bharrachd air am pasgan eòlach .ci-cd le beagan nas lugha de sgriobtaichean na tha san stòr cùil (sgriobtaichean air an toirt air falbh airson deuchainnean ruith).
A’ tòiseachadh pròiseact ann am Plesk
Feuch an tòisich sinn le bhith a’ stèidheachadh Plesk agus a’ cruthachadh ballrachd airson an làrach-lìn againn.
Stàladh leudachain
Ann am Plesk, feumaidh sinn ceithir leudachadh:
Docker gus inbhe shoithichean a riaghladh agus a thaisbeanadh gu fradharcach ann am pannal rianachd Plesk;
Git gus an ceum cleachdadh air an fhrithealaiche a rèiteachadh;
Firewall gus criathradh trafaic a tha a’ tighinn a-steach a rèiteachadh.
Faodaidh tu an stàladh tro phannal rianachd Plesk anns an roinn Leudachain:
Cha bheachdaich sinn air na roghainnean mionaideach airson leudachadh, nì na roghainnean bunaiteach airson ar n-adhbharan demo.
Cruthaich fo-sgrìobhadh agus làrach
An ath rud, feumaidh sinn ballrachd a chruthachadh airson ar làrach-lìn helloworld.ru agus cuir an subdomain dev.helloworld.ru an sin.
Cruthaich fo-sgrìobhadh airson an àrainn helloworld.ru agus sònraich am facal-faire logadh a-steach airson neach-cleachdaidh an t-siostaim:
Thoir sùil air a’ bhogsa aig bonn na duilleige Dèan tèarainte air an àrainn le Let's Encryptma tha sinn airson HTTPS a stèidheachadh airson na làraich:
An uairsin, san fho-sgrìobhadh seo, cruthaich subdomain dev.helloworld.ru (airson an urrainn dhut teisteanas TLS an-asgaidh a thoirt seachad):
Stàladh co-phàirtean frithealaiche
Tha frithealaiche againn le OS Debian Stretch 9.12 agus pannal smachd air a chuir a-steach Plesk Obsidian 18.0.27.
Feumaidh sinn stàladh agus rèiteachadh airson ar pròiseact:
PostgreSQL (anns a 'chùis againn, bidh aon fhrithealaiche ann le dà stòr-dàta airson àrainneachdan dev agus prod).
RabbitMQ (an aon rud, an aon eisimpleir le diofar vhosts airson àrainneachdan).
Dà eisimpleir Redis (airson àrainneachdan dev agus prod).
Clàr Docker (airson stòradh ionadail de dhealbhan Docker togte).
UI airson clàradh Docker.
PostgreSQL
Tha Plesk mu thràth a’ tighinn le PostgreSQL DBMS, ach chan e an dreach as ùire (aig àm sgrìobhaidh Plesk Obsidian taic Tionndaidhean postgres 8.4-10.8). Tha sinn ag iarraidh an dreach as ùire airson ar tagradh (12.3 aig àm an sgrìobhaidh seo), agus mar sin stàlaidhidh sinn e le làimh.
Tha tòrr stiùireadh mionaideach ann airson Postgres a chuir air Debian air an lìon (eisimpleir), mar sin cha toir mi cunntas mionaideach orra, bheir mi dìreach na h-òrdughan:
Leis gu bheil roghainnean bunaiteach caran meadhanach aig PostgreSQL, feumar an rèiteachadh a cheartachadh. Cuidichidh seo sinn àireamhair: feumaidh tu draibheadh ann am paramadairean an fhrithealaiche agad agus cuir an àite na roghainnean san fhaidhle /etc/postgresql/12/main/postgresql.confris an fheadhainn a thairgsinn. Bu chòir a thoirt fa-near an seo nach e peilearan draoidheachd a th’ ann an àireamhairean mar sin, agus bu chòir am bonn a ghleusadh nas mionaidiche, stèidhichte air do bhathar-cruaidh, tagradh agus iom-fhillteachd na ceiste agad. Ach tha seo gu leòr airson tòiseachadh.
A bharrachd air na roghainnean a tha an àireamhair a’ moladh, bidh sinn cuideachd ag atharrachadh a-steach postgresql.confam port bunaiteach 5432 gu fear eile (san eisimpleir againn - 53983).
Às deidh dhut am faidhle rèiteachaidh atharrachadh, ath-thòisich postgresql-server leis an àithne:
service postgresql restart
Tha sinn air PostgreSQL a chuir a-steach agus a rèiteachadh. A-nis cruthaichidh sinn stòr-dàta, luchd-cleachdaidh airson àrainneachdan dev agus prod, agus bheir sinn còirichean do luchd-cleachdaidh an stòr-dàta a riaghladh:
$ su - postgres
postgres:~$ create database hw_dev_db_name;
CREATE DATABASE
postgres:~$ create user hw_dev_db_user with password 'hw_dev_db_password';
CREATE ROLE
postgres:~$ grant ALL privileges ON database hw_dev_db_name to hw_dev_db_user;
GRANT
postgres:~$ create database hw_prod_db_name;
CREATE DATABASE
postgres:~$ create user hw_prod_db_user with password 'hw_prod_db_password';
CREATE ROLE
postgres:~$ grant ALL privileges ON database hw_prod_db_name to hw_prod_db_user;
GRANT
CoineanachMQ
Gluaisidh sinn air adhart gu bhith a’ stàladh RabbitMQ, broker teachdaireachd airson Celery. Tha e gu math sìmplidh a stàladh air Debian:
A-nis leig leinn am pàirt mu dheireadh airson an tagradh againn a stàladh agus a rèiteachadh - Redis. Thèid a chleachdadh mar chùl-taic airson toraidhean gnìomhan Celery a stòradh.
Togaidh sinn dà shoitheach Docker le Redis airson àrainneachdan dev agus prod a’ cleachdadh an leudachadh Docker airson Plesk.
Thèid sinn gu Plesk, rachaibh chun roinn Leudachain, coimhead airson leudachadh Docker agus stàlaich e (feumaidh sinn dreach an-asgaidh):
Rach don leudachadh stàlaichte, lorg an ìomhaigh tron rannsachadh redis bitnami agus stàlaich an tionndadh as ùire:
Bidh sinn a’ dol a-steach don bhogsa a chaidh a luchdachadh sìos agus ag atharrachadh an rèiteachadh: sònraich am port, am meud RAM as àirde a chaidh a riarachadh, am facal-faire ann an caochladairean na h-àrainneachd, agus cuir suas an tomhas-lìonaidh:
Bidh sinn a’ coileanadh ceumannan 2-3 airson an t-soitheach prod, anns na roghainnean cha bhith sinn ag atharrachadh ach na paramadairean: port, facal-faire, meud RAM agus slighe chun phasgan tomhas-lìonaidh air an fhrithealaiche:
Clàradh Docker
A bharrachd air seirbheisean bunaiteach, bhiodh e math an stòr ìomhaigh Docker agad fhèin a chuir air an fhrithealaiche. Gu fortanach, tha àite an fhrithealaiche a-nis gu math saor (gu cinnteach nas saoire na fo-sgrìobhadh DockerHub), agus tha am pròiseas airson stòr prìobhaideach a stèidheachadh gu math sìmplidh.
Cruthaichidh sinn dà fho-àrainn ann am Plesk anns an fho-sgrìobhadh againn: docker.helloworld.ru agus docker-ui.helloworld.ru, agus cuir air dòigh teisteanasan Let's Encrypt dhaibh.
Cuir am faidhle ris a 'phasgan subdomain docker.helloworld.ru docker-compose.yml le susbaint mar seo:
Agus feumaidh sinn Nginx ath-stiùireadh gu na soithichean againn. Faodar seo a dhèanamh tro Plesk.
Feumar na ceumannan a leanas a dhèanamh airson na subdomains docker.helloworld.ru agus docker-ui.helloworld.ru:
earrann Innealan Dev tha an làrach againn a’ dol gu Riaghailtean Docker Proxy:
Agus cuir riaghailt ri trafaic neach-ionaid a tha a’ tighinn a-steach don ghobhar againn:
Nì sinn cinnteach gun urrainn dhuinn logadh a-steach don ghobhar againn bhon inneal ionadail:
$ docker login docker.helloworld.ru -u hw_docker_admin -p hw_docker_password
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
Bheir sinn sùil cuideachd air gnìomhachd an subdomain docker-ui.helloworld.ru:
Nuair a phutas tu air Dèan brobhsadh air tasgaidhean, seallaidh am brabhsair uinneag ceadachaidh far am feum thu ainm-cleachdaidh agus facal-faire an stòr a chuir a-steach. Às deidh sin, bidh sinn air ar gluasad gu duilleag le liosta de stòran (airson a-nis, bidh e falamh dhut):
A’ fosgladh puirt ann am Balla-teine Plesk
Às deidh dhuinn na pàirtean a chuir a-steach agus a rèiteachadh, feumaidh sinn puirt fhosgladh gus am bi na pàirtean ruigsinneach bho shoithichean Docker agus an lìonra a-muigh.
Chì sinn mar a nì sinn seo a’ cleachdadh an leudachadh Firewall airson Plesk a chuir sinn a-steach na bu thràithe.
Cuiridh sinn riaghailt ris cuideachd a dh’ fhosglas puirt PostgreSQL agus pannalan riaghlaidh RabbitMQ don t-saoghal a-muigh:
Cuir na riaghailtean an gnìomh a’ cleachdadh a’ phutan Apply Changes:
A’ stèidheachadh CI/CD ann an Gnìomhan Github
Leig leinn faighinn sìos chun phàirt as inntinniche - a 'stèidheachadh loidhne-phìoban amalachaidh leantainneach agus a' lìbhrigeadh ar pròiseact don fhrithealaiche.
Bidh an loidhne-phìoban seo air a dhèanamh suas de dhà phàirt:
togail ìomhaigh agus deuchainnean ruith (airson an backend) - air taobh Github;
a’ ruith imrich (airson an deireadh-sheachdain) agus a’ cleachdadh shoithichean - air an fhrithealaiche.
Sgaoileadh gu Plesk
Bruidhnidh sinn ris an dàrna puing an toiseach (oir tha a 'chiad fhear an urra ris).
Rèitichidh sinn am pròiseas cleachdadh a’ cleachdadh an leudachadh Git airson Plesk.
Beachdaich air eisimpleir le àrainneachd Prod airson stòr Backend.
Bidh sinn a’ dol gu ballrachd ar làrach-lìn Helloworld agus a’ dol gu fo-earrann Git:
Cuir a-steach ceangal don stòr Github againn a-steach don raon “Remote Git repository” agus atharraich am pasgan bunaiteach httpdocs gu fear eile (m.e. /httpdocs/hw_back):
Dèan lethbhreac den iuchair phoblach SSH bhon cheum roimhe agus cuir ris tha e ann an roghainnean Github.
Cliog air OK air an sgrion ann an ceum 2, agus às deidh sin thèid ar ath-stiùireadh gu duilleag an stòrais ann am Plesk. A-nis feumaidh sinn an stòr a rèiteachadh gus a bhith air ùrachadh mu gheallaidhean don phrìomh mheur. Gus seo a dhèanamh, rachaibh gu Suidheachaidhean tasgaidh agus sàbhail an luach Webhook URL (bidh feum againn air nas fhaide air adhart nuair a bhios sinn a’ stèidheachadh Gnìomhan Github):
Anns an raon Gnìomhan air an sgrion bhon pharagraf roimhe, cuir a-steach an sgriobt gus an cleachdadh a chuir air bhog:
cd {REPOSITORY_ABSOLUTE_PATH}
.ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID}
far:
{REPOSITORY_ABSOLUTE_PATH} - slighe gu pasgan prod an stòr backend air an fhrithealaiche; {ENV} - àrainneachd (dev / prod), nar cùis prod; {DOCKER_REGISTRY_HOST} - aoigh ar stòr docker {TG_BOT_TOKEN} - tòcan bot teileagram; {TG_CHAT_ID} - ID den chat / seanail airson fiosan a chuir.
Eisimpleir sgriobt:
cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/
.ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
Cuir cleachdaiche bhon fho-sgrìobhadh againn ris a’ bhuidheann Docker (gus an urrainn dhaibh soithichean a riaghladh):
sudo usermod -aG docker helloworld_admin
Tha an àrainneachd leasachaidh airson an stòr backend agus an aghaidh aghaidh air an stèidheachadh san aon dòigh.
Loidhne-phìoban cleachdadh ann an Gnìomhan Github
Gluaisidh sinn air adhart gu bhith a’ stèidheachadh a’ chiad phàirt den loidhne-phìoban CI/CD againn ann an Gnìomhan Github.
Ach mus dèan sinn parsadh air, lìonamaid na caochladairean Dìomhair a dh’ fheumas sinn ann an Github. Gus seo a dhèanamh, rachaibh gu Roghainnean -> Dìomhaireachd:
DOCKER_REGISTRY - aoigheachd ar stòr Docker (docker.helloworld.ru);
DOCKER_LOGIN - log a-steach gu stòr Docker;
DOCKER_PASSWORD - facal-faire air;
DEPLOY_HOST - aoigheachd far a bheil am pannal rianachd Plesk ri fhaighinn (eisimpleir: helloworld.com: 8443 no 123.4.56.78:8443);
DEPLOY_BACK_PROD_TOKEN - comharradh airson a chleachdadh don stòr-reic air an fhrithealaiche (fhuair sinn e ann an Cleachdadh ann am Plesk p. 4);
DEPLOY_BACK_DEV_TOKEN - comharra airson a chuir gu stòr dev air an fhrithealaiche.
Tha am pròiseas cleachdadh sìmplidh agus tha trì prìomh cheumannan ann:
a' togail agus a' foillseachadh na h-ìomhaigh 'nar tigh-tasgaidh ;
ruith deuchainnean ann an soitheach stèidhichte air ìomhaigh a chaidh a thogail às ùr;
cleachdadh don àrainneachd a tha thu ag iarraidh a rèir a’ mheur (dev / master).
phobaill
Am faidhle deploy.yml airson an stòr aghaidh beagan eadar-dhealaichte bho Beck. Chan eil ceum ann le deuchainnean ruith agus bidh e ag atharrachadh ainmean comharran airson an cleachdadh. Feumaidh dìomhaireachdan airson an stòr aghaidh, leis an t-slighe, a bhith air an lìonadh air leth.
Suidheachadh làraich
A’ cur trafaic tro Nginx
Uill, tha sinn air tighinn gu deireadh. Chan eil air fhàgail ach airson neach-ionaid trafaic a-steach is a-mach don ghobhar againn tro Nginx a rèiteachadh. Tha sinn mu thràth air am pròiseas seo a chòmhdach ann an ceum 5 de shuidheachadh Clàr Docker. Bu chòir an aon rud a dhèanamh a-rithist airson na pàirtean cùil is aghaidh ann an àrainneachdan dev agus prod.
Bheir mi seachad seallaidhean-sgrìn de na roghainnean.
Backend
phobaill
Soillearachadh cudromach. Thèid a h-uile URL a chuir chun bhogsa aghaidh, ach a-mhàin an fheadhainn a tha a’ tòiseachadh /api/ - bidh iad air an ceangal ris a’ ghobhar cùil (mar sin anns a 'ghobhar cùil, feumaidh a h-uile neach-làimhseachaidh tòiseachadh le /api/).
Builean
A-nis bu chòir don làrach againn a bhith ri fhaighinn aig helloworld.ru agus dev.helloworld.ru (prod- and dev-environments, fa leth).
Gu h-iomlan, dh'ionnsaich sinn mar a dh'ullaicheas sinn tagradh sìmplidh ann am Flask agus Angular agus stèidhich sinn loidhne-phìoban ann an Gnìomhan Github gus a sgaoileadh gu frithealaiche a 'ruith Plesk.
Bidh mi a’ dùblachadh na ceanglaichean gu na stòran leis a’ chòd: cùl-raon, ceann aghaidh.