Gabay sa Baguhan: Paggawa ng DevOps Pipeline

Kung bago ka sa DevOps, tingnan ang limang hakbang na gabay na ito sa paggawa ng iyong unang pipeline.

Gabay sa Baguhan: Paggawa ng DevOps Pipeline

Ang DevOps ay naging karaniwang solusyon para sa pag-aayos ng mabagal, putol-putol o sirang mga proseso ng pagbuo ng software. Ang problema ay kung bago ka sa DevOps at hindi mo alam kung saan magsisimula, maaaring kulang ka sa pag-unawa sa mga diskarteng ito. Tatalakayin ng artikulong ito ang kahulugan ng isang pipeline ng DevOps at magbibigay din ng limang hakbang na mga tagubilin para sa paggawa nito. Bagama't hindi kumpleto ang tutorial na ito, dapat itong magbigay sa iyo ng pundasyon upang simulan ang iyong paglalakbay at palawakin ang iyong kaalaman sa hinaharap. Ngunit magsimula tayo sa kasaysayan.

Aking Paglalakbay sa DevOps

Dati akong nagtrabaho sa cloud team ng Citi Group na bumubuo ng isang Infrastructure-as-a-Service (IaaS) web application upang pamahalaan ang cloud infrastructure ng Citi, ngunit palagi akong interesado sa kung paano gawing mas mahusay ang proseso ng pag-unlad at magdala ng positibong pagbabago sa kultura sa pangkat ng pag-unlad. Natagpuan ko ang sagot sa isang aklat na inirerekomenda ni Greg Lavender, CTO ng Cloud Architecture at Infrastructure sa Citi. Ang aklat ay tinawag na The Phoenix Project (Ang Phoenix Project), at ipinapaliwanag nito ang mga prinsipyo ng DevOps, ngunit parang nobela ito.

Ang talahanayan sa likod ng aklat ay nagpapakita kung gaano kadalas inilalagay ng iba't ibang kumpanya ang kanilang mga system sa isang release environment:

Amazon: 23 bawat araw
Google: 5 bawat araw
Netflix: 500 bawat araw
Facebook: Isang beses sa isang araw
Twitter: 3 beses sa isang linggo
Karaniwang kumpanya: Isang beses bawat 9 na buwan

Paano posible ang mga frequency ng Amazon, Google at Netflix? Ito ay dahil naisip ng mga kumpanyang ito kung paano lumikha ng halos perpektong pipeline ng DevOps.

Malayo kami dito hanggang sa ipinatupad namin ang DevOps sa Citi. Noon, ang aking koponan ay may iba't ibang mga kapaligiran, ngunit ang pag-deploy sa server ng pag-unlad ay ganap na manu-mano. Ang lahat ng mga developer ay nagkaroon ng access sa isang development server lamang batay sa IBM WebSphere Application Server Community Edition. Ang problema ay ang server ay magsasara sa tuwing maraming user ang sumubok na mag-deploy nang sabay-sabay, kaya ang mga developer ay kailangang ipaalam ang kanilang mga intensyon sa isa't isa, na medyo masakit. Bukod pa rito, may mga isyu sa mababang antas na saklaw ng test code, masalimuot na proseso ng manual deployment, at kawalan ng kakayahang subaybayan ang deployment ng code na nauugnay sa isang partikular na gawain o kwento ng user.

Napagtanto ko na may kailangang gawin at nakahanap ako ng isang katulad na kasamahan. Nagpasya kaming magtulungan sa pagbuo ng paunang DevOps pipeline - nag-set up siya ng Tomcat virtual machine at application server habang nagtatrabaho ako sa Jenkins, pinagsama ang Atlassian Jira at BitBucket, at nagtrabaho sa saklaw ng test code. Napakatagumpay ng side project na ito: halos ganap naming na-automate ang maraming proseso, nakamit ang halos 100% uptime sa aming development server, nagbigay ng pagsubaybay at pinahusay na saklaw ng pagsubok ng code, at nagdagdag ng kakayahang mag-link ng mga sangay ng Git sa mga isyu o deployment ng Jira. Karamihan sa mga tool na ginamit namin sa pagbuo ng aming DevOps pipeline ay open source.

Ngayon naiintindihan ko na kung gaano kasimple ang aming pipeline ng DevOps: hindi kami gumamit ng mga extension tulad ng mga Jenkins file o Ansible. Gayunpaman, gumana nang maayos ang simpleng pipeline na ito, marahil dahil sa prinsipyo ng Pareto (kilala rin bilang panuntunang 80/20).

Isang Maikling Panimula sa DevOps at sa CI/CD Pipeline

Kung tatanungin mo ang ilang tao, "Ano ang DevOps?", malamang na makakatanggap ka ng iba't ibang sagot. Ang DevOps, tulad ng Agile, ay umunlad na sumasaklaw sa maraming iba't ibang disiplina, ngunit karamihan sa mga tao ay sasang-ayon sa ilang bagay: Ang DevOps ay isang kasanayan sa pag-develop ng software o software development life cycle (SDLC) na ang pangunahing prinsipyo ay nagbabago sa kultura kung saan ang mga developer at non- umiiral ang mga developer sa isang kapaligiran kung saan:

Ang mga operasyon na dati nang manu-mano ay ginawang awtomatiko;
Ginagawa ng lahat ang kanilang pinakamahusay na ginagawa;
Ang bilang ng mga pagpapatupad sa isang tiyak na tagal ng panahon ay tumataas; Tumataas ang throughput;
Nadagdagang kakayahang umangkop sa pag-unlad.

Bagama't ang pagkakaroon ng mga tamang software tool ay hindi lamang ang kailangan mo upang lumikha ng isang DevOps na kapaligiran, ang ilang mga tool ay mahalaga. Ang isang pangunahing tool ay ang tuluy-tuloy na pagsasama at tuloy-tuloy na pag-deploy (CI/CD). Sa pipeline na ito, ang mga kapaligiran ay may iba't ibang yugto (hal. DEV, INT, TST, QA, UAT, STG, PROD), maraming mga operasyon ang awtomatiko, at ang mga developer ay maaaring magsulat ng mataas na kalidad na code, makamit ang liksi ng pag-unlad, at mataas na mga rate ng pag-deploy.

Inilalarawan ng artikulong ito ang limang hakbang na diskarte sa paggawa ng pipeline ng DevOps tulad ng ipinapakita sa sumusunod na diagram gamit ang mga open source na tool.

Hakbang 1: Mga Paraan ng CI/CD

Ang unang bagay na kailangan mo ay isang tool na CI/CD. Ang Jenkins, isang open source na tool batay sa Java at lisensyado sa ilalim ng lisensya ng MIT, ay ang tool na nagpasikat sa DevOps at naging de facto na pamantayan.

Kaya ano ang Jenkins? Isipin ito bilang isang uri ng mahiwagang universal remote control na maaaring makipag-usap at mag-ayos ng iba't ibang serbisyo at tool. Sa sarili nitong, walang silbi ang isang CI/CD tool tulad ng Jenkins, ngunit nagiging mas malakas ito habang kumokonekta ito sa iba't ibang tool at serbisyo.

Ang Jenkins ay isa lamang sa maraming open source na tool sa CI/CD na magagamit mo upang buuin ang iyong pipeline ng DevOps.

Jenkins: Creative Commons at MIT
Travis CI: MIT
CruiseControl:BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

Narito kung ano ang hitsura ng mga proseso ng DevOps sa isang tool na CI/CD:

Gabay sa Baguhan: Paggawa ng DevOps Pipeline

Mayroon kang tool na CI/CD na tumatakbo sa iyong localhost, ngunit wala ka pang magagawa sa ngayon. Lumipat tayo sa susunod na yugto ng paglalakbay sa DevOps.

Hakbang 2: Pamahalaan ang Source Control System

Ang pinakamahusay (at marahil pinakamadaling) paraan upang i-verify na ang iyong CI/CD tool ay maaaring gumawa ng kanyang mahika ay ang pagsama sa isang source code control (SCM) tool. Bakit kailangan mo ng source control? Sabihin nating gumagawa ka ng isang application. Sa tuwing lumikha ka ng isang application, ikaw ay nagprograma, at hindi mahalaga kung gumagamit ka ng Java, Python, C++, Go, Ruby, JavaScript, o alinman sa mga zillions ng mga programming language. Ang code na iyong isinusulat ay tinatawag na source code. Sa simula, lalo na kapag nagtatrabaho ka nang mag-isa, malamang na ok na ilagay ang lahat sa isang lokal na direktoryo. Ngunit habang lumalaki ang proyekto at nag-imbita ka ng ibang tao na mag-collaborate, kailangan mo ng paraan para maiwasan ang mga salungatan habang epektibong nagbabahagi ng mga pagbabago. Kailangan mo rin ng paraan upang maibalik ang mga nakaraang bersyon, dahil nagiging lipas na ang paggawa ng mga backup at pagkopya/pag-paste sa mga ito. Ikaw (at ang iyong mga kasamahan sa koponan) ay nangangailangan ng mas mahusay.

Ito ay kung saan ang kontrol ng source code ay nagiging halos isang pangangailangan. Iniimbak ng tool na ito ang iyong code sa mga repository, sinusubaybayan ang mga bersyon, at iko-coordinate ang gawain ng mga kalahok sa proyekto.

Bagama't mayroong maraming mga tool sa pagkontrol ng mapagkukunan, ang Git ang pamantayan, at tama. Lubos kong inirerekumenda ang paggamit ng Git, kahit na mayroong iba pang mga opsyon sa open source kung gusto mo.

Git: GPLv2 at LGPL v2.1
Pagbabagsak: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Ito ang hitsura ng isang pipeline ng DevOps kasama ang pagdaragdag ng mga kontrol ng source code.

Gabay sa Baguhan: Paggawa ng DevOps Pipeline

Maaaring i-automate ng isang tool ng CI/CD ang mga proseso ng pagsusuri, pagkuha ng source code, at pakikipagtulungan sa mga miyembro. Hindi masama? Ngunit paano mo ito gagawing isang gumaganang aplikasyon upang ang bilyun-bilyong tao ay magamit at pahalagahan ito?

Hakbang 3: Gumawa ng Build Automation Tool

Malaki! Maaari mong suriin ang code at gumawa ng mga pagbabago sa source control, at imbitahan ang iyong mga kaibigan na mag-collaborate sa development. Ngunit hindi ka pa nakakagawa ng application. Upang makagawa ng isang web application, dapat itong i-compile at i-package sa isang deployable batch na format o tumakbo bilang isang executable file. (Tandaan na ang isang na-interpret na programming language gaya ng JavaScript o PHP ay hindi kailangang i-compile).

Gumamit ng tool ng build automation. Hindi mahalaga kung aling tool ng pagbuo ng automation ang pagpapasya mong gamitin, lahat sila ay may parehong layunin: buuin ang source code sa ilang gustong format at i-automate ang gawain ng paglilinis, pag-compile, pagsubok, at pag-deploy sa isang partikular na kapaligiran. Mag-iiba-iba ang mga tool sa pagbuo depende sa iyong programming language, ngunit narito ang ilang karaniwang opsyon sa open source.

Pangalan
Lisensya
Wika sa pagpoproseso

Maven
Apache 2.0
Java

Langgam
Apache 2.0
Java

Gradle
Apache 2.0
Java

bazel
Apache 2.0
Java

gumawa
GNU
N / A

ingit
MIT
JavaScript

lumunok
MIT
JavaScript

Tagabuo
Apache
Mapula

Rake
MIT
Mapula

AAP
GNU
Sawa

SCons
MIT
Sawa

BitBake
GPLv2
Sawa

keyk
MIT
C#

ASDF
Expat (MIT)
LISP

Mag-intriga
BSD
Haskell

Malaki! Maaari mong ilagay ang mga file ng configuration ng build automation tool sa iyong source control system at hayaan ang iyong CI/CD tool na pagsama-samahin ang lahat.

Gabay sa Baguhan: Paggawa ng DevOps Pipeline

Maayos naman ang lahat, di ba? Ngunit saan i-deploy ang iyong aplikasyon?

Hakbang 4: Server ng Web Application

Sa ngayon, mayroon kang naka-package na file na maaaring ma-executable o mai-install. Para maging tunay na kapaki-pakinabang ang anumang application, dapat itong magbigay ng ilang uri ng serbisyo o interface, ngunit kailangan mo ng container upang i-host ang iyong application.

Ang isang web application server ay isang lalagyan lamang. Ang server ay nagbibigay ng isang kapaligiran kung saan ang lohika ng package na ini-deploy ay maaaring tukuyin. Nagbibigay din ang server ng interface at nag-aalok ng mga serbisyo sa web sa pamamagitan ng paglalantad ng mga socket sa labas ng mundo. Kailangan mo ng isang HTTP server, pati na rin ang ilang kapaligiran (tulad ng isang virtual machine) upang mai-install ito. Sa ngayon, ipagpalagay natin na matututo ka pa tungkol dito (bagaman tatakpan ko ang mga lalagyan sa ibaba).

Mayroong ilang mga open source web application server.

Pangalan
Lisensya
Wika sa pagpoproseso

Pusang lalaki
Apache 2.0
Java

daungan
Apache 2.0
Java

WildFly
GNU Lesser Public
Java

Salamin
Hindi gaanong Pampubliko ang CDDL at GNU
Java

Django
3-Clause BSD
Sawa

Buhawi
Apache 2.0
Sawa

gunicorn
MIT
Sawa

Sawa
MIT
Sawa

Daang-bakal
MIT
Mapula

node.js
MIT
Javascript

Ang iyong pipeline ng DevOps ay halos handa nang gamitin. Magaling!

Gabay sa Baguhan: Paggawa ng DevOps Pipeline

Bagama't maaari kang huminto doon at ikaw mismo ang humawak sa pagsasama, ang kalidad ng code ay isang mahalagang bagay na dapat alalahanin ng isang developer ng app.

Hakbang 5: Saklaw ng Pagsusuri ng Code

Ang pagpapatupad ng mga pagsubok ay maaaring isa pang masalimuot na kinakailangan, ngunit dapat maagang mahuli ng mga developer ang anumang mga bug sa application at pagbutihin ang kalidad ng code upang matiyak na nasiyahan ang mga end user. Sa kabutihang-palad, maraming open source na tool para sa pagsubok ng iyong code at paggawa ng mga rekomendasyon para sa pagpapabuti ng kalidad nito. Ang mas maganda pa ay ang karamihan sa mga tool ng CI/CD ay maaaring kumonekta sa mga tool na ito at i-automate ang proseso.

Binubuo ang pagsubok ng code ng dalawang bahagi: mga framework ng pagsubok sa code na tumutulong sa iyong magsulat at magpatakbo ng mga pagsubok, at mga tool sa pagmumungkahi na makakatulong sa iyong pagbutihin ang kalidad ng iyong code.

Mga sistema ng pagsubok ng code

Pangalan
Lisensya
Wika sa pagpoproseso

JUnit
Eclipse Public License
Java

EasyMock
Apache
Java

Mockito
MIT
Java

PowerMock
Apache 2.0
Java

Pytest
MIT
Sawa

Teorya
Mozilla
Sawa

Lason
MIT
Sawa

Mga sistema ng rekomendasyon para sa pagpapahusay ng code

Pangalan
Lisensya
Wika sa pagpoproseso

Coverage
GNU
Java

CodeCover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Sawa

Emma
Karaniwang Pampublikong Lisensya
Java

JaCoCo
Eclipse Public License
Java

Teorya
Mozilla
Sawa

Lason
MIT
Sawa

Kampupot
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

Jest
MIT
JavaScript

Tandaan na karamihan sa mga tool at framework na binanggit sa itaas ay isinulat para sa Java, Python at JavaScript, dahil ang C++ at C# ay mga proprietary programming language (bagaman ang GCC ay open source).

Ngayong naipatupad mo na ang mga tool sa saklaw ng pagsubok, ang iyong pipeline ng DevOps ay dapat magmukhang katulad ng diagram na ipinapakita sa simula ng tutorial na ito.

Mga karagdagang hakbang

Mga lalagyan

Tulad ng sinabi ko, maaari mong i-host ang iyong server sa isang virtual machine o isang server, ngunit ang mga lalagyan ay isang popular na solusyon.

Ano ang mga lalagyan? Ang maikling paliwanag ay ang isang virtual machine ay nangangailangan ng isang malaking halaga ng operating system memory, na lumalampas sa laki ng application, habang ang isang lalagyan ay nangangailangan lamang ng ilang mga aklatan at mga pagsasaayos upang patakbuhin ang application. Malinaw, mayroon pa ring mahahalagang gamit para sa isang virtual machine, ngunit ang container ay isang magaan na solusyon para sa pagho-host ng isang application, kabilang ang isang application server.

Bagama't may iba pang mga opsyon sa lalagyan, ang pinakasikat ay ang Docker at Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Mga intermediate na tool sa automation

Ang aming pipeline ng DevOps ay pangunahing nakatuon sa collaborative na paggawa at pag-deploy ng application, ngunit marami pang ibang bagay na maaaring gawin sa mga tool ng DevOps. Isa sa mga ito ay ang paggamit ng Infrastructure as Code (IaC) na mga tool, na kilala rin bilang middleware automation tools. Nakakatulong ang mga tool na ito na i-automate ang pag-install, pamamahala, at iba pang mga gawain para sa middleware. Kaya, halimbawa, ang isang automation tool ay maaaring mag-extract ng mga application tulad ng isang web application server, isang database, at isang monitoring tool na may mga tamang configuration at i-deploy ang mga ito sa application server.

Narito ang ilang open source middleware automation tool:

Magagawa: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache o GPL

Gabay sa Baguhan: Paggawa ng DevOps Pipeline

Alamin ang mga detalye kung paano makakuha ng hinahanap na propesyon mula sa simula o Level Up sa mga tuntunin ng mga kasanayan at suweldo sa pamamagitan ng pagkuha ng mga bayad na online na kurso mula sa SkillFactory:

mas maraming kurso

Kapaki-pakinabang

Pinagmulan: www.habr.com

Magdagdag ng komento