Ko te whakauru kaupapa VueJS+TS me SonarQube

He kaha taatau ki te whakamahi i te turanga i roto i a maatau mahi SonarQube kia mau tonu te kounga o te waehere ki te taumata teitei. I te whakaurunga o tetahi o nga kaupapa kua tuhia ki roto VueJs+Momotuhi, ka puta nga raruraru. Na reira, e hiahia ana ahau ki te korero atu ki a koe me pehea ta matou whakahaere ki te whakaoti.

Ko te whakauru kaupapa VueJS+TS me SonarQube

I roto i tenei tuhinga ka korero tatou, pera me taku i tuhi i runga ake nei, mo te turanga SonarQube. He ariā iti - he aha te tikanga, mo te hunga e rongo ana mo te wa tuatahi:

SonarQube (o mua Sonar) he papaa tuwhera mo te tirotiro haere tonu me te inenga kounga o te waehere.
Ka tautokohia te wetewete waehere me te rapu hapa i runga i nga ture o te MISRA C, MISRA C++, MITER/CWE me te CERT Secure Coding Standards programming standards. Ka taea hoki te mohio ki nga hapa mai i te OWASP Top 10 me te CWE/SANS Top 25 rarangi hapa papatono.
Ahakoa te mea e whakamahia ana e te papaaho nga momo taputapu kua rite, ka whakahekehia e SonarQube nga hua ki te papatohu kotahi, ka pupuri i te hitori o nga oma, na reira ka taea e koe te kite i te ahua whanui o nga huringa o te kounga o te rorohiko i te wa o te whanaketanga.

Ka kitea etahi atu korero i paetukutuku mana

He maha nga reo whakamaoritanga e tautokohia ana. Ki te whakatau i nga korero mai i te hono i runga ake nei, neke atu i te 25 nga reo. Hei tautoko i tetahi reo motuhake, me whakauru koe i te mono tika. Kei roto i te putanga hapori he mono mo te mahi tahi Javascript (tae atu ki te typeсript), ahakoa he rereke te korero a te wiki. Kei muri Javascript mono whakautu SonarJS, mo te Tuhituhituhi SonarTS Tuhinga.

Ka whakamahia te kiritaki whai mana ki te tuku korero korero sonarqube-scanner, ma te whakamahi i nga tautuhinga mai whiringahora-kōnae, ka tukuna enei raraunga ki te tūmau SonarQube mo te whakakotahi me te whakahiato.

Ki Javascript ko npm takai. Na, me timata taahi-taahiraa ki te whakatinana SonarQube в Tiro-whakamahi kaupapa Kakano.

Hei tuku i te tūmau SonarQube kia whai hua tatou te mahi a-toka.

sonar.yaml:

version: '1'
    services:
        simplesample-sonar:
            image: sonarqube:lts
            ports:
                - 9001:9000
                - 9092:9092
            network_mode: bridge

Whakarewa:

docker-compose -f sonar.yml up

I muri i tenei SonarQube ka wātea i: http://localhost:9001 .

Ko te whakauru kaupapa VueJS+TS me SonarQube
Karekau he kaupapa kei roto, he tika. Ka whakatikahia e matou tenei ahuatanga. I tango ahau i te kaupapa tauira mana mo VueJS+TS+Hē. Kia whakapiko tatou ki a tatou ano:

git clone https://github.com/vuejs/vue-test-utils-typescript-example.git

Tuatahi me whakauru tatou i te kiritaki SonarQubee kiia ana matawai sonarmo npm he takai:

yarn add sonarqube-scanner

Na ka taapiri tonu i te whakahau ki hōtuhi ki te mahi tahi.

package.json:

{
 … 
   scripts: {
      ...
      "sonar": "sonar-scanner"
      ...
   },
 …
}

I muri mai, kia mahi te matawai, me whakarite e koe nga tautuhinga kaupapa ki tetahi konae motuhake. Me timata tatou ki nga kaupapa matua.

sonar-project.properties:

sonar.host.url=http://localhost:9001

sonar.projectKey=test-project-vuejs-ts
sonar.projectName=Test Application (VueJS+TS)

sonar.sources=src
# sonar.tests=
sonar.test.inclusions=src/**/*tests*/**
sonar.sourceEncoding=UTF-8

  • sonar.host.url - wāhitau Sonar'A;
  • sonar.projectKey – kaitautuhi kaupapa ahurei i runga i te tūmau Sonar'A;
  • sonar.projectName – tona ingoa, ka taea te whakarereke i nga wa katoa, na te mea kua tohua te kaupapa e KaupapaKey;
  • sonar.puna – kōpaki me nga puna, te nuinga o tenei src, engari ka taea te aha. Kua whakaritea tenei kōpaki ki te kōpaki pakiaka, koinei te kōpaki i whakarewahia ai te matawai;
  • sonar.whakamatautau – he tawhā e hono ana ki te mea o mua. Koinei te kōpaki kei reira nga whakamatautau. I roto i tenei kaupapa, karekau he kōpaki pera, a ko te whakamatautau kei te taha o te waahanga e whakamatauria ana i te kōpaki 'whakamātautau', no reira ka warewarehia mo tenei wa ka whakamahi i te tawhā e whai ake nei;
  • sonar.test.inclusions – ara mo nga whakamatautau ma te whakamahi i te kanohi kanohi, tera pea he maha nga huānga kua whakawehea e te piko;
  • sonar.sourceEncoding – whakawaehere mo nga konae puna.

Mo te whakarewanga tuatahi o te matawai, kua reri nga mea katoa, haunga te mahi matua o mua: te whakarewa i te miihini whakamatautau ake, kia taea ai e ia te whakaputa korero mo te kapi, ka whakamahia e te matawai i muri mai.

Engari ki te mahi i tenei, me whirihora e koe te miihini whakamatautau hei whakaputa i enei korero. I tenei kaupapa, ko te miihini whakamatautau Tuhinga. A ko ona tautuhinga kei roto i te waahanga o te konae mōkihi.json.

Me taapiri enei tautuhinga:

"collectCoverage": true,
"collectCoverageFrom": [
      "src/**/*",
      "!src/main.ts",
      "!src/App.vue",
      "!src/**/*.d.*",
      "!src/**/*__tests__*"
],

Arā, ka whakatauhia e matou te haki ake mo te hiahia ki te tatau i te kapinga me te puna (me nga tuunga) i runga i te kaupapa ka hangaia.

Inaianei me whakahaere te whakamatautau:

yarn test

Ka kite tatou i nga mea e whai ake nei:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Ko te take kaore he waehere i roto i te waahanga ake. Me whakatika tenei.

HelloWorld.vue:

...
methods: {
    calc(n) {
      return n + 1;
    }
  },
mounted() {
  this.msg1 = this.msg + this.calc(1);
},
...

Ka nui tenei ki te tatau i te kapinga.

I muri i te whakaara ano i te whakamatautau, ka mohio matou ki tenei:

Ko te whakauru kaupapa VueJS+TS me SonarQube

I runga i te mata me kite tatou i nga korero mo te kapi, ka hangaia he kōpaki ki te kōpaki kaupapa kapinga me nga korero whakamaarama whakamaarama i roto i te whakatakotoranga whanui LCOV (LTP GCOV toronga).

Gcov he taputapu toha noa mo te tirotiro i te kapinga waehere. Ka hangaia e Gcov te maha o nga whiunga mo ia tauākī i roto i te papatono ka taea e koe te taapiri i nga korero ki te waehere puna. Ka tae mai a Gcov hei taputapu paerewa hei waahanga o te kete GCC.
Lcov - atanga kauwhata mo gcov. Ka kohia e ia nga konae gcov mo nga konae puna maha me te whakaputa i te huinga o nga wharangi HTML me nga korero waehere me te kapinga. Ka hangaia hoki nga wharangi kia ngawari ake te whakatere. Kei te tautoko a Lcov i te kapi o nga aho, nga mahi, me nga manga.

Ka oti nga whakamatautau, ka noho nga korero kapinga ki roto kapinga/lcov.info.
Me korero tatou Sonar'No hea mai? Na reira, me taapiri nga rarangi e whai ake nei ki tana konae whirihoranga. Engari he mea kotahi: ka taea e nga kaupapa te reo maha, ara, kei te kōpaki src he waehere puna mo te maha o nga reo whakamaoritanga me te hononga ki tetahi, ki tetahi atu, a, ko te whakamahinga o tetahi, tetahi atu mono ka whakatauhia e tana toronga. A ka taea te penapena korero korero ki nga waahi rereke mo nga reo hotaka rereke, no reira kei ia reo tana ake waahanga hei whakarite i tenei. Ka whakamahia e to maatau kaupapa Kakano, na me hiahia he waahanga tautuhinga mo tena:

sonar-project.properties:

sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info

Kua reri nga mea katoa mo te whakarewatanga tuatahi o te matawai. E hiahia ana ahau ki te tuhi ko te kaupapa SonarKa hanga aunoa i te wa tuatahi ka whakahaere koe i te matawai mo tetahi kaupapa. Hei nga wa e whai ake nei, ka whakaemihia nga korero kia kite ai i nga hihiko o nga huringa o nga tawhā kaupapa i roto i te waa.

Na, me whakamahi te whakahau i hangaia i mua mōkihi.json:

yarn run sonar 

Tuhipoka: ka taea hoki e koe te whakamahi i te tawhā -X mo etahi atu korero mo te takiuru.

Mena i whakarewahia te matawai mo te wa tuatahi, katahi ka tango tuatahi te matawai o te matawai. I muri i tera ka timata ka timata te matawai i te tūmau Sonar'a mo nga monomai kua whakauruhia, na reira ka tatau i te reo tautoko. Ko etahi atu tawhā mo tana mahi ka utaina ano: pūkete kounga, ture kaha, putunga inenga, ture tūmau.

Ko te whakauru kaupapa VueJS+TS me SonarQube

Ko te whakauru kaupapa VueJS+TS me SonarQube

Tuhipoka: E kore matou e korero mo ratou i roto i te anga o tenei tuhinga, engari ka taea e koe te whakapiri atu ki nga puna mana.

I muri mai, ka timata te tātari kōpaki src mo te waatea o nga konae puna mo te katoa (mehemea karekau i tino whakapumautia) te reo e tautokohia ana, me o raatau taurangi whai muri.

Ko te whakauru kaupapa VueJS+TS me SonarQube

Ka haere mai etahi atu wetewete, kaore e arohia e matou i roto i tenei tuhinga (hei tauira, penei i te panui, te kitenga o te taapiri waehere, me etahi atu).

I te mutunga o te mahi a te matawai, ka whakahiatohia nga korero katoa kua kohia, ka whakahiatohia, ka tukuna ki te tūmau.

I muri i tenei, kua kite tatou i nga mea i puta i te atanga tukutuku:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Kei te kite tatou, i whai hua tetahi mea, me te whakaatu i etahi momo kapinga, engari kaore i te rite ki a maatau Tuhinga-ripoata.

Kia mohio tatou. Me titiro ki te kaupapa i roto i nga korero taipitopito, pawhiria te uara kapinga, ka "taka" ki roto i te purongo konae:

Ko te whakauru kaupapa VueJS+TS me SonarQube

I konei ka kite tatou, i tua atu i te kōnae matua, i tirohia HelloWorld.vue, he konae ano matua.ts, ka pahuatia te pikitia katoa o te kapi. Engari me pehea i whakakorehia ai e matou i te tatauranga o te kapinga. Ae, he tika nga mea katoa, engari i runga i te taumata Tuhinga, engari na te matawai i tohu, no reira ka mutu i roto i ana tatauranga.

Me whakatika tenei:

sonar-project.properties:

...
sonar.exclusions=src/main.ts
...

Kei te pirangi au ki te whakamaarama: hei taapiri i nga kōpaki kua tohua ki tenei tawhā, ko nga kōpaki katoa kua tohua ki te tawhā ka taapirihia ano. sonar.test.inclusions.

Whai muri i te whakarewatanga o te matawai, ka kite matou i nga korero tika:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Ko te whakauru kaupapa VueJS+TS me SonarQube

Kia titiro tatou ki te waahanga e whai ake nei - Te kōtaha kounga. I korero ahau i runga ake mo te tautoko SonarHe maha nga reo i te wa kotahi. Koia tonu ta tatou e kite nei. Engari e mohio ana matou kua tuhia to maatau kaupapa TS, he aha te mea ka werohia te matawai ki nga raweke me nga arowhai kore. Ka tautuhia e matou te reo hei tātari ma te taapiri i tetahi atu tawhā ki te konae whirihoranga Sonar'A:

sonar-project.properties:

...
sonar.language=ts
...

Me whakahaere ano te matawai ka kite i te hua:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Kua ngaro katoa te korero.

Mena ka titiro tatou ki te raarangi matawai, ka kite tatou i te rarangi e whai ake nei:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Arā, kāre i taupūhia ā mātou kōnae kaupapa.

Ko te ahuatanga e whai ake nei: tautoko mana VueJs kei roto i te mono SonarJSko wai te kawenga Javascript.

Ko te whakauru kaupapa VueJS+TS me SonarQube

Engari kaore tenei tautoko i roto i te mono SonarTS ki TS, i whakatuwherahia he tiiti whaimana i roto i te kaitaki iro Sonar'A:

  1. https://jira.sonarsource.com/browse/MMF-1441
  2. https://github.com/SonarSource/SonarJS/issues/1281

Anei etahi o nga whakautu a tetahi o nga mangai mai i nga kaihanga SonarQube, e whakapumau ana i tenei meka.

Ko te whakauru kaupapa VueJS+TS me SonarQube

Ko te whakauru kaupapa VueJS+TS me SonarQube

Engari i pai nga mea katoa mo matou, ka whakahe koe. Ae, me whakamatau iti “hack”.
Mena he tautoko .vue-kōnae Sonar'Aue, katahi ka ngana ki te kii atu ki a ia kia rite ki a raatau Kakano.

Me taapiri he tawhā:

sonar-project.properties:

...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...

Kia whakarewahia te matawai:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Na, voila, kua hoki nga mea katoa ki te tikanga, me te kotahi te kōtaha anake mo Kakano. Arā, i taea e mātou te whakatika i te raru ki te tautoko VueJs+TS ki SonarQube.

Me ngana tatou ki te haere ake me te whakapai ake i nga korero kapinga.

He aha ta matou mahi i tenei wa:

  • tāpirihia ki te kaupapa Sonar-matawai;
  • whakaturia Tuhinga ki te whakaputa korero kapinga;
  • whirihora Sonar-matawai;
  • i whakaoti rapanga tautoko .vue-kōnae + Kakano.

I tua atu i te kapinga whakamatautau, tera ano etahi atu paearu whai hua mo te kounga o te waehere, hei tauira, te taarua waehere me te maha o nga rarangi (e uru ana ki te tatauranga o nga whakarea e pa ana ki te matatini waehere) o te kaupapa.

I roto i te whakatinanatanga o naianei o te mono mo te mahi tahi TS (SonarTS) e kore e mahi CPD (Taupiri Whakapiri Kaitirotiro) me te tatau rarangi waehere .vue-kōnae.

Hei waihanga i tetahi ahuatanga waihanga o te taarua waehere, taarua noa te konae wae me te ingoa rereke ka taapiri atu ki te waehere matua.ts he mahi hangarua me te taarua ki tetahi ingoa rereke. Hei tirotiro mo te taarua pera i roto .vueTuhinga o mua .ts -kōnae.

matua.ts:

...
function name(params:string): void {
  console.log(params);
}
...

Ki te mahi i tenei, me korero koe mo te wa poto mo te raina whirihoranga:

sonar-project.properties:

...
sonar.exclusions=src/main.ts
...

Me timata ano te matawai me te whakamatautau:

yarn test && yarn run sonar

Ko te tikanga, ka hinga to maatau korero, engari inaianei kaore matou e aro ki tera.

Mo te taarua i nga rarangi waehere, ka kite tatou:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Hei tirotiro ka whakamahia e matou CPD-whakamahinga - jscpd:

npx jscpd src

Ko te whakauru kaupapa VueJS+TS me SonarQube

Mo nga rarangi waehere:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Ka whakatauhia pea tenei i nga putanga mono a meake nei SonarJS(TS). E hiahia ana ahau ki te mohio kei te timata ratou ki te whakakotahi i enei mono e rua ki te kotahi SonarJS, ki taku whakaaro he tika.

Inaianei i hiahia ahau ki te whai whakaaro ki te huarahi hei whakapai ake i nga korero kapinga.

I tenei wa ka taea e taatau te kite i te kapinga whakamatautau mo nga waahanga mo te kaupapa katoa, me nga konae. Engari ka taea te whakawhānui ake i tenei tohu me nga korero mo te nui kōwae-whakamatautau mo te kaupapa, me te horopaki o nga konae.

He whare pukapuka ka taea Tuhinga-hurihia te ripoata ki te whakatakotoranga mo Sonar'A:
raraunga whakamātautau whānui - https://docs.sonarqube.org/display/SONAR/Generic+Test+Data.

Me whakauru tenei whare pukapuka ki ta tatou kaupapa:

yarn add jest-sonar-reporter

A taapiri atu ki te whirihoranga Tuhinga:

package.json:

…
"testResultsProcessor": "jest-sonar-reporter"
…

Inaianei me whakahaere te whakamatautau:

yarn test

Whai muri ka hangaia he konae ki te putake o te kaupapa test-report.xml.

Kia whakamahia e tatou i roto i te whirihoranga Sonar'A:

sonar-project.properties:

…
sonar.testExecutionReportPaths=test-report.xml
…

Na ka whakaara ano i te matawai:

yarn run sonar

Kia kite tatou he aha nga mea kua rereke i roto i te atanga Sonar'A:

Ko te whakauru kaupapa VueJS+TS me SonarQube

A kahore he mea i puta ke. Ko te meka kaore a Sonar e whakaaro ki nga konae i whakaahuahia i roto i te purongo Jest hei konae kōwae-whakamatautau. Hei whakatika i tenei ahuatanga, ka whakamahia e matou te tawhā whirihoranga Sonar sonar.whakamatautau, ka tino tohuhia e matou nga kōpaki me nga whakamatautau (kotahi anake kei a matou inaianei):

sonar-project.properties:

…
sonar.tests=src/components/__tests__
…

Me timata ano te matawai:

yarn run sonar

Kia kite tatou i nga mea kua rereke i te atanga:

Ko te whakauru kaupapa VueJS+TS me SonarQube

Inaianei kua kite matou i te maha o a matou kōwae-whakamatautau a, i te rahua ma te paato i roto, ka kite tatou i te tohatoha o tenei nama ki waenga i nga konae kaupapa:

Ko te whakauru kaupapa VueJS+TS me SonarQube

mutunga

Na, i titiro matou ki tetahi taputapu mo te tātari tonu SonarQube. I pai ta matou whakauru ki roto i tetahi kaupapa kua tuhia ki roto VueJs+TS. Kua whakatika etahi take hototahi. I whakanuia e matou nga korero korero o te tohu whakamaarama whakamatautau. I roto i tenei tuhinga, i tirohia e matou tetahi o nga paearu mo te kounga o te waehere (tetahi pea o nga mea matua), engari SonarQube e tautoko ana i etahi atu paearu kounga, tae atu ki te whakamatautau haumaru. Engari kaore enei waahanga katoa e waatea ana i roto hapori-putanga. Ko tetahi o nga ahuatanga whakamere me te whai hua ko te whakauru SonarQube me te maha o nga punaha whakahaere putunga waehere, penei i a GitLab me BitBucket. Hei aukati hanumi kumea(hanumi) tono'a ki te peka matua o te whare putunga ina paheke te kapi. Engari he korero tenei mo tetahi tuhinga rereke.

PS: Ko nga mea katoa e whakaahuahia ana i roto i te tuhinga i te ahua o te waehere e waatea ana i roto taku marau.

Ko nga kaiwhakamahi kua rehita anake ka uru ki te rangahau. Waitohu maitēnā.

Kei te whakamahi koe i te papaaho SonarQube:

  • 26,3 orauAe5

  • 15,8 orauNo3

  • 15,8 orauI rongo ahau mo tenei turanga me te hiahia ki te whakamahi3

  • 10,5 orauKua rongo ahau mo tenei turanga, kaore au e pai ki te whakamahi2

  • 0,0 orauKei te whakamahi ahau i tetahi turanga rereke0

  • 31,6 orauTe wa tuatahi i rongo ahau mo ia6

19 nga kaiwhakamahi i pooti. 3 nga kaiwhakamahi i aukati.

Source: will.com

Tāpiri i te kōrero