Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)
Pono pinepine wau e kūkulu i kahi paipu no ke kūkulu ʻana i nā papahana ma Java. I kekahi manawa he open source, i kekahi manawa ʻaʻole. Ua hoʻoholo koke wau e hoʻāʻo e neʻe i kekahi o kaʻu mau waihona mai Travis-CI a me TeamCity i GitHub Actions, a ʻo ia ka mea i puka mai.
He aha kā mākou e hana ai?
ʻO ka mea mua, pono mākou i kahi papahana a mākou e hana ai, e hana i kahi noi liʻiliʻi ma Spring boot / Java 11 / Maven. No nā kumu o kēia ʻatikala, ʻaʻole mākou e hoihoi i ka loiloi noi; he mea nui ka ʻōnaehana a puni ka noi iā mākou, no laila e lawa ka mea hoʻoponopono REST API maʻalahi iā mākou.
Hiki iā ʻoe ke ʻike i nā kumu ma aneʻi: github.com/antkorwin/github-actions Hōʻike ʻia nā pae āpau o ke kūkulu ʻana i kahi paipu ma nā noi huki no kēia papahana.
JIRA a me ka hoʻolālā
Pono mākou e ʻōlelo e hoʻohana maʻamau mākou iā JIRA ma ke ʻano he tracker hoʻopuka, no laila e hana mākou i papa ʻokoʻa no kēia papahana a hoʻohui i nā pilikia mua ma laila:
Ma hope iki, e hoʻi mākou i nā mea hoihoi a JIRA a me GitHub e hāʻawi pū ai.
Hoʻokaʻawale mākou i ka hui o ka papahana
Hoʻokumu ʻia kā mākou papahana hoʻāʻo ma o ka maven, no laila he maʻalahi loa ke kūkulu ʻana, ʻo kā mākou mea e pono ai ʻo ka mvn clean package.
No ka hana ʻana i kēia me ka hoʻohana ʻana i Github Actions, pono mākou e hana i kahi faila i loko o ka waihona e wehewehe ana i kā mākou workflow, hiki ke hana ʻia me kahi faila yml maʻamau, ʻaʻole hiki iaʻu ke ʻōlelo makemake wau i ka "yml programming", akā he aha kā mākou e hana ai - hana mākou ma ka .github/ directory workflow/ file build.yml kahi e wehewehe ai mākou i nā hana i ke kūkulu ʻana i ka lālā kumu:
on - he wehewehe kēia o ka hanana kahi e hoʻomaka ai kā mākou palapala.
ma: huki_noi/kui - e hōʻike ana e pono e hoʻokuʻu ʻia kēia kaʻina hana i kēlā me kēia manawa e hana ʻia kahi pana i ka haku a hana ʻia nā noi huki.
Eia ka wehewehe ʻana o nā hana (hana) a me nā ʻanuʻu hoʻokō (anuu) no kēlā me kēia hana.
holo-i - ma aneʻi hiki iā mākou ke koho i ka OS target, kahaha, hiki iā ʻoe ke koho i ka Mac OS, akā ma nā hale waihona pilikino he mea kūʻai nui kēia (hoʻohālikelike ʻia me Linux).
hana hiki iā ʻoe ke hoʻohana hou i nā hana ʻē aʻe, no ka laʻana, me ka hoʻohana ʻana i nā hana/setup-java hana mākou e hoʻokomo ai i ke kaiapuni no Java 11.
Me ke kōkuaʻana o me hiki iā mākou ke kuhikuhi i nā ʻāpana a mākou e hoʻomaka ai i ka hana, ʻo ia hoʻi nā ʻōlelo hoʻopaʻapaʻa e hāʻawi ʻia i ka hana.
ʻO nā mea a pau i koe e holo i ka papahana kūkulu ma Maven: run: mvn -B clean package hae -B pono mākou i kahi mode non-interactive no laila ʻaʻole makemake ka maven e nīnau iā mākou i kekahi mea
Nui! I kēia manawa, i kēlā me kēia manawa āu e hoʻohiki ai i ka haku, hoʻomaka ke kūkulu ʻana o ka papahana.
Hoʻomaka ka hoʻāʻo ʻana
Maikaʻi ka ʻaha, akā i ka ʻoiaʻiʻo, hiki ke hōʻuluʻulu maikaʻi ʻia kahi papahana, akā ʻaʻole hana. No laila, ʻo ka ʻanuʻu aʻe e hoʻokaʻawale i nā holo hoʻāʻo. Eia kekahi, ʻoi aku ka maʻalahi o ka nānā ʻana i nā hopena o ka hele ʻana i nā hoʻokolohua ke hana ʻoe i kahi loiloi PR - ʻike maopopo ʻoe ua hala nā hoʻokolohua a ʻaʻohe mea poina e holo i kā lākou lālā ma mua o ka hana ʻana i kahi hui.
E holo mākou i nā hoʻokolohua i ka wā e hana ai i kahi noi huki a hoʻohui i ka haku, a ma ka manawa like mākou e hoʻohui i ka hana ʻana i kahi hōʻike e pili ana i ka uhi code.
No ka uhi ʻana i nā hoʻokolohua, hoʻohana au i ka codecov i hui pū me ka plugin jacoco. Loaʻa i ka codecov kāna hana ponoʻī, akā pono ia i kahi hōʻailona e hana me kā mākou noi huki:
${{ secrets.CODECOV_TOKEN }} - E ʻike mākou i kēia kūkulu ʻana ma mua o hoʻokahi manawa, ʻo nā mea huna he mea hana no ka mālama ʻana i nā mea huna ma GitHub, hiki iā mākou ke kākau ma laila i nā huaʻōlelo/hōʻailona/hosts/urls a me nā ʻikepili ʻē aʻe ʻaʻole pono e hoʻokomo ʻia i ka waihona waihona waihona.
Hiki iā ʻoe ke hoʻohui i kahi loli i nā mea huna i nā hoʻonohonoho waihona ma GitHub:
Hiki iā ʻoe ke loaʻa kahi hōʻailona ma codecov.io Ma hope o ka ʻae ʻia ma o GitHub, e hoʻohui i kahi papahana lehulehu pono ʻoe e hahai i kahi loulou e like me kēia: inoa mea hoʻohana GitHub/[ inoa inoa]. Hiki ke hoʻohui ʻia kahi waihona pilikino; e hana i kēia, pono ʻoe e hāʻawi i nā kuleana codecov i ka noi ma Github.
I kēia manawa e hoʻokomo ka codecov bot i kēlā me kēia o kā mākou noi huki a hoʻohui i kahi pakuhi hoʻololi uhi:
E hoʻohui kākou i kahi mea hoʻoponopono static
I ka hapa nui o kaʻu mau papahana open source, hoʻohana au i ke ao sonar no ka nānā ʻana i nā code static, maʻalahi ke hoʻopili iā travis-ci. No laila he hana kūpono i ka neʻe ʻana i GitHub Actions e hana like. He mea ʻoluʻolu ka mākeke hana, akā i kēia manawa ua hoʻohaʻahaʻa iki iaʻu, no ka mea maʻamau ua loaʻa iaʻu ka hana aʻu e pono ai a hoʻohui ʻia i ka workflow. Akā, ua ʻike ʻia ʻaʻole kākoʻo ka sonar i ka hana ʻana ma o kahi hana no ka nānā ʻana i nā papahana ma ka maven a i ʻole gradle. ʻOiaʻiʻo, ua kākau ʻia kēia ma ka palapala, akā ʻo wai ka mea heluhelu?!
ʻAʻole hiki ke hana ma o kahi hana, no laila e hana mākou ma o ka mvn plugin:
SONAR_TOKEN - hiki ke loaʻa ma sonarcloud.io a pono ʻoe e hoʻopaʻa inoa ma nā mea huna. GITHUB_TOKEN - he hōʻailona paʻa kēia i hana ʻia e GitHub, me ke kōkua o ka sonarcloud[bot] e hiki ke hoʻopaʻa inoa iā Git i mea e waiho ai i nā leka iā mākou i nā noi huki.
Dsonar.projectKey - ka inoa o ka papahana ma ka sonar, hiki iā ʻoe ke ʻike iā ia ma nā hoʻonohonoho papahana.
Dsonar.organization - inoa o ka hui mai GitHub.
Hana mākou i kahi noi huki a kali i ka sonarcloud[bot] e hele mai ma nā ʻōlelo:
Hoʻoponopono hoʻokuʻu
Ua hoʻonohonoho ʻia ke kūkulu ʻana, ua holo nā hoʻāʻo, a hiki iā mākou ke hana i kahi hoʻokuʻu. E nānā pehea e hiki ai i GitHub Actions ke maʻalahi i ka hoʻokele hoʻokuʻu.
Ma ka hana, loaʻa iaʻu nā papahana nona ka code base i ka bitbucket (e like nā mea a pau ma kēlā moʻolelo "Kākau wau i ka bitbucket i ke ao, hana iā GitHub i ka pō"). ʻO ka mea pōʻino, ʻaʻohe mea hana hoʻokele hoʻokuʻu i kūkulu ʻia i ka bitbucket. He pilikia kēia, no ka mea, no kēlā me kēia hoʻokuʻu, pono ʻoe e hana lima i kahi ʻaoʻao i ka hui ʻana a hoʻolei i nā hiʻohiʻona a pau i hoʻokuʻu ʻia ma laila, e ʻimi i nā hale aliʻi o ka noʻonoʻo, nā hana ma jira, hana i loko o ka waihona. Nui nā manawa e hana hewa ai, hiki iā ʻoe ke hoʻopoina i kekahi mea a i ʻole e hoʻokomo i kahi mea i hoʻokuʻu ʻia i ka manawa i hala, i kekahi manawa ʻaʻole maopopo i ka mea e hoʻokaʻawale ai i kahi noi huki e like me - he hiʻohiʻona a i ʻole hoʻoponopono bug, a i ʻole nā hoʻoponopono hoʻoponopono, a i ʻole mea hoʻolālā .
Pehea e hiki ai i nā hana GitHub ke kōkua iā mākou? Aia kahi hana nui - hoʻokuʻu drafter, hiki iā ʻoe ke hoʻonohonoho i kahi faila memo hoʻokuʻu e hoʻonohonoho i nā ʻāpana o nā noi huki a hui pū iā lākou i ka faila memo hoʻokuʻu:
Laʻana laʻana no ka hoʻonohonoho ʻana i kahi hōʻike (.github/release-draafter.yml):
name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
- title: ' New Features'
labels:
- 'type:features'
# в эту категорию собираем все PR с меткой type:features
- title: ' Bugs Fixes'
labels:
- 'type:fix'
# аналогично для метки type:fix и т.д.
- title: ' Documentation'
labels:
- 'type:documentation'
- title: ' Configuration'
labels:
- 'type:config'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
template: |
## Changes
$CHANGES
Hoʻohui i kahi palapala e hoʻopuka i kahi hoʻokuʻu kikoʻī (.github/workflows/release-draft.yml):
E hōʻiliʻili ʻia nā noi huki a pau mai kēia manawa i nā memo hoʻokuʻu - magic!
Eia paha ka nīnau: pehea inā poina nā mea hoʻomohala e kau i nā hōʻailona ma ka PR? A laila ʻaʻole maopopo ka ʻāpana e hoʻokomo ai, a e hana hou ʻoe me ia me ka lima, me kēlā me kēia PR ma kahi kaʻawale. No ka hoʻoponopono ʻana i kēia pilikia, hiki iā mākou ke hoʻohana i kahi hana ʻē aʻe - hōʻoia hōʻailona - ʻike ʻo ia i ka hele ʻana o nā hōʻailona ma ka noi huki. Inā ʻaʻohe mau inoa i koi ʻia, a laila e hāʻule ka nānā a ʻike mākou i kahi leka e pili ana i kēia i kā mākou noi huki.
I kēia manawa, pono e kaha ʻia kekahi noi huki me kekahi o nā hōʻailona: type: fix, type: features, type: documentation, type:tests, type:config.
Aunoa-annotation o nā noi huki
No ka mea ua hoʻopā mākou i kahi kumuhana e like me ka hana kūpono me nā noi huki, pono ke kamaʻilio e pili ana i kahi hana e like me ka labeler, kau ʻo ia i nā hōʻailona ma PR e pili ana i nā faila i hoʻololi ʻia. No ka laʻana, hiki iā mākou ke hōʻailona e like me [kūkulu] i kekahi noi huki i loaʻa nā loli i ka papa kuhikuhi .github/workflow.
ʻAʻole i kūleʻa iaʻu i ka hoʻopaʻa ʻana i ka hana e kau maʻalahi i nā lepili i nā noi huki me ka hana e nānā ai i ka loaʻa ʻana o nā lepili i makemake ʻia; ʻaʻole makemake ka match-label e ʻike i nā lepili i hoʻohui ʻia e ka bot. He mea maʻalahi ke kākau i kāu hana ponoʻī e hoʻohui i nā pae ʻelua. Akā ma kēia ʻano he mea maʻalahi ia e hoʻohana; pono ʻoe e koho i kahi lepili mai ka papa inoa i ka wā e hana ai i kahi noi huki.
ʻO ka manawa kēia e kau ai
Ua ho'āʻo wau i kekahi mau koho hoʻolālā ma o GitHub Actions (ma o ssh, ma scp, a me ka hoʻohana ʻana i ka docker-hub), a hiki iaʻu ke ʻōlelo aku, ʻoi aku paha, e ʻike ʻoe i kahi ala e hoʻouka ai i ka binary i ka server, ʻaʻole pili i ke kekee o kāu pipeline. ʻo ia.
Makemake au i ke koho o ka mālama ʻana i nā ʻōnaehana holoʻokoʻa ma kahi hoʻokahi, no laila e nānā kākou pehea e kau ai i GitHub Packages (he waihona kēia no ka ʻike binary, npm, jar, docker).
Kākau no ke kūkulu ʻana i kahi kiʻi docker a hoʻopuka iā ia ma GitHub Packages:
ʻO ka mea mua, pono mākou e kūkulu i ka faila JAR o kā mākou noi, a laila helu mākou i ke ala i ka GitHub docker registry a me ka inoa o kā mākou kiʻi. Aia kekahi mau hoʻopunipuni ma aneʻi ʻaʻole mākou i ʻike i kēia manawa:
ʻO kahi hana e like me: echo "::set-output name=NAME::VALUE" hiki iā ʻoe ke hoʻonohonoho i ka waiwai o kahi hoʻololi i ka ʻanuʻu o kēia manawa, i hiki ke heluhelu ʻia ma nā ʻanuʻu ʻē aʻe a pau.
hiki iā ʻoe ke loaʻa i ka waiwai o ka mea hoʻololi i hoʻonohonoho ʻia ma ka ʻanuʻu mua ma o ka mea hōʻike o kēia ʻanuʻu: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
ʻO ka mea hoʻololi GITHUB_REPOSITORY maʻamau e mālama i ka inoa o ka waihona a me kāna mea nona ("owner/repo-name"). I mea e ʻoki ai i nā mea a pau mai kēia laina koe wale nō ka inoa o ka waihona, e hoʻohana mākou i ka syntax bash: ${GITHUB_REPOSITORY#*/}
I mea e hōʻike ai i ke ʻano o ke kiʻi, hoʻohana mākou i nā huahelu mua mai ka SHA hash o ka commit - GITHUB_SHA aia kekahi mau nuances ma aneʻi, inā ʻoe e hana i kēlā mau hale ʻaʻole wale i ka hui ʻana i haku, akā e like me ka hana ʻana i ka noi huki. hanana, a laila ʻaʻole like paha ʻo SHA i ka hash a mākou e ʻike ai ma ka mōʻaukala git, no ka mea, hana nā hana / checkout i kāna hash kūʻokoʻa e pale i nā hana deadlocking i ka PR.
Inā hana maikaʻi nā mea a pau, a laila wehe i ka ʻāpana o nā pōʻai (https://github.com/antkorwin/github-actions/packages) i loko o ka waihona, e ʻike ʻoe i kahi kiʻi docker hou:
Ma laila hiki iā ʻoe ke ʻike i kahi papa inoa o nā mana o ke kiʻi docker.
ʻO nā mea a pau i koe, ʻo ka hoʻonohonoho ʻana i kā mākou kikowaena e hana me kēia hoʻopaʻa inoa a hoʻomaka hou i ka lawelawe. E kamaʻilio paha wau e pili ana i ka hana ʻana i kēia ma o systemd i kekahi manawa.
Ka mālama ʻana
E nānā i kahi koho maʻalahi e pili ana i ka hana ʻana i kahi nānā olakino no kā mākou noi me ka hoʻohana ʻana iā GitHub Actions. He mea hoʻokō kā kā mākou noi boot, no laila ʻaʻole pono mākou e kākau i kahi API e nānā i kona kūlana; ua hana mākou i nā mea āpau no ka palaualelo. Pono ʻoe e huki i ka host: SERVER-URL:PORT/actuator/health
ʻO nā mea a pau e pono ai mākou e kākau i kahi hana e nānā i ka server me ka cron, a inā ʻaʻole ia e pane mai iā mākou, a laila e hoʻouna mākou i kahi leka hoʻomaopopo ma ke kelepona.
ʻO ka mea mua, e noʻonoʻo pehea e holo ai i kahi kaʻina hana cron:
E nānā pono kākou i ke kūlana kikowaena ma o ka 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"
ʻO ka mea mua, mālama mākou i kahi loli i ka mea a ke kikowaena i pane ai i ka noi, ma ka pae aʻe e nānā mākou i ke kūlana UP a, inā ʻaʻole kēia ka hihia, a laila haʻalele mākou me kahi hewa. Inā pono ʻoe e "hoʻoulu" i kahi hana me kou mau lima, a laila puka 1 - mea kaua kūpono.
- 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 }}
Hoʻouna mākou i ka telegram wale nō inā hāʻule ka hana ma ka pae mua. No ka hoʻouna ʻana i kahi leka, hoʻohana mākou i ka appleboy/telegram-action; hiki iā ʻoe ke heluhelu e pili ana i ka loaʻa ʻana o kahi hōʻailona bot a me ke kamaʻilio id i ka palapala: github.com/appleboy/telegram-action
Mai poina e kākau i nā mea huna ma Github: URL no ke kikowaena a me nā hōʻailona no ka bot telegram.
Ke mele bonus - JIRA no ka palaualelo
Ua hoʻohiki wau e hoʻi mākou i JIRA, a ua hoʻi mākou. He mau haneli mau manawa aʻu i ʻike ai i kahi kūlana ma kahi kū i ka wā i hana ai nā mea hoʻomohala i kahi hiʻohiʻona, hoʻohui i kahi lālā, akā poina e kauo i ka pilikia i JIRA. ʻOiaʻiʻo, inā hana ʻia kēia mau mea ma kahi hoʻokahi, ʻoi aku ka maʻalahi, akā ʻoiaʻiʻo, kākau mākou i ke code i ka IDE, hoʻohui i nā lālā i bitbucket a i ʻole GitHub, a laila kauo i nā hana i Jira, no kēia pono mākou e wehe i nā puka makani hou. , i kekahi manawa e komo hou a pela aku. Ke hoʻomanaʻo pono ʻoe i kāu mea e hana ai ma hope, a laila ʻaʻohe kumu o ka wehe hou ʻana i ka papa. ʻO ka hopena, i ke kakahiaka i kahi standup pono ʻoe e hoʻolilo i ka manawa e hoʻonui i ka papa hana.
E kōkua pū ʻo GitHub iā mākou i kēia hana maʻamau; no ka hoʻomaka ʻana, hiki iā mākou ke huki i nā pilikia i loko o ke kolamu code_review ke waiho mākou i kahi noi huki. ʻO nā mea a pau āu e hana ai, ʻo ka hahai ʻana i ka hui inoa lālā:
[имя проекта]-[номер таска]-название
no ka laʻana, inā ʻo GA ke kī pāhana "GitHub Actions", a laila GA-8-jira-bot hiki ke lilo i lālā no ka hoʻokō ʻana i ka hana GA-8.
Hoʻohui ʻia me JIRA ma o nā hana mai Atlassian, ʻaʻole kūpono lākou, pono wau e ʻōlelo ʻaʻole i hana kekahi o lākou iaʻu. Akā e kūkākūkā mākou i nā mea i hana maoli a hoʻohana ikaika ʻia.
Pono ʻoe e komo i ka JIRA me ka hoʻohana ʻana i ka hana: atlassian/gajira-login
- 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}}
Inā ʻoe e ʻimi i ka mākeke GitHub, hiki iā ʻoe ke loaʻa kahi hana no kēia hana, akā pono wau e kākau i ka mea like me ka hoʻohana ʻana i ka grep me ka hoʻohana ʻana i ka inoa o ka lālā, no ka mea ʻaʻole makemake kēia hana mai Atlassian e hana i kaʻu papahana ma kekahi ʻano. , e noʻonoʻo i ka hewa ma laila - ʻoi aku ka lōʻihi ma mua o ka hana ʻana i ka mea like me kou mau lima.
ʻO nā mea a pau, ʻo ka hoʻoneʻe ʻana i ka hana i ke kolamu "Code review" i ka wā e hana ai i kahi noi huki:
Aia kahi hana kūikawā no kēia ma GitHub, ʻo ia wale nō ka mea e pono ai ka ID hoʻopuka i loaʻa i ka pae mua a me ka ʻae ʻana ma JIRA a mākou i hana ai ma luna.
Ma ke ala like, hiki iā ʻoe ke kauo i nā hana ke hoʻohui ʻia i loko o ka haku, a me nā hanana ʻē aʻe mai GitHub workflow. Ma keʻano laulā, pili ia i kou noʻonoʻo a me ka makemake e hoʻokaʻawale i nā kaʻina hana maʻamau.
haʻina
Inā 'oe e nana i ka maʻamau DEVOPS kiʻi, ua uhi mākou i nā pae a pau, koe nae paha e hana, ke manao nei au ina oe e ho'āʻo, e hiki ke loaʻa i kekahi hana i loko o ka makeke no ka hoʻohuiʻana me ke kōkua-papa nenoaiu, no laila mākou e manao ua huli ka pipeline. ʻO ka ʻoiaʻiʻo, hiki ke huki ʻia nā hopena ma muli o kāna hoʻohana ʻana.
Kākoʻo:
Makeke me nā hana i hoʻomākaukau ʻia no nā manawa āpau, ʻoluʻolu loa kēia. I ka hapanui o lākou, hiki iā ʻoe ke nānā i ke kumu kumu e hoʻomaopopo ai pehea e hoʻoponopono ai i kahi pilikia like a i ʻole e kau i kahi noi hiʻohiʻona i ka mea kākau pololei ma ka waihona GitHub.
Ke koho ʻana i ke kahua paʻa no ka hui ʻana: Linux, mac os, windows he hiʻohiʻona hoihoi.
He mea maikaʻi loa ʻo Github Packages, ʻoi aku ka maʻalahi o ka mālama ʻana i nā ʻōnaehana holoʻokoʻa ma kahi hoʻokahi, ʻaʻole pono ʻoe e heʻenalu ma nā puka makani ʻē aʻe, aia nā mea āpau i loko o ka radius o hoʻokahi a ʻelua paha kaomi ʻiole a hoʻohui pū ʻia me nā Hana GitHub. ʻO ke kākoʻo hoʻopaʻa inoa Docker i ka mana manuahi he mea maikaʻi hoʻi.
Hūnā ʻo GitHub i nā mea huna i ke kūkulu ʻana i nā lāʻau, no laila ʻaʻole makaʻu ka hoʻohana ʻana iā ia e mālama i nā huaʻōlelo a me nā hōʻailona. I kaʻu mau hoʻokolohua āpau, ʻaʻole hiki iaʻu ke ʻike i ka mea huna i kona ʻano maʻemaʻe i ka console.
No nā papahana Open Source
ʻAla:
YML, ʻae, ʻaʻole wau makemake iā ia. I ka hana ʻana me ia kahe, ʻo ka memo commit maʻamau i loaʻa iaʻu ʻo "fix yml format", a laila poina ʻoe e kau i kahi pā ma kahi, a i ʻole ʻoe e kākau ma ka laina hewa. Ma keʻano laulā, ʻo ka noho ʻana i mua o kahi pale me ka protractor a me ke aliʻi ʻaʻole ia ka mea ʻoluʻolu loa.
ʻO DEBUG, ka hoʻopau ʻana i ka kahe me nā hana, ka holo ʻana i kahi kūkulu hou, a me ka hoʻopuka ʻana i ka console ʻaʻole maʻalahi ia, akā ʻoi aku ka maikaʻi o ka ʻāpana "ua overdone" ʻoe; ua maʻa ʻoe e hana me ka IDEA kūpono, ke hiki iā ʻoe ke debug i kekahi mea. .
Hiki iā ʻoe ke kākau i kāu hana ma kekahi mea inā ʻoe e kāwili iā ia ma Docker, akā ʻo javascript wale nō ke kākoʻo maoli ʻia, ʻoiaʻiʻo he mea ʻono kēia, akā makemake wau i kahi mea ʻē aʻe ma mua o js.
ʻO kēia pule aʻe e hoʻokani ana au me hōʻike ma ka hui Heisenbug 2020 Piter. E haʻi aku wau iā ʻoe ʻaʻole wale pehea e pale aku ai i nā hewa i ka wā e hoʻomākaukau ai i ka ʻikepili hoʻāʻo, akā e kaʻana like i kaʻu mau mea huna o ka hana ʻana me nā pūʻulu ʻikepili i nā noi Java!