Inta badan waa inaan dhistaa dhuumaha mashaariicda dhismaha ee Java. Mar waa il furan, marna ma aha. Waxaan dhawaan go'aansaday in aan isku dayo in aan ka raro qaar ka mid ah kaydkayga Travis-CI iyo TeamCity ilaa GitHub Actions, tanina waa waxa ka soo baxay.
Maxaan otomaatig u noqon doonaa?
Marka hore, waxaan u baahanahay mashruuc aan si otomaatig ah u sameyn doono, aan ku sameyno codsi yar oo ku jira boot boot / Java 11 / Maven. Ujeedooyinka maqaalkan, ma danayn doono gabi ahaanba macquulnimada codsiga; kaabayaasha ku xeeran arjiga ayaa muhiim noo ah, sidaa darteed xakamaynta REST API fudud ayaa nagu filan.
Waxaad ka arki kartaa ilaha halkan: github.com/antkorwin/github-actions Dhammaan heerarka dhismaha dhuumaha waxay ka muuqdaan codsiyada jiidashada mashruucan.
JIRA iyo qorsheynta
Waxaa habboon in la sheego in aan inta badan u isticmaalno JIRA sida raadraaca arrimaha, markaa aynu u samayno guddi gaar ah mashruucan oo aan ku darno arrimaha ugu horreeya ee halkaas:
Wax yar ka dib waxaan ku laaban doonaa waxa xiisaha leh ee JIRA iyo GitHub ay bixin karaan marka la isku daro.
Waxaan si otomaatig ah u samaynaa kulanka mashruuca
Mashruucayada tijaabada ah waxaa lagu dhisay maven, marka dhismuhu waa mid fudud, waxa kaliya ee aan u baahanahay waa xirmada mvn nadiif ah.
Si tan loo sameeyo iyadoo la adeegsanayo Github Actions, waxaan u baahan doonaa inaan abuurno fayl ku jira kaydka oo qeexaya socodka shaqadeena, tan waxaa lagu samayn karaa faylka yml caadiga ah, ma dhihi karo waxaan jeclahay " yml programming ", laakiin maxaan sameyn karnaa - waxaanu ku samaynaa .github/ directory workflow/ file build.yml kaas oo aanu ku qeexi doono ficilada marka la dhisayo laanta sare:
on - tani waa sharraxaad ku saabsan dhacdada qoraalkayaga lagu bilaabi doono.
on: pull_request/riix - waxay muujinaysaa in socodka shaqadu uu u baahan yahay in la bilaabo mar kasta oo la riixo sayidkii oo codsiyo jiid la abuuro.
Hoos waxaa ku qoran sharaxaad ku saabsan hawlaha (shaqo) iyo talaabooyinka fulinta (talaabooyinka) hawl kasta.
ordaya-on - halkan waxaan dooran karnaa OS bartilmaameedka, la yaab leh, xitaa waxaad dooran kartaa Mac OS, laakiin kaydadka gaarka ah tani waa qaali (marka la barbardhigo Linux).
isticmaalka Waxay kuu ogolaanaysaa inaad dib u isticmaasho falalka kale, tusaale ahaan, addoo isticmaalaya action/setup-java action waxaan ku rakibnaa deegaanka Java 11.
Iyada oo gargaar ah la waxaan qeexi karnaa halbeegyada aan ku bilaabayno ficilka, asal ahaan kuwani waa doodaha loo gudbin doono ficilka.
Waxa hadhay oo dhan waa in lagu socodsiiyo dhismaha Maven: run: mvn -B clean package calanka -B ayaa sheegay in aan u baahanahay hab aan is-dhexgal ahayn si maven-ga si lama filaan ah aanu u rabin inuu wax na waydiiyo
Wayn! Hadda, mar kasta oo aad u heellan tahay sayidkiisa, dhismuhu wuxuu bilaabmayaa.
Si otomaatig ah u bilaabma tijaabada
Isku-duubnidu waa wanaagsan yahay, laakiin dhab ahaantii, mashruuc si badbaado leh ayaa loo soo ururin karaa, laakiin ma shaqeynayo. Sidaa darteed, tallaabada xigta waa in si otomaatig ah loo sameeyo imtixaannada. Intaa waxaa dheer, way ku habboon tahay in la eego natiijooyinka gudbinta imtixaannada marka aad dib u eegis ku samaynayso PR - waxaad si hubaal ah u ogtahay in imtixaanadu ay gudbaan oo qofna ma iloobin in uu maamulo laantiisa ka hor inta uusan samayn isku-darka.
Waxaan samayn doonaa imtixaanno marka la abuurayo codsi jiid oo aan ku biirno sayidkii, isla mar ahaantaana waxaan ku dari doonaa abuurista warbixin ku saabsan daboolka-koodka.
Si aan u daboosho imtixaanada, waxaan isticmaalaa codecov iyadoo la kaashanaysa jacoco plugin. Codecov waxay leedahay ficil u gaar ah, laakiin waxay u baahan tahay calaamad si ay ugu shaqeyso codsigeena jiidista:
${{ secrets.CODECOV_TOKEN }} - Waxaan arki doonaa dhismahan wax ka badan hal mar, siraha waa hab lagu kaydiyo siraha GitHub, waxaan ku qori karnaa furaha sirta ah / calaamadaha / martigeliyaha / url iyo xogta kale ee aan lagu darin saldhigga koodhka kaydka.
Waxaad ku dari kartaa doorsoome siraha ku jira goobaha kaydka ee GitHub:
Waxaad calaamad ka heli kartaa codecov.io Ka dib oggolaanshaha iyada oo loo marayo GitHub, si aad ugu darto mashruuc dadweyne kaliya waxaad u baahan tahay inaad raacdo isku xirka sidan oo kale ah: Magaca isticmaalaha GitHub/[repo name]. Kayd gaar ah ayaa sidoo kale lagu dari karaa; si tan loo sameeyo, waxaad u baahan tahay inaad siiso xuquuqda codecov codsiga ku jira Github.
Hadda codecov bot ayaa geli doona mid kasta oo ka mid ah codsiyadayada jiidista oo ku dari doona garaaf beddelka caymiska:
Aynu ku darno falanqeeye taagan
Inta badan mashaariicda isha furan waxaan u isticmaalaa daruuraha sonar ee falanqaynta koodhka taagan, way fududahay in lagu xidho travis-ci. Markaa waa tallaabo macquul ah markaad u guurayso GitHub Actions si aad sidaas oo kale samayso. Suuqa wax qabadku waa wax aad u fiican, laakiin markan wax yar ayay iga daysay, sababtoo ah caado ahaan waxaan helay ficilkii aan u baahnaa oo waxaan ku daray socodka shaqada. Laakiin waxa soo baxday in sonar aanu taageersanayn ka shaqaynta falanqeynta mashaariicda maven ama gradle. Dabcan, tani waxay ku qoran tahay waraaqaha, laakiin yaa akhriya?!
Suuragal maaha ficil, markaa waxaanu ku samayn doonaa mvn plugin:
SONAR_TOKEN - waxaa laga heli karaa at sonarcloud.io oo waxaad u baahan tahay inaad ku diiwaan geliso sirta. GITHUB_TOKEN - tani waa calaamad ku dhex dhisan oo GitHub ay dhaliso, iyadoo la kaashanayo sonarcloud[bot] ay awood u yeelan doonto inay gasho Git si ay nooga tagto fariimaha codsiyada jiidista.
Dsonar.projectKey - magaca mashruuca ee sonar, waxaad ka arki kartaa goobaha mashruuca.
Dsonar.ururka - magaca ururka GitHub.
Waxaan sameynaa codsi jiid waxaanan sugeynaa sonarcloud[bot] inuu soo galo faallooyinka:
Maareynta sii daynta
Dhismihii waa la habeeyey, imtixaanadii waa la sameeyay, waxaanan samayn karnaa sii dayn. Aynu eegno sida GitHub Actions ay uga dhigi karto maamulka siideynta mid aad u fudud.
Shaqada, waxaan haystaa mashruucyo saldhigoodu yahay bucket-ka (wax walbaa waa sida sheekadaas "Waxaan u qoraa qashin-qubka inta lagu jiro maalinta, ballan-qaadka GitHub habeenkii"). Nasiib darro, bitbucket ma laha qalab lagu maamulo siideynta oo ku dhex dhisan. Tani waa dhibaato, sababtoo ah sii deyn kasta waa inaad gacanta ku sameysaa bog isku dhafan oo aad ku tuurtaa dhammaan sifooyinka ku jira sii deynta halkaas, ka raadi daaraha maskaxda, hawlaha jira, waxay sameeyaan kaydka. Waxaa jira fursado badan oo aad ku khaldami karto, waxaad illoobi kartaa shay ama geli kartaa shay hore loo sii daayay markii ugu dambeysay, mararka qaarkood si fudud ma cadda waxa loo kala saaro codsiga jiidista - ma sifo ama hagaajin cayayaanka, ama imtixaannada tafatirka, ama wax kaabayaal ah .
Sidee falalka GitHub noo caawin karaan? Waxaa jira ficil aad u fiican - qabyo-qaadaha sii-deynta, waxay kuu oggolaaneysaa inaad dejiso qaab-dhismeedka faylka qoraallada siideynta si aad u dejiso qaybaha codsiyada jiidka oo si toos ah ugu kooxeyso faylka qoraallada siideynta:
Tusaalaha tusaalaha ah ee dejinta warbixin (.github/release-drafter.yml):
Dhammaan codsiyada jiidashada hadda ka dib waxaa lagu soo ururin doonaa qoraallada sii deynta si toos ah - sixir!
Halkan su'aasha ayaa laga yaabaa inay soo baxdo: ka waran haddii horumariyayaashu ay illoobaan inay dhejiyaan PR? Markaa ma cadda qaybta la gelinayo, mar labaadna waa inaad gacanta ku qabataa, iyadoo PR kastaa si gaar ah ula macaamilayso. Si loo xaliyo dhibaatadan, waxaan isticmaali karnaa ficil kale - xaqiijiye calaamad - waxay hubisaa joogitaanka summada ee codsiga jiidista. Haddii aysan jirin calaamado loo baahan yahay, markaa jeeggu wuu guuldareysan doonaa waxaanan ku arki doonaa fariin tan ku saabsan codsigayaga jiidista.
Kuma aan guulaysan in aan isku xidho ficilka si toos ah u dhejiya summadaha codsiyada jiidista iyo ficilka hubinaya joogitaanka sumadaha loo baahan yahay; summada-ku-taabashada ma rabo in la arko sumadaha uu ku daray botku. Waxay u muuqataa inay fududahay inaad qorto ficilkaaga oo isku daraya labada marxaladood. Laakiin xitaa foomkan aad ayey ugu habboon tahay in la isticmaalo; waxaad u baahan tahay inaad liiska ka doorato calaamad marka la abuurayo codsi jiid.
Waa waqtigii la diri lahaa
Waxaan isku dayay dhowr ikhtiyaar oo diris ah iyada oo loo marayo GitHub Actions (iyada oo loo marayo ssh, iyada oo loo marayo scp, iyo isticmaalka docker-hub), waxaanan dhihi karaa, waxay u badan tahay, waxaad heli doontaa hab aad ku dhejiso binary-ga server-ka, iyada oo aan loo eegin sida qalloocan ee dhuumahaaga waa
Waxaan jeclaystay ikhtiyaarka ah in dhammaan kaabayaasha hal meel lagu hayo, markaa aynu eegno sida loo geeyo Xirmooyinka GitHub (tani waa kaydka nuxurka binary, npm, jar, docker).
Script si loo dhiso sawirka docker oo lagu daabaco Xirmooyinka GitHub:
Marka hore, waxaan u baahanahay inaan dhisno faylka JAR ee codsigeena, ka dib markaa waxaan xisaabineynaa wadada loo maro diiwaanka GitHub docker iyo magaca sawirkayaga. Waxaa jira dhowr farsamooyin oo aynaan weli la kulmin:
waxaad ku heli kartaa qiimaha doorsoomaha lagu dejiyay talaabadii hore adiga oo isticmaalaya tilmaanta talaabadan: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
Doorsoomiyaha caadiga ah ee GITHUB_REPOSITORY waxa uu kaydiyaa magaca kaydka iyo mulkiilaha ("milkiilaha/magaca magaca"). Si aan wax walba uga goyno xariiqan marka laga reebo magaca kaydka, waxaanu isticmaali doonaa bash syntax: ${GITHUB_REPOSITORY#*/}
Marka xigta waxaan u baahanahay inaan dhisno sawirka docker:
Si loo muujiyo nooca sawirka, waxaan isticmaalnaa tirooyinka ugu horreeya ee SHA hash ee ballan-qaadka - GITHUB_SHA sidoo kale waxaa jira waxyaabo halkan ku yaal, haddii aad dhisto dhismayaal noocaas ah ma aha oo kaliya markaad ku biirto sayid, laakiin sidoo kale sida ku xusan abuurista codsi jiid dhacdo, ka dib SHA waxaa laga yaabaa inaysan u dhigmin xashiishka aan ku aragno taariikhda git, sababtoo ah ficilada/ficilka hubinta waxay sameeyaan xashiish u gaar ah si ay uga fogaato falalka dhimista ee PR.
Haddii wax waliba si fiican u shaqeeyeen, ka dib furitaanka qaybta xirmooyinka (https://github.com/antkorwin/github-actions/packages) ee kaydka, waxaad arki doontaa sawir docker cusub:
Halkaa waxa kale oo aad ka arki kartaa liiska noocyada sawirka docker.
Waxa hadhay oo dhan waa in la habeeyo server-keena si uu ula shaqeeyo diiwaankan oo aan dib u bilaabo adeegga. Waxay u badan tahay inaan ka hadlo sida tan loo sameeyo iyada oo loo marayo systemd waqti kale.
Kormeerka
Aynu eegno ikhtiyaar fudud oo ku saabsan sida loo sameeyo baaritaan caafimaad codsigeena annagoo adeegsanayna GitHub Actions. Codsigayaga boot wuxuu leeyahay hawl-geliyaha, markaa xitaa uma baahnid inaan qorno API si aan u hubinno xaaladdeeda; waxaan horayba u sameynay wax walba oo caajis ah. Kaliya waxaad u baahan tahay inaad jiidato martigeliyaha: SERVER-URL:PORT/actuator/health
Dhammaan waxaan u baahanahay waa inaan qorno hawl si aan u hubinno server-ka iyadoo la adeegsanayo cron, iyo haddii si lama filaan ah uu noogu jawaabo, ka dibna waxaan u soo diri doonaa ogeysiis telegram.
Marka hore, aan ogaano sida loo socodsiiyo socodka shaqada cron:
Aynu gacanta ku hubinno heerka serferka anagoo adeegsanayna curl:
jobs:
ping:
runs-on: ubuntu-18.04
steps:
- name: curl actuator
id: ping
run: |
echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"
- name: health check
run: |
if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
echo "health check is failed"
exit 1
fi
echo "It's OK"
Marka hore, waxaan ku keydineynaa doorsoome waxa uu server-ku ka jawaabay codsiga, tallaabada xigta waxaan hubineynaa in xaaladdu tahay UP, haddii aysan taasi ahayn kiiska, ka dibna waxaan ka baxnaa qalad. Haddii aad u baahan tahay inaad gacmahaaga ku "ku xad gudubto" ficil, markaa bixitaanka 1 - hub ku habboon.
- name: send alert in telegram
if: ${{ failure() }}
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
Health check of the:
${{secrets.SERVER_HOST}}/api/actuator/health
failed with the result:
${{ steps.ping.outputs.status }}
Waxaan u dirnaa telegram kaliya haddii ficilku ku guuldareysto tallaabadii hore. Si aan fariin u dirno waxaan isticmaalnaa appleboy/telegram-action; waxaad ka akhrisan kartaa sida loo helo calaamadda bot iyo aqoonsiga ku sheekeysiga dukumeentiga: github.com/appleboy/telegram-action
Ha iloobin inaad ku qorto siraha Github: URL ee server-ka iyo calaamadaha bot telegram.
track Bonus - JIRA caajisnimada
Waxaan balan qaaday in aan ku laaban doono JIRA, waana soo laabanay. Boqollaal jeer ayaan arkay xaalad taagan marka ay horumariyayaashu sameeyeen muuqaal, oo ay ku biireen laan, laakiin waxay illoobeen inaan arrinta u jiido JIRA. Dabcan, haddii waxaas oo dhan lagu sameeyo hal meel, way sahlanaan lahayd, laakiin dhab ahaantii waxaan ku qornaa koodhka IDE-ga, ku darso laamaha bitbucket ama GitHub, ka dibna ku jiido hawlaha Jira, taas awgeed waxaan u baahanahay inaan furno daaqado cusub. , mararka qaarkood geli mar kale iyo iwm. Markaad si fiican u xasuusato waxa aad u baahan tahay inaad sameyso marka xigta, markaa ma jirto wax faa'iido ah inaad mar kale furto guddiga. Natiijo ahaan, subaxdii markaad istaagto waxaad u baahan tahay inaad wakhti ku qaadato inaad cusboonaysiiso guddiga hawsha.
GitHub sidoo kale waxay naga caawin doontaa hawshan joogtada ah; bilawga, waxaan si toos ah u jiidi karnaa arrimaha khaanadda code_review markaan soo gudbino codsi jiid. Waxa kaliya ee aad u baahan tahay inaad sameyso waa inaad raacdo heshiiska magacaabista laanta:
La-qabsiga JIRA wuxuu ku shaqeeyaa ficillada Atlassian, ma ahan kuwa qumman, waa inaan sheegaa in qaar ka mid ah aysan ii shaqeynin gabi ahaanba. Laakiin waxaan ka wada hadli doonaa kaliya kuwa sida dhabta ah u shaqeeya oo si firfircoon loo isticmaalo.
Marka hore waxaad u baahan tahay inaad gasho JIRA adoo isticmaalaya ficilka: atlassian/gajira-login
Waxa aanu ka soo saarnay aqoonsiga hawsha magaca laanta:
- name: Find Issue
id: find_issue
shell: bash
run: |
echo "::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')"
echo brach name: $GITHUB_HEAD_REF
echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'
- name: Check Issue
shell: bash
run: |
if [[ "${{steps.find_issue.outputs.ISSUE_ID}}" == "" ]]; then
echo "Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name"
exit 1
fi
echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}
Haddii aad ka raadiso suuqa GitHub, waxaad ka heli kartaa ficil hawshan, laakiin waa inaan qoro wax la mid ah anigoo isticmaalaya grep anigoo isticmaalaya magaca laanta, sababtoo ah ficilkan Atlassian ma uusan dooneynin inuu ka shaqeeyo mashruucayga sinaba. , si aad u ogaato waxa meeshaas ka khaldan - in ka badan in aad wax la mid ah gacmahaaga ku sameyso.
Waxa hadhay oo dhan waa in hawsha loo raro tiirka "Dib-u-eegis code" marka la abuurayo codsi jiid:
Waxa jira tallaabo gaar ah oo tan ah GitHub, waxa kaliya ee ay u baahan tahay waa aqoonsiga aqoonsiga ee lagu helay tallaabadii hore iyo oggolaanshaha JIRA ee aan kor ku samaynay.
Si la mid ah, waxaad u jiidi kartaa hawlaha markaad ku biirto sayidkiisa, iyo dhacdooyinka kale ee socodka shaqada ee GitHub. Guud ahaan, waxay dhammaan ku xiran tahay male-awaalkaaga iyo rabitaanka inaad si toos ah u sameyso hababka caadiga ah.
natiijooyinka
Haddii aad eegto jaantuska caadiga ah ee DEVOPS, waxaanu daboolnay dhammaan marxaladaha, marka laga reebo in laga yaabo in la shaqeeyo, waxaan u maleynayaa haddii aad isku daydo, waxaad ka heli kartaa qaar ka mid ah ficillada suuqa ee isdhexgalka ee nidaamka miiska caawinta, markaa waxaan u qaadaneynaa in dhuumaha loo leexiyay. si qoto-dheer iyo gunaanad ayaa laga soo saari karaa iyadoo lagu saleynayo isticmaalkeeda.
Faa'iido:
Goobta suuqa oo leh ficillo diyaarsan oo loogu talagalay munaasabadaha oo dhan, tani waa mid aad u fiican. Intooda badan, waxaad sidoo kale eegi kartaa koodhka isha si aad u fahamto sida loo xalliyo mushkilad la mid ah ama aad codsi muuqaal ah ugu dhejiso qoraaga si toos ah kaydka GitHub.
Doorashada goobta la beegsanayo ee isu imaatinka: Linux, mac os, windows waa muuqaal xiiso leh.
Xirmooyinka Github waa shay aad u fiican, way ku habboon tahay in dhammaan kaabayaasha hal meel lagu hayo, uma baahnid inaad dhex marato daaqadaha kala duwan, wax walbaa waxay ku dhex jiraan radius hal ama laba gujis oo jiirka ah waxayna si fiican u dhexgalaan GitHub Actions. Taageerada diiwaangelinta Docker ee nooca bilaashka ah sidoo kale waa faa'iido wanaagsan.
GitHub waxay ku qarisaa siraha ku jira diiwaanka dhismaha, markaa u adeegsiga si loo kaydiyo ereyada sirta ah iyo calaamaduhu maaha wax cabsi leh. Intii lagu jiray dhammaan tijaabooyinkaygii, marna ma awoodin inaan arko sirta qaabkeeda saafiga ah ee console-ka.
Bilaash mashaariicda Isha Furan
Ogolaansho:
YML, si fiican, ma jecli isaga. Markaad la shaqeyneyso qulqulka noocaas ah, fariinta ugu caansan ee aan haysto waa "fix yml format", ka dib waxaad illowday inaad meel dhigto tab, ama waxaad ku qortaa xariiq khaldan. Guud ahaan, fadhiga hore ee shaashadda leh protractor iyo taliye ma aha waayo-aragnimada ugu fiican.
DEBUG, ka saarida qulqulka la samaynayo, dib-u-dhis ku samaynta, iyo soo saarista konsole-ku had iyo jeer maaha mid ku habboon, laakiin waa wax badan oo ka mid ah qaybta "waad dhaaftay"; waxaad isticmaashay inaad la shaqeyso IDEA ku habboon, markaad wax ka saari karto .
Waxaad ku qori kartaa ficilkaaga wax kasta haddii aad ku duubto Docker, laakiin Javascript kaliya ayaa asal ahaan lagu taageeray, dabcan tani waa arrin dhadhan, laakiin waxaan doorbidi lahaa wax kale halkii js.
Toddobaadka soo socda waxaan la ciyaari doonaa warbixin shirka Heisenbug 2020 Piter. Waxaan kuu sheegi doonaa ma aha oo kaliya sida looga fogaado khaladaadka marka la diyaarinayo xogta tijaabada, laakiin sidoo kale waxaan la wadaagayaa sirtayda ku shaqeynta xogta xogta ee codsiyada Java!