Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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.

PVS-Studio he taputapu mo te tautuhi i nga hapa me nga whakaraeraetanga pea i roto i te waehere puna o nga papatono kua tuhia ki C, C++, C# me Java. Ka mahi i runga i nga punaha 64-bit i runga i Windows, Linux me te macOS. Ka taea te wetewete i te waehere i hangaia mo te 32-bit, 64-bit me nga papaa ARM kua whakauruhia.

Ma te ara, i tukuna e matou te PVS-Studio 7.08, he maha nga mea i mahia e matou whakamere. Hei tauira:

  • 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:

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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:

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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 konei.

GitLab

GitLab he puna tuwhera puna tukutuku DevOps taputapu huringa ora e whakarato ana i te punaha whakahaere penapena waehere mo Git me tana ake wiki, punaha aroturuki take, pipeline CI/CD me etahi atu ahuatanga.

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 he tuhinga toku hoa mahi.

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:

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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 kua whakaahuatia i roto i te tuhinga e rite ana.

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 te waahanga whai take o te tuhinga.

Ko te kaitirotiro me whai raihana ki te mahi. Ka taea e koe te tiki raihana whakamatautau i whārangi tikiake kaitirotiro.

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.

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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.

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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:

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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 "Te tirotiro i nga kaupapa Visual Studio / MSBuild / .NET Core mai i te raina whakahau ma te whakamahi i te PVS-Studio".

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 poro-tahuri he kaupapa puna tuwhera e whakamahia ana hei huri i nga purongo hapa parser ki nga momo ahua, penei i te HTML. Ko te whakamaarama taipitopito mo te whaipainga ka tukuna i roto i te waahanga "Plog Converter Utility" te waahanga whai take o te tuhinga.

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 mono mo IDE Rider. Ko tana whakamahinga ka whakaahuahia i roto i nga korero taipitopito tuhinga whai take.

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:

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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, he he rawa):

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:

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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:

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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.

Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#
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. Te tātari i nga tono hanumi i GitLab ma te whakamahi i te PVS-Studio mo C#.

Source: will.com

Tāpiri i te kōrero