Aroha ki a GitLab me te kino ki nga pepeke? Kei te hiahia koe ki te whakapai ake i te kounga o to waehere puna? Na kua tae mai koe ki te wahi tika. I tenei ra ka korerotia e matou ki a koe me pehea te whirihora i te kaitirotiro PVS-Studio C# hei tirotiro i nga tono hanumi. Kia pai te ahua o te unicorn me te panui koa ki te katoa.
Ma te ara, i tukuna e matou te PVS-Studio 7.08, he maha nga mea i mahia e matou
- Kaitātari C # mo Linux me macOS;
- mono mo Rider;
- aratau arowhai rarangi konae hou.
Aratau arowhai rarangi kōnae
I mua, hei tirotiro i etahi o nga konae, me tuku he .xml me te rarangi o nga konae ki te kaitirotiro. Engari mai i te mea kaore tenei i te tino watea, kua taapirihia e matou te kaha ki te whakawhiti .txt, he tino ngawari te ora.
Hei taki i nga konae motuhake, me tohu e koe te haki --sourceFiles (-f) me te whakawhiti .txt me te rarangi o nga konae. Ko te ahua penei:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
Mena kei te pirangi koe ki te whakarite i nga tono mo te arowhai, ki te kumea ranei, ka taea e koe te mahi ma tenei aratau. Ko te rereketanga ko te whiwhi rarangi o nga konae hei tātari, ka whakawhirinaki ki nga punaha e whakamahia ana e koe.
Ko te kaupapa o te tirotiro i te tono hanumi
Ko te tino kaupapa o te haki ko te whakarite kia kaua e taka nga raru e kitea ana e te kaitirotiro i te wa o te whakakotahitanga. ariki manga. Kaore hoki matou e hiahia ki te wetewete i te kaupapa katoa i nga wa katoa. Ano, ka hanumi nga peka, he rarangi o nga konae kua whakarereketia. No reira, ka whakaaro ahau me taapiri he haki tono hanumi.
Koinei te ahua o te tono hanumi i mua i te whakatinanatanga o te kaitirotiro pateko:
Arā, ko ngā hapa katoa i roto i te peka huringa, ka neke ki te peka matua. I te mea kaore matou e hiahia ki tenei, ka taapirihia he tātaritanga, a inaianei ka penei te ahua o te hoahoa:
Ka tātari matou huringa2 a, ki te kore he hapa, ka whakaae matou ki te tono hanumi, ki te kore ka whakakorehia e matou.
Ma te ara, mena kei te pirangi koe ki te tarai i nga mahi me nga tono tono mo C/C++, katahi ka taea e koe te panui mo tera
GitLab
I mua i to tiimata ki te tarai i nga tono hanumi, me rehita koe me te tuku ake i to kaupapa. Mena kaore koe e mohio ki te mahi i tenei, ka whakaaro ahau
parau. Ko te tikanga mo te whakarite i te taiao e whakaahuatia ana i raro nei ko tetahi o nga mea ka taea. Ko te whainga ko te whakaatu i nga hikoinga mo te whakarite i te taiao e tika ana mo te wetewete me te whakarewa i te kaitirotiro. Tena pea i roto i to keehi ka pai ake te wehe i nga waahanga o te whakarite taiao (te taapiri i nga putunga, te whakauru i te kaitirotiro) me te tātari: hei tauira, te whakarite i nga whakaahua Docker me te taiao e tika ana me te whakamahi, me etahi atu tikanga ranei.
Kia pai ake te maarama ki nga mea ka puta inaianei, ka whakaaro ahau kia tirohia te hoahoa e whai ake nei:
E hiahia ana te kaitirotiro ki te .NET Core SDK 3 kia mahi, na i mua i te whakaurunga o te kaitirotiro me taapiri e koe nga putunga Microsoft ka whakauruhia nga whakawhirinaki e hiahiatia ana mo te kaitirotiro. Te taapiri i nga putunga Microsoft mo nga momo tohatoha Linux
Hei whakauru i te PVS-Studio na roto i te kaiwhakahaere kete, ka hiahia ano koe ki te taapiri i nga putunga PVS-Studio. Ko te taapiri i nga putunga mo nga tohatoha rereke ka whakaahuahia i roto i nga korero taipitopito
Ko te kaitirotiro me whai raihana ki te mahi. Ka taea e koe te tiki raihana whakamatautau i
parau. Kia mahara ko te aratau mahi kua whakaahuatia (te tātari i nga tono hanumi) me whai raihana hinonga. Na, ki te hiahia koe ki te whakamatau i tenei momo mahi, kaua e wareware ki te tohu i roto i te mara "Karere" e hiahia ana koe ki te raihana hinonga.
Mena ka puta he tono hanumi, katahi ka wetewete i te rarangi o nga konae kua whakarereke, mena ka wetewetehia nga konae katoa. Whai muri i te tātaritanga, me huri nga raarangi ki te whakatakotoranga e hiahiatia ana.
Inaianei, kei mua i o kanohi te algorithm o te mahi, ka taea e koe te neke ki te tuhi tuhinga. Ki te mahi i tenei, me huri koe i te konae .gitlab-ci.yml ranei, ki te kore e noho, hangahia. Hei waihanga, me panui koe i te ingoa o to kaupapa -> Whakaritea CI/CD.
Inaianei kua reri taatau ki te tuhi i te tuhinga. Me tuhi tuatahi te waehere ka whakauru i te kaitirotiro ka uru ki te raihana:
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
I te mea me puta te whakaurunga me te whakahohe i mua i era atu tuhinga katoa, ka whakamahia e matou he tapanga motuhake before_script. Tukua ahau ki te whakamarama i tenei waahanga iti.
E whakareri ana ki te tāuta i te kaitātari:
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
Te taapiri i nga putunga putunga PVS-Studio me te kaitirotiro:
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
Whakahohenga raihana:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - Ingoa Kaiwhakamahi.
$PVS_KEY - kī hua.
Te whakaora i nga whakawhirinakitanga kaupapa kei hea $CI_PROJECT_DIR – ara katoa ki te whaiaronga kaupapa:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
Mo te wetewete tika, me hanga angitu te kaupapa, me whakahoki ano ona whakawhirinakitanga (hei tauira, me tango nga kohinga NuGet e tika ana).
Ka taea e koe te tautuhi i nga taurangi taiao kei roto nga korero raihana ma te panui tautuhinga, a muri - i runga CI/CD.
I te matapihi e tuwhera ana, kimihia te taonga Ngā rerekētanga, paatohia te paatene kei te taha matau Roha me te taapiri i nga taurangi. Me penei te hua:
Inaianei ka taea e koe te haere ki te tātari. Tuatahi, me taapiri he tuhinga mo te tātaritanga katoa. Ki te haki -t ka tukuna e matou te huarahi ki te otinga ki te haki -o tuhia te ara ki te konae ka tuhia nga hua tātari. Kei te hiahia hoki matou ki te waehere whakahoki. I tenei keehi, kei te pirangi matou ki te whakamutua te mahi ina kei roto i te waehere whakahoki nga korero i tukuna nga whakatupato i te wa o te tātaritanga. Koinei te ahua o tenei waahanga:
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
Ka mahi nga waehere whakahoki i runga i te kaupapa o te kanohi moka. Hei tauira, mena i tukuna nga whakatupato i runga i te tātaritanga, ka rite te waehere whakahoki ki te 8. Mena ka pau te raihana i roto i te marama, ka rite te waehere whakahoki ki te 4. Mena i kitea nga hapa i te wa o te tātaritanga, a ka pau te raihana i roto i te marama, ka hoki mai te waehere, ka tuhia nga uara e rua: taapirihia nga nama ka whiwhi i te waehere whakahoki whakamutunga - 8+4=12. No reira, ma te tirotiro i nga moka e rite ana, ka taea te whiwhi korero mo nga momo whenua i te wa e tātarihia ana. Ko nga Waehere Whakahoki he whakamarama ake i te waahanga "pvs-studio-dotnet (Linux / macOS) Whakahoki Waehere" o te tuhinga "
I tenei keehi, kei te pirangi matou ki nga waehere whakahoki katoa ka puta te 8.
- exit_code=$((($exit_code & 8)/8))
Ka whiwhi matou i te 1 ina kei roto i te waehere whakahoki te moka o te nama e pirangi ana matou, ki te kore ka whiwhi 0.
Kua tae ki te wa ki te taapiri i te tātari tono hanumi. I mua i tenei mahi, me whakarite he waahi mo te tuhinga. Me mahi noa ina puta he tono hanumi. He penei te ahua:
merge:
script:
only:
- merge_requests
Me neke atu ki te tuhinga ake. I anga ahau ki te meka kaore te miihini mariko e mohio ki tetahi mea takenga / rangatira. Na kia awhina tatou ki a ia:
- git fetch origin
Inaianei ka whiwhi tatou i te rereketanga i waenga i nga manga ka tiakina te hua ki roto TXT kōnae:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
Kei hea $CI_COMMIT_SHA – hash of the last commit.
I muri mai, ka timata taatau ki te tarai i te rarangi o nga konae ma te whakamahi i te haki -f. Ka whakawhitihia e matou te konae .txt kua riro mai ki a ia. Ana, ma te whakataurite me te tātaritanga katoa, ka titiro tatou ki nga waehere whakahoki:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
Ko te tuhinga katoa mo te tirotiro i te tono hanumi ka penei te ahua:
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
Ko nga mea e toe ana ko te taapiri i te huringa rangitaki i muri i te tukatuka o nga tuhinga katoa. Ka whakamahia e matou te tapanga muri_tuhi me te whaipainga poro-tahuri:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Mahinga
Ma te ara, ki te hiahia koe ki te mahi pai me nga purongo .json i te takiwa mai i te IDE, katahi ahau ka whakaaro
Mo te pai, koinei .gitlab-ci.yml katoa:
image: debian
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Ina kua tapiritia e koe nga mea katoa ki te konae, pawhiria Whakaritea nga huringa. Kia kitea ai he tika nga mea katoa, haere ki CI / CD -> Pipeline -> rere. Ka tuwhera he matapihi miihini mariko, i te mutunga me whai ake nga mea e whai ake nei:
kite I angitu a Hopa - angitu, he pai nga mea katoa. Inaianei ka taea e koe te whakamatautau i nga mea i mahia e koe.
Nga tauira mahi
Hei tauira mahi, me hanga he kaupapa ngawari (i roto i te ariki) he maha nga konae kei roto. I muri i tera, i tetahi atu peka ka huri tatou i tetahi konae ka ngana ki te tono hanumi.
Kia rua nga take e whakaarohia ana: ina he hapa kei roto i te konae whakarereke me te kore. Tuatahi, he tauira me te hapa.
Me kii he konae kei te peka matua Program.cs, karekau he hapa, engari i tetahi atu peka ka taapirihia e te kaiwhakawhanake he waehere pohehe me te hiahia ki te tono hanumi. He aha te momo hapa i mahia e ia ehara i te mea nui, ko te mea nui ko te noho tonu. Hei tauira, kua wareware te kaiwhakahaere maka (Ae,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
Me titiro ki te hua o te wetewete i tetahi tauira me te hapa. Hei whakarite kia kotahi noa te konae i poroa, ka tapirihia e ahau te haki -r ki te raina whakarewanga pvs-studio-dotnet:
Ka kite tatou i kitea he hapa e te kaitirotiro me te kore e whakaae kia hanumi manga.
Kia tirohia te tauira kaore he hapa. Te whakatika i te waehere:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
Hanumi nga hua tātari tono:
E kite ana matou, karekau he hapa i kitea, a, i angitu te mahinga mahi, koinei ta matou i hiahia ki te tirotiro.
mutunga
Ko te whakakore i nga waehere kino i mua i te whakakotahi i nga manga he tino watea me te ahuareka. Na mena kei te whakamahi koe i te CI/CD, ngana ki te whakauru i tetahi kaitirotiro pateko hei tirotiro. I tua atu, he tino ngawari tenei mahi.
Mauruuru koe mo tou whakarongo.
Mena kei te pirangi koe ki te tiri i tenei tuhinga ki te hunga whakarongo ki te reo Ingarihi, whakamahia te hononga whakamaori: Nikolay Mironov.
Source: will.com