Recent am întâmpinat o provocare de a implementa o aplicație web Python Flask pe Heroku. Codul aplicației a fost găzduit în GitLab.

Heroku acceptă implementarea unei aplicații din GitHub, Dropbox împreună cu git-ul obișnuit Heroku. Trecuse destul de mult timp de când am folosit Heroku. Mă întrebam dacă pot implementa cod direct din depozitul meu GitLab în loc să folosesc oricare dintre sursele menționate mai sus.

Nu am putut găsi nicio informație sau documentație despre implementarea aplicațiilor găzduite într-un depozit GitLab în Heroku. Am navigat puțin pe GitLab și s-a dovedit că, în afară de a ajuta la testarea și construirea proiectului dvs., GitLab CI vă poate ajuta implementa vă aplicați la infrastructura de găzduire. Acum eram intrigat.

Înainte de a analiza modul în care am implementat aplicația, aș dori să explic avantajele utilizării GitLab sau GitHub atunci când puteți face cu ușurință lucrurile cu Heroku Git.

  1. Întreținerea mai ușoară a codului – Cu serviciile de găzduire a depozitului de coduri precum GitHub și GitLab, întreținerea codului este ușoară.
  2. Personalizarea conductelor – Cu GitLab, putem scrie propria noastră yaml și includeți bibliotecile necesare pentru rularea aplicației noastre.
  3. Pentru o mai bună înțelegere a integrării continue și a dezvoltării continue (CI / CD) – Pentru începători, această configurare vă ajută să înțelegeți fluxul de lucru de codare a testării -> controlul versiunilor -> întreținerea codului -> implementarea aplicației.

Iată pașii necesari pentru implementarea aplicației găzduite în GitLab în Heroku. Pașii de aici presupun că aveți deja o bună înțelegere a Python, Flask, controlul versiunilor, GitLab și Heroku. Această scriere este, de asemenea, utilă pentru cineva care abia începe. Am păstrat-o cât mai simplu posibil pentru a pune lucrurile în funcțiune.

Încărcarea proiectului pe GitLab

  1. Creați un mediu virtual Python pe care să îl folosim. Intrați în mediul virtual.
  2. Creați un exemplu de aplicație Python Flask pe mașina dvs.
  3. Verificați dacă totul funcționează bine.
  4. Rulați comanda pip freeze > requirements.txt din folderul principal al aplicației pentru a prinde toate cerințele pentru rularea aplicației.
  5. Creați un Procfile care este folosit de Heroku pentru a declara ce comenzi sunt executate de aplicația dvs. pe platforma Heroku. Procfile constă de obicei din serverul web utilizat pentru a rula aplicația. În cazul nostru, permiteți-ne să folosim Gunicorn, serverul implicit Python WSGI HTTP. Conținutul Procfile dvs. va fi web: gunicorn <name of the app.py file>:<nume-aplicație> unde numele aplicației este de obicei „aplicație”. Plasați acest fișier în dosarul principal al aplicației.
  6. Acum conectați-vă (sau înscrieți-vă) la GitLab și creați un proiect. În momentul în care faceți acest lucru, veți obține un set standard de instrucțiuni despre cum să „legați” codul dvs. de pe mașina de dezvoltare la proiectul GitLab. Doar urmați comenzile și, după aceea, puteți face un git push sau git pull către / din acest proiect. Acesta este un pas cam elaborat, iar ultima declarație ar trebui să arate ceva de genul git push -u origin master. După ce ați terminat, la reîmprospătarea paginii de proiect pe GitLab, ar trebui să vedeți tot codul dvs. să apară în GitLab.
Configurarea CI CD pe GitLab pentru implementarea aplicatiei Python
Depozit de proiecte în GitLab

Conectarea GitLab și Heroku

  1. Conectați-vă la Portal web Heroku și creați o aplicație. Dă-i un nume frumos și o selecție în timp de rulare.
  2. Acum, în folderul my_app de pe mașina de dezvoltare, creați un fișier numit „.gitlab-ci.yaml” (notați „.” La început).
  3. Acest fișier yaml va avea următoarea structură.
my_app_file_name:
 script:
 — apt-get update -qy
 — apt-get install -y python-dev python-pip
 — pip install -r requirements.txt
 — export MONGOHQ_URL=$MONGO_URL
 
production:
 type: deploy
 script:
 — apt-get update -qy
 — apt-get install -y ruby-dev
 — gem install dpl
 — dpl — provider=heroku — app=task-mgmt-app — api-key=$HEROKU_SECRET_KEY
 only:
 — master
  1. Schimbați my_app_file_name la numele de fișier al aplicației dvs. de balon. Trebuie să setați variabila HEROKU_SECRET_KEY în variabilele proiectului. Veți primi această cheie în Tabloul de bord Heroku. Pentru a-l seta în proiectul dvs. GitLab, accesați Setări> Conducte CI / CD și căutați Variabile secrete. În timp ce folosim aceste variabile în yaml, trebuie să înaintăm variabila cu semnul „$”. Este o bună practică să nu împărtășiți cheile secrete cu nimeni și, de asemenea, să restricționați accesul la acestea în proiect.
  2. Ești aproape acolo. Rulați comanda git add .gitlab-ci.yml și git commit -m <msg> și git push -u origin master. Veți vedea fișierul în depozitul GitLab acum.
  3. În pagina GitLab „Tabloul meu de bord”, faceți clic pe Conducte> Locuri de muncă pentru a vedea jobul care a început să ruleze.
  4. În cazul în care utilizați o bază de date în aplicația dvs., vă recomandăm să o conectați la aplicație plasând detaliile în fișierul .gitlab-ci.yaml. Te rog verifica aici pentru un exemplu. Am folosit MongDB în aplicația mea. Heroku oferă adăugarea unui set de biblioteci / aplicații gratuite în aplicația dvs. Există o link mLab pentru adăugarea MongoDB.
1611468065 466 Configurarea CI CD pe GitLab pentru implementarea aplicatiei Python
Lista de locuri de muncă în conductă
1611468065 47 Configurarea CI CD pe GitLab pentru implementarea aplicatiei Python
O slujbă de alergat. Captură de ecran legată de my_app_file_name în yaml.
1611468066 432 Configurarea CI CD pe GitLab pentru implementarea aplicatiei Python
Implementarea aplicației de succes pe Heroku

Ura! Ați integrat cu succes GitLab cu Heroku cu configurație CI / CD. Efectuați toate modificările de cod pe care le doriți în depozitul dvs., împingeți-le la proiectul GitLab și vedeți cum începe o lucrare de fiecare dată când există o apăsare de cod. Pentru configurarea actuală, am folosit alergători publici GitLab disponibili aici. Puteți configura un alergător GitLab personalizat și puteți configura o configurație adecvată.

  1. Se creează telecomanda heroku
  2. Configurarea CI / CD de la GitLab pe Heroku
  3. O aplicație de gestionare a sarcinilor – depozit: GitLab, implementat pe Heroku