Hụrụ GitLab n'anya ma kpọọ ahụhụ asị? Chọrọ ịkwalite ogo koodu isi mmalite gị? Mgbe ahụ ị bịarutere ebe kwesịrị ekwesị. Taa, anyị ga-agwa gị otu esi ahazi PVS-Studio C # analyzer iji lelee arịrịọ njikọ. Nwee ọnọdụ unicorn na ọgụgụ dị ụtọ nye onye ọ bụla.
Site n'ụzọ, anyị wepụtara PVS-Studio 7.08, nke anyị mere ọtụtụ ihe
- C # nyocha maka Linux na macOS;
- ngwa mgbakwunye maka Rider;
- ọnọdụ nlele ndepụta faịlụ ọhụrụ.
Ụdị ndetu faịlụ
Na mbụ, iji lelee ụfọdụ faịlụ, ọ dị mkpa ịnyefe .xml nwere ndepụta faịlụ na onye nyocha. Ma ebe ọ bụ na nke a adịghị adaba nke ukwuu, anyị agbakwunyela ikike ịnyefe .txt, nke na-eme ka ndụ dị mfe.
Iji lelee faịlụ ndị akọwapụtara, ị ga-ezipụta ọkọlọtọ --sourceFiles (-f) ma nyefee .txt na ndepụta faịlụ. Ọ dị ka nke a:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
Ọ bụrụ na ị nwere mmasị ịtọlite nyocha ma ọ bụ dọpụta arịrịọ, ị nwekwara ike ime nke ahụ site na iji ọnọdụ a. Ihe dị iche ga-abụ na ịnweta ndepụta faịlụ iji nyochaa ma dabere na ụdị sistemụ ị na-eji.
Ụkpụrụ nke ịlele arịrịọ njikọ
Ihe kachasị mkpa nke nlele ahụ bụ iji hụ na nsogbu ndị nyocha chọpụtara n'oge njikọta adịghị adaba na nwe- alaka. Anyị achọghịkwa inyocha ọrụ ahụ dum oge ọ bụla. Ọzọkwa, mgbe ị na-ejikọta alaka, anyị nwere ndepụta nke faịlụ gbanwere. Ya mere, m na-atụ aro ka ịtinye nlele arịrịọ njikọ.
Nke a bụ ihe arịrịọ njikọta dị ka tupu emejuputa ihe nyocha static:
Ya bụ, njehie niile dị na alaka ụlọ ọrụ ahụ mgbanwe, ga-akwaga na ngalaba nna ukwu. Ebe ọ bụ na anyị agaghị achọ nke a, anyị na-agbakwunye nyocha, ma ugbu a eserese ahụ dị ka nke a:
Anyị na-enyocha mgbanwe2 na, ọ bụrụ na enweghị njehie, anyị na-anabata arịrịọ njikọ, ma ọ bụghị ya, anyị jụrụ ya.
Site n'ụzọ, ọ bụrụ na ị nwere mmasị na-nyocha eme ma dọta arịrịọ maka C / C ++, mgbe ahụ ị nwere ike ịgụ banyere ya.
GitLab
Tupu ịmalite nyochaa arịrịọ njikọ, ịkwesịrị ịdebanye aha na bulite ọrụ gị. Ọ bụrụ na ị maghị ka esi eme nke a, m na-atụ aro
Примечание. Usoro nhazi nke gburugburu ebe a kọwara n'okpuru ebe a bụ otu n'ime ihe ndị nwere ike ime. Ebumnuche bụ igosi usoro maka ịtọlite gburugburu ebe dị mkpa maka nyocha na ịmalite nyocha. Ikekwe n'ọnọdụ gị ọ ga-akacha mma ikewapụ ọkwa nke nkwadebe gburugburu ebe obibi (ịgbakwunye ebe nchekwa, ịwụnye ihe nyocha) na nyocha: dịka ọmụmaatụ, ịkwadebe ihe oyiyi Docker na gburugburu ebe dị mkpa na iji ha, ma ọ bụ usoro ọzọ.
Iji ghọta nke ọma ihe ga-eme ugbu a, a na m atụ aro ka ilele eserese ndị a:
Onye nyocha ahụ chọrọ .NET Core SDK 3 ka ọ rụọ ọrụ, yabụ tupu ịwụnye ihe nyocha, ịkwesịrị ịgbakwunye ebe nchekwa Microsoft nke a ga-etinye ihe ndabere achọrọ maka onye nyocha. Na-agbakwụnye ebe nchekwa Microsoft maka nkesa Linux dị iche iche
Iji wụnye PVS-Studio site na njikwa ngwugwu, ị ga-achọkwa ịgbakwunye ebe nchekwa PVS-Studio. A kọwapụtara ịgbakwunye ebe nchekwa maka nkesa dị iche iche n'ụzọ zuru ezu n'ime
Onye nyocha chọrọ igodo ikike iji rụọ ọrụ. Ị nwere ike nweta akwụkwọ ikike ikpe na
Примечание. Biko mara na ụdị ọrụ akọwara (nyocha nke arịrịọ njikọta) chọrọ ikikere Enterprise. Ya mere, ọ bụrụ na ịchọrọ ịnwale ụdị ọrụ a, echefula igosi na mpaghara "Ozi" na ịchọrọ ikikere Enterprise.
Ọ bụrụ na arịrịọ njikọta emee, yabụ naanị anyị kwesịrị inyocha ndepụta nke faịlụ gbanwere, ma ọ bụghị ya, anyị na-enyocha faịlụ niile. Mgbe nyochachara, anyị kwesịrị ịgbanwe ndekọ ahụ n'ụdị anyị chọrọ.
Ugbu a, inwe algọridim nke ọrụ n'ihu anya gị, ị nwere ike ịga n'ihu na-ede edemede. Iji mee nke a, ịkwesịrị ịgbanwe faịlụ ahụ .gitlab-ci.yml ma ọ bụ, ọ bụrụ na ọ dịghị, mepụta ya. Iji mepụta ya, ịkwesịrị pịa aha ọrụ gị -> Hazie CI/CD.
Ugbu a, anyị dị njikere ide edemede. Ka anyị buru ụzọ dee koodu ga-etinye ihe nyocha wee tinye ikike:
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
Ebe ọ bụ na echichi na ịgbalite ga-emerịrị tupu edemede ndị ọzọ niile, anyị na-eji akara pụrụ iche tupu_script. Ka m kọwaa nke a ntakịrị.
Na-akwado ịwụnye ihe nyocha:
- 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
Na-agbakwụnye ebe nchekwa PVS-Studio na onye nyocha:
- 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
Nkwalite ikike:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - Aha njirimara.
$PVS_KEY - igodo ngwaahịa.
Na-agbake ndabere oru ngo ebe $CI_PROJECT_DIR - ụzọ zuru oke na ndekọ ọrụ:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
Maka nyocha ziri ezi, a ga-arụrịrị ọrụ ahụ nke ọma, a ga-eweghachikwa ndabere ya (dịka ọmụmaatụ, ngwugwu NuGet dị mkpa ga-ebudata).
Ị nwere ike ịtọ mgbanwe gburugburu ebe nwere ozi ikike site na ịpị Setting, na mgbe - na CI/CD.
Na mpio mepere emepe, chọta ihe ahụ Mgbanwe, pịa bọtịnụ dị n'aka nri Gbasawanye ma tinye mgbanwe. Nsonaazụ kwesịrị ịdị ka nke a:
Ugbu a ị nwere ike ịga n'ihu na nyocha. Nke mbụ, ka anyị tinye otu edemede maka nyocha zuru oke. Na ọkọlọtọ -t anyị na-agafe ụzọ ngwọta na ọkọlọtọ -o dee ụzọ na faịlụ nke a ga-edepụta nsonaazụ nyocha. Anyị nwekwara mmasị na koodu nloghachi. N'okwu a, anyị nwere mmasị na nkwụsị ọrụ ahụ mgbe koodu nloghachi nwere ozi na ịdọ aka ná ntị nyere n'oge nyocha. Nke a bụ ihe iberibe a dị ka:
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
Koodu nloghachi na-arụ ọrụ na ụkpụrụ nke nkpuchi ntakịrị. Dịka ọmụmaatụ, ọ bụrụ na enyere ịdọ aka ná ntị n'ihi nyocha ahụ, mgbe ahụ, koodu nloghachi ga-abụ nha 8. Ọ bụrụ na ikike ahụ agwụ n'ime otu ọnwa, mgbe ahụ, koodu nloghachi ga-adị nha 4. Ọ bụrụ na achọpụtara njehie n'oge nyocha. na ikike agwụ n'ime otu ọnwa, koodu nloghachi, a ga-ede ụkpụrụ abụọ ahụ: tinye ọnụ ọgụgụ ọnụ ma nweta koodu nloghachi ikpeazụ - 8+4=12. Ya mere, site na ịlele ibe ndị kwekọrọ, enwere ike nweta ozi gbasara steeti dị iche iche n'oge nyocha. A kọwapụtara koodu nloghachi n'ụzọ zuru ezu na mpaghara "pvs-studio-dotnet (Linux / macOS) Koodu nloghachi" nke akwụkwọ ahụ "
N'okwu a, anyị nwere mmasị na koodu nloghachi niile ebe 8 pụtara.
- exit_code=$((($exit_code & 8)/8))
Anyị ga-enweta 1 mgbe koodu nloghachi nwere ntakịrị nke nọmba anyị nwere mmasị na ya, ma ọ bụghị ya, anyị ga-enweta 0.
Ọ bụ oge ịgbakwunye nyocha arịrịọ. Tupu anyị emee nke a, ka anyị kwadoo ebe maka edemede. Anyị kwesịrị ka emechaa ya naanị mgbe arịrịọ njikọta mere. Ọ dị ka nke a:
merge:
script:
only:
- merge_requests
Ka anyị gaa n'ihu na edemede ahụ n'onwe ya. M chere ihu na igwe mebere amaghị ihe ọ bụla mmalite/nna ukwu. Ya mere, ka anyị nyere ya aka ntakịrị:
- git fetch origin
Ugbu a, anyị na-enweta ọdịiche dị n'etiti alaka ma chekwaa nsonaazụ na txt faịlụ:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
Ebee $CI_COMMIT_SHA – hash nke ikpeazụ eme.
Ọzọ, anyị na-amalite nyochaa ndepụta faịlụ site na iji ọkọlọtọ -f. Anyị na-ebufe faịlụ .txt enwetaburu na ya. Ọfọn, site na ntụnyere na nyocha zuru oke, anyị na-ele anya na koodu nloghachi:
- 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
Edemede zuru ezu maka ịlele arịrịọ njikọ ga-adị ka nke a:
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
Naanị ihe fọdụrụ bụ ịgbakwunye ntụgharị log ka emechara script niile. Anyị na-eji akara after_script na ịba uru plog-ngbanwe:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Ịbara uru
Site n'ụzọ, ọ bụrụ na ịchọrọ ịrụ ọrụ nke ọma na akụkọ .json na mpaghara sitere na IDE, m na-atụ aro nke anyị.
Maka ịdị mma, ebe a bụ .gitlab-ci.yml n'uju:
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
Ozugbo i tinyechara ihe niile na faịlụ ahụ, pịa Mee mgbanwe. Iji hụ na ihe niile ziri ezi, gaa na CI / CD -> Pipelines -> -agba ọsọ. Window igwe mebere ga-emeghe, na njedebe nke enwere ihe ndị a:
hụrụ Job nwere ihe ịga nke ọma - ihe ịga nke ọma, ihe niile dị mma. Ugbu a ị nwere ike ịnwale ihe ị mere.
Ihe atụ ọrụ
Maka ọmụmaatụ ọrụ, ka anyị mepụta ọrụ dị mfe (na nwe-) nke ga-enwe ọtụtụ faịlụ. Mgbe nke ahụ gasịrị, na ngalaba ọzọ anyị ga-agbanwe naanị otu faịlụ ma gbalịa ịrịọ arịrịọ njikọ.
Ka anyị tụlee ikpe abụọ: mgbe faịlụ gbanwetụrụ nwere njehie na mgbe ọ naghị. Nke mbụ, ihe atụ nwere njehie.
Ka anyị kwuo na enwere faịlụ na ngalaba nna ukwu Mmemme.cs, nke na-enweghị njehie, mana na ngalaba ọzọ onye nrụpụta gbakwunyere koodu na-ezighi ezi ma chọọ ịrịọ arịrịọ. Kedu ụdị ndudue o mere adịghị mkpa, isi ihe bụ na ọ dị. Dịka ọmụmaatụ, onye ọrụ chefuru otutu (Ee,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
Ka anyị leba anya na nsonaazụ iji njehie nyochaa ihe atụ. Ọzọkwa iji jide n'aka na ọ bụ naanị otu faịlụ ka a tụgharịrị, agbakwunyere m ọkọlọtọ -r gaa n'ahịrị mmalite pvs-studio-dotnet:
Anyị na-ahụ na onye nyocha ahụ chọtara njehie ma ghara ikwe ka ejikọta alaka ndị ahụ.
Ka anyị lelee ihe atụ na-enweghị njehie. Na-emezi koodu:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
Jikota nsonaazụ nyocha arịrịọ:
Dị ka anyị nwere ike ịhụ, ọ dịghị njehie ahụghị, na arụrụ ọrụ ahụ gara nke ọma, nke bụ ihe anyị chọrọ ịlele.
nkwubi
Weeding si ọjọọ koodu tupu merging alaka dị nnọọ adaba na obi ụtọ. Yabụ ọ bụrụ na ị na-eji CI/CD, gbalịa itinye ihe nyocha static ka ịlele. Ọzọkwa, a na-eme nke a n'ụzọ dị mfe.
Daalụ maka mmasị gị.
Ọ bụrụ na ịchọrọ ịkọrọ ndị na-ege ntị na-asụ Bekee akụkọ a, biko jiri njikọ ntụgharị asụsụ: Nikolay Mironov.
isi: www.habr.com